Path: utzoo!utgpu!watmath!clyde!att!osu-cis!tut.cis.ohio-state.edu!bloom-beacon!husc6!lownlab!kiely From: kiely@lownlab.harvard.edu (James P. Kiely) Newsgroups: comp.sys.ibm.pc Subject: MASM "GROUP" is weird Keywords: segment register GROUP assembly Message-ID: <733@husc6.harvard.edu> Date: 30 Nov 88 18:30:17 GMT Sender: news@husc6.harvard.edu Reply-To: kiely@lownlab.harvard.edu (James P. Kiely) Organization: Lown Cardiovascular Laboratory, Harvard University Lines: 134 References: Distribution: I am trying to use the "GROUP" directive with MASM 5.1 and I am having no end of trouble. In the MASM 5.0 Programmers' Guide on page 106 Section 5.3 it states: "... use a group if you want several types of data to be organized in separate segments in your source code, but want them all to be accessible from a single, common segment register at run time. Below is a little test program to illustrate my problem. BTW: the linker is v3.65 ============================================================================= page 66, 132 title group_test ; ; test the GROUP directive FIRST_GROUP GROUP FIRST_TEXT, FIRST_DATA, FIRST_STACK FIRST_TEXT SEGMENT byte public 'CODE' ASSUME nothing ASSUME cs:FIRST_GROUP, ds:FIRST_GROUP, ss:FIRST_GROUP main PROC FAR mov ax, SEG FIRST_GROUP mov ax, cs mov ax, SEG FIRST_TEXT mov ax, ds mov ax, SEG FIRST_DATA mov ax, ss mov ax, SEG FIRST_STACK mov ax, OFFSET FIRST_GROUP:rcs_id mov ax, OFFSET FIRST_DATA:rcs_id mov ax, 4C00h ; \ exit int 21h ; / main ENDP FIRST_TEXT ENDS FIRST_DATA SEGMENT word public 'DATA' rcs_id db "$Header$" FIRST_DATA ENDS FIRST_STACK SEGMENT word stack 'STACK' fstack db 100h DUP (?) FIRST_STACK ENDS END main ============================================================================= Below here is the codeview output of the above program. Note that the SEG operator says that FIRST_TEXT, FIRST_DATA, and FIRST_STACK are all in different segments. Why? I thought that they were all in the same segment because they were in the group FIRST_GROUP. Interestingly enough, the data at FIRST_GROUP:rcsid and FIRST_DATA:rcsid appear to be identical. Is this *always* true? And when I push something on to the stack, does it get put at SS:SP or at FIRST_GROUP:SP or am I supposed to initialize SS at the start of the program? ============================================================================= >u 0 1b MAIN: 15: mov ax, SEG FIRST_GROUP 46A8:0000 B8A846 MOV AX,46A8 16: mov ax, cs 46A8:0003 8CC8 MOV AX,CS 17: mov ax, SEG FIRST_TEXT 46A8:0005 B8A846 MOV AX,46A8 18: mov ax, ds 46A8:0008 8CD8 MOV AX,DS 19: mov ax, SEG FIRST_DATA 46A8:000A B8A946 MOV AX,46A9 20: mov ax, ss 46A8:000D 8CD0 MOV AX,SS 21: mov ax, SEG FIRST_STACK 46A8:000F B8AB46 MOV AX,46AB 22: mov ax, OFFSET FIRST_GROUP:rcs_id 46A8:0012 B81E00 MOV AX,001E 23: mov ax, OFFSET FIRST_DATA:rcs_id 46A8:0015 B80E00 MOV AX,000E 24: mov ax, 4C00h ; \ exit 46A8:0018 B8004C MOV AX,4C00 25: int 21h ; / 46A8:001B CD21 INT 21 >db 46a8:1e ( <--- FIRST_GROUP:rcs_id) 46A8:0010 - 24 48 $H 46A8:0020 65 61 64 65 72 24 4E 42-30 30 8A 00 00 00 00 00 eader$NB00...... 46A8:0030 00 00 1D 00 00 00 00 00-00 00 09 47 52 4F 55 50 ...........GROUP 46A8:0040 2E 4F 42 4A 01 03 00 72-80 74 01 03 00 72 80 73 .OBJ...r.t...r.s 46A8:0050 0E 05 0E 00 01 00 94 00-06 52 43 53 5F 49 44 09 .........RCS_ID. 46A8:0060 0B 00 00 04 04 4D 41 49-4E 0E 05 00 00 03 00 84 .....MAIN....... 46A8:0070 00 06 46 53 54 41 43 4B-09 67 72 6F 75 70 2E 41 ..FSTACK.group.A 46A8:0080 53 4D 0B 00 0F 00 00 00-10 00 03 00 11 00 05 00 SM.............. 46A8:0090 12 00 08 00 13 00 0A 00-14 00 0D 00 15 00 .............. >db 46a9:e ( <--- FIRST_DATA:rcs_id ) 46A9:0000 - 24 48 $H 46A9:0010 65 61 64 65 72 24 4E 42-30 30 8A 00 00 00 00 00 eader$NB00...... 46A9:0020 00 00 1D 00 00 00 00 00-00 00 09 47 52 4F 55 50 ...........GROUP 46A9:0030 2E 4F 42 4A 01 03 00 72-80 74 01 03 00 72 80 73 .OBJ...r.t...r.s 46A9:0040 0E 05 0E 00 01 00 94 00-06 52 43 53 5F 49 44 09 .........RCS_ID. 46A9:0050 0B 00 00 04 04 4D 41 49-4E 0E 05 00 00 03 00 84 .....MAIN....... 46A9:0060 00 06 46 53 54 41 43 4B-09 67 72 6F 75 70 2E 41 ..FSTACK.group.A 46A9:0070 53 4D 0B 00 0F 00 00 00-10 00 03 00 11 00 05 00 SM.............. 46A9:0080 12 00 08 00 13 00 0A 00-14 00 0D 00 15 00 .............. >t 16: mov ax, cs >s& mixed >t AX=46A8 BX=0000 CX=0000 DX=0000 SP=0100 BP=0000 SI=0000 DI=0000 DS=4698 ES=4698 SS=46AB CS=46A8 IP=0005 NV UP EI PL NZ NA PO NC 17: mov ax, SEG FIRST_TEXT 46A8:0005 B8A846 MOV AX,46A8 >q ============================================================================= So am I doing something wrong with the "GROUP" directive or am I just thinking about it incorrectly? Please respond via email. Thanks. ============================================================================= NAME: James P. Kiely USPS: Kiely Laboratories USENET: ...!harvard!lownlab!kiely P.O. Box 624 DOMAIN: kiely@lownlab.harvard.edu Allston, MA 02134-0624 PHONE: +1 617 782 4136 USA