如果我正在查看的当前地址至少为0xFFFF0,我想留下一个循环。这是我写的代码部分,但显然不起作用:
CMP DS:[BX], FFFF0H
JGE LeaveLoop
我对组装非常陌生,除了简单的数字比较之外,我还没有使用过CMP。
答案 0 :(得分:3)
这听起来像一个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:
...
答案 1 :(得分:2)
{{1}}
注意:如果溢出不计算,则应删除JC LeaveLoop。