2

I'm trying to read the value 1000h which can be found in the address 0000h:044Ch and put it in the ax register by using the mov instruction. Every time I get back another value than the expected 1000h.

This is the instruction I use in TASM:

mov     ax, [word ptr 0000h:044Ch] 

I have checked the vaue in ax in the debugger.

Sep Roland
  • 33,889
  • 7
  • 43
  • 76
Ahmed Crow
  • 101
  • 4

1 Answers1

4

You will have to set one of the segment registers to 0x0000 and then access the word at offset 044ch through that segment register. Something like this should work:

xor ax, ax         ; XOR register with itself same as setting register to 0
mov es, ax         ; ES = 0
mov ax, [es:044ch] ; Get size of text video page of current display mode in bytes
; AX now has the 16-bit WORD value at 0000h:044ch

shr ax, 4          ; Divide by 16 to get size in paragraphs
add ax, 0b800h     ; Add to the base of text video memory segment to get page 1 segment

; Then you can put AX in a segment like ES to access text video memory
mov es, ax         ; ES = segment of page 1 of current text video mode
Michael Petch
  • 46,082
  • 8
  • 107
  • 198