.model small
.stack 100h
.data
array db 10,20,30,40
.code
main proc
mov ax,@data
mov ds,ax
mov ax,WORD PTR array ;I'm expecting that after this ax contains ax=2010 (in little endian.)
;But unfortunately it constians some garbage or some other value but al=20 and ah=10
;Can any body tell me that what is that why the whole ax doesn/t conatins the whole 2010 but al ,ah can.
mov ax,4c00h
int 21h
main endp
end main
Quote from: ahsan on November 20, 2010, 09:35:38 PM
.model small
.stack 100h
.data
array db 10,20,30,40
mov ax,WORD PTR array ;I'm expecting that after this ax contains ax=2010 (in little endian.)
;But unfortunately it constians some garbage or some other value but al=20 and ah=10
;Can any body tell me that what is that why the whole ax doesn/t conatins the whole 2010 but al ,ah can.
Why not
array dw 2010
dw 4030
dw ....
mov ax, word ptr array ?
the code you have in the original post should work
how are you examining the results ?
use a debugger like debug or symdeb
step through the instructions with the "T" command
when the next instruction is MOV AX,4C00h, examine the value in AX
There is nothing wrong with the code that I can see. Here is what I get tracing through it in DEBUG:
D:\MASMDOS>debug ahsan.exe
-r
AX=0000 BX=0000 CX=0012 DX=0000 SP=0100 BP=0000 SI=0000 DI=0000
DS=0B7C ES=0B7C SS=0B8E CS=0B8C IP=0000 NV UP EI PL NZ NA PO NC
0B8C:0000 B88C0B MOV AX,0B8C
-t
AX=0B8C BX=0000 CX=0012 DX=0000 SP=0100 BP=0000 SI=0000 DI=0000
DS=0B7C ES=0B7C SS=0B8E CS=0B8C IP=0003 NV UP EI PL NZ NA PO NC
0B8C:0003 8ED8 MOV DS,AX
-t
AX=0B8C BX=0000 CX=0012 DX=0000 SP=0100 BP=0000 SI=0000 DI=0000
DS=0B8C ES=0B7C SS=0B8E CS=0B8C IP=0005 NV UP EI PL NZ NA PO NC
0B8C:0005 A10E00 MOV AX,[000E] DS:000E=140A
-t
AX=140A BX=0000 CX=0012 DX=0000 SP=0100 BP=0000 SI=0000 DI=0000
DS=0B8C ES=0B7C SS=0B8E CS=0B8C IP=0008 NV UP EI PL NZ NA PO NC
0B8C:0008 B8004C MOV AX,4C00
-
by the way,
20 decimal = 14h
and
10 decimal = 0Ah
:bg
Quote from: dedndave on November 21, 2010, 01:36:50 AM
by the way,
20 decimal = 14h
and
10 decimal = 0Ah
:bg
You copied that from my post earlier didnt you Dave :lol
http://www.masm32.com/board/index.php?topic=15388.msg125690#msg125690
yes - i use that specific post as a reference guide
:P
:lol
but why ax contains some other value while the ah and al contains the correct value i'am using the MASM 611
Quote from: ahsan on November 21, 2010, 02:16:51 PM
but why ax contains some other value while the ah and al contains the correct value i'am using the MASM 611
Because the registers are 8-bit (0-255) and 16-bit (0-65535) wide, and not some arbitrary width that holds 0-99 that you seem to want it too.
10 and 20 are TWO distinct numbers, the value in AX = (AH * 256) + AL, or 5130 not some random "other" value
.
2**8 = 256
2**16 = 65536
If you want AX = 2010 then you'll need to combine them AX = (20 * 100) + 10
Finally it's not a MASM thing, it's how the 80x86 works. Computers do not typically handle decimal numbers in base 10.
Perhaps you should review your class notes, or recommended text books, to shed some light on this.