The MASM Forum Archive 2004 to 2012

General Forums => The Campus => Topic started by: korte on June 26, 2008, 12:26:40 PM

Title: assume esi:struct
Post by: korte on June 26, 2008, 12:26:40 PM

MSDOS using 16 bit segment

x_code segment para public 'CODE' use16


HANDLE struct

HANDLE ends

 assume esi: HANDLE  ERROR: A2158 type is wrong size for register


if using 32 bit register (use32 in segment definiation)

assume OK, but program halt.

how to use Assume struct 32 bit register 16 bit segment?



Title: Re: assume esi:struct
Post by: jj2007 on June 26, 2008, 01:14:21 PM
Quote from: korte on June 26, 2008, 12:26:40 PM

MSDOS using 16 bit segment

x_code segment para public 'CODE' use16


HANDLE struct

HANDLE ends

 assume esi: HANDLE  ERROR: A2158 type is wrong size for register


if using 32 bit register (use32 in segment definiation)

assume OK, but program halt.

how to use Assume struct 32 bit register 16 bit segment?


Try another syntax:
      mov eax, [esi.HANDLE.whateveritem]
Title: Re: assume esi:struct
Post by: sinsi on June 26, 2008, 11:03:45 PM
Try using ASSUME ESI:PTR HANDLE
Title: Re: assume esi:struct
Post by: korte on June 27, 2008, 09:03:31 AM
 assume esi: ptr HANDLE

work, but only 32 bit segment (use32 in segment def)

my problem, if deining segment 32 bit (use32) not run in std MS DOS.
He would be good though.

using flatreal mode (4 GB memory)
all pointer 32 bit.
unnecessary all instructions the 32 bit prefix (66h)

how running 32 bit code(no prefix) which can be solved in MS-DOS

What kind of flag identifies it as the processor the 32/16 mode?





Title: Re: assume esi:struct
Post by: donkey on July 09, 2008, 04:08:20 PM
doesn't assume work with non-extended registers i.e. ASSUME SI:HANDLE, I don't have MASM on my dev PC so I can't check this but I would imagine that since you can use it for segment registers you should be able to use the low order word of an extended data register..
Title: Re: assume esi:struct
Post by: sinsi on July 11, 2008, 09:46:36 AM
This seems to work

handle struc
x dd ?
handle ends
...
mov eax,(handle ptr [esi]).x


Title: Re: assume esi:struct
Post by: jj2007 on July 11, 2008, 09:58:16 AM
Quote from: sinsi on July 11, 2008, 09:46:36 AM
This seems to work

handle struc
x dd ?
handle ends
...
mov eax,(handle ptr [esi]).x


Did you test that in 16-bit code, Sinsi? If yes, would mov eax, [esi.handle.x] work, too?
Title: Re: assume esi:struct
Post by: sinsi on July 11, 2008, 10:16:34 AM
Quote from: jj2007 on July 11, 2008, 09:58:16 AM
Did you test that in 16-bit code, Sinsi? If yes, would mov eax, [esi.handle.x] work, too?
Sure did, they both assemble to "mov eax,[esi]". Well done my man  :clap:
Taught me something new  :bg

mov eax, [esi.handle.x]
AX=0000  BX=0000  CX=000F  DX=0000  SP=FFFE  BP=0000  SI=0000  DI=0000
DS=186D  ES=186D  SS=187D  CS=187D  IP=0003   NV UP EI PL ZR NA PE NC
187D:0003 67668B06      MOV     EAX,[ESI]              DS:0000=9FFF20CD
-
mov eax,(handle ptr [esi]).x
AX=20CD  BX=0000  CX=000F  DX=0000  SP=FFFE  BP=0000  SI=0000  DI=0000
DS=186D  ES=186D  SS=187D  CS=187D  IP=0007   NV UP EI PL ZR NA PE NC
187D:0007 67668B06      MOV     EAX,[ESI]              DS:0000=9FFF20CD


Of course, if ESI>FFFF it faults.
Title: Re: assume esi:struct
Post by: jj2007 on July 11, 2008, 01:10:44 PM
Quote from: sinsi on July 11, 2008, 10:16:34 AM
Sure did, they both assemble to "mov eax,[esi]". Well done my man  :clap:
Taught me something new  :bg
My pleasure :bg