[英]How do I use CMP in assembly to test a segment and offset address?
如果我正在查看的當前地址至少為0xFFFF0,我想退出循環。 這是我編寫的代碼部分,但顯然不起作用:
CMP DS:[BX], FFFF0H
JGE LeaveLoop
我對匯編語言很陌生,除了簡單的數字比較之外,還沒有使用CMP。
這聽起來像XY問題,您應該指定最終要實現的目標。
無論如何, FFFF0H
是20位地址,如果限制為16位,則不能直接與之比較。 您可以使用兩個16位寄存器來計算物理地址,並使用它們進行32位比較。
MOV AX, DS
MOV DX, DS
SHL AX, 4
SHR DX, 12 ; DX:AX has segment base now
ADD AX, BX ; add offset
ADC DX, 0 ; DX:AX has full address now
CMP DX, 0Fh ; high word has to be at least F
JB false
JA true ; if it's more we are ok
CMP AX, FFF0h ; low word has to be at least FFF0h
JAE true
false:
...
true:
...
MOV AX, BX
MOV DX, DS
SHR AX, 4 ; doesn't need lowest nibble
ADD AX,DX ; add offset
JC LeaveLoop ; See note!!!
CMP AX, FFFFh
JE LeaveLoop
...
LeaveLoop:
注意:如果溢出不計算在內,則應刪除JC LeaveLoop。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.