bilsch01
2019-12-26 09:44:16 UTC
The code below writes 5 words to memory at 0x37000. I verified the words
are there using code not shown (for simplicity), but it's easy to see
that the words should be there. After that the 2 lines:
mov si,3
mov ax,word[fs:si]
should put dd66 in ax register but instead it puts a byte from each of 2
other words in ax, specifically 77bb. The routine at the end prints the
result 77BB when it should print DD66.
I have a situation where I really need something like this to work. How
can I do it? TIA. Bill S.
bits 16
org 0x0000
SECTION .data
fat5 dw 0xaa99,0xbb88,0xcc77,0xdd66,0xee55,0xff44
SECTION .text
push 0
pop ss
mov sp,0x7aff
push 0x1000
pop ds
push 0xb800
pop es
; write 5 words to mem at 0x37000
push 0x3700
pop fs
mov di,0
mov si,fat5
mov cx,5
fatlu: mov ax,word[ds:si]
mov word[fs:di],ax
add si,2
add di,2
loop fatlu
; here's the test
mov si,3
mov ax,word[fs:si]
push ax
jmp vuhex ;prints 77BB
;should be DD66
; prints 4 hex digits from stack
vuhex: pop ax ;4 hex digits
mov di,3832 ;l.r. corner
mov cx,4 ;;# of hex digits
vh01: rol ax,4 ;hi digit on right
push ax ;push rol'd ax
and al,0x0f ;;masks right digit
add al,'0' ;0 thru 9
cmp al,'9'
jbe vh02
add al,0x7 ;A thru F
vh02: mov byte[es:di],al
inc di
mov byte[es:di],0x0f ;blk/wht
inc di
pop ax ;pop rol'd ax
loop vh01
jmp $
are there using code not shown (for simplicity), but it's easy to see
that the words should be there. After that the 2 lines:
mov si,3
mov ax,word[fs:si]
should put dd66 in ax register but instead it puts a byte from each of 2
other words in ax, specifically 77bb. The routine at the end prints the
result 77BB when it should print DD66.
I have a situation where I really need something like this to work. How
can I do it? TIA. Bill S.
bits 16
org 0x0000
SECTION .data
fat5 dw 0xaa99,0xbb88,0xcc77,0xdd66,0xee55,0xff44
SECTION .text
push 0
pop ss
mov sp,0x7aff
push 0x1000
pop ds
push 0xb800
pop es
; write 5 words to mem at 0x37000
push 0x3700
pop fs
mov di,0
mov si,fat5
mov cx,5
fatlu: mov ax,word[ds:si]
mov word[fs:di],ax
add si,2
add di,2
loop fatlu
; here's the test
mov si,3
mov ax,word[fs:si]
push ax
jmp vuhex ;prints 77BB
;should be DD66
; prints 4 hex digits from stack
vuhex: pop ax ;4 hex digits
mov di,3832 ;l.r. corner
mov cx,4 ;;# of hex digits
vh01: rol ax,4 ;hi digit on right
push ax ;push rol'd ax
and al,0x0f ;;masks right digit
add al,'0' ;0 thru 9
cmp al,'9'
jbe vh02
add al,0x7 ;A thru F
vh02: mov byte[es:di],al
inc di
mov byte[es:di],0x0f ;blk/wht
inc di
pop ax ;pop rol'd ax
loop vh01
jmp $