[英]How to deny or invert the memory address
我正在執行一些任務,並且需要解決以下問題:我需要加載一個降序表,該表以值0000開始,以ffff結尾,例如:
Addres value
0000 ffff
0001 fffe
0002 fffd
.... ....
.... ....
ffff 0000
我的代碼:
mov ax,0000
mov bx,0000
not bx
mov ax,bx ; this is line 41
inc ax
dec bx
cmp ax,ffff
jne 41
int 3
直接,此代碼不起作用,什么也不做。 我沒有匯編方面的豐富知識,也無法檢測到錯誤。
連續地址存儲一個字節,該字節可以保存0到255之間的值 。 對於要存儲的從0到FFFFh的值,您將需要131072字節(65536 * 2)。 在16位模式(實地址模式)下,一個內存段可以有65536個字節,這使您的任務有些復雜!
cld
xor di, di ; Address 0000h
mov ax, FFFFh ; Value
More:
stosw
dec ax
js More
這將在偏移地址0、2、4、6,...,65534上存儲32768個降序字值。
此時,您必須通過將2048加上ES
段寄存器來更改它。
然后繼續下一個代碼:
; DI=0 AX=7FFFh
More_:
stosw
dec ax
jnz More_
但是,可以使用字節解決方案:
mov bx, 0
mov al, 255
Next:
mov [bx], al
inc bx
dec al
jnz Next
; 0000 FF
; 0001 FE
; 0002 FD
;
; 00FE 01
; 00FF 00
使用1個寄存器的字節解決方案:
xor bx, bx
ext:
mov [bx], bl
not byte ptr [bx]
inc bx
test bl, bl
jnz Next
; 0000 FF
; 0001 FE
; 0002 FD
;
; 00FE 01
; 00FF 00
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.