[英]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.