簡體   English   中英

如何在裝配中使用CMP測試段和偏移地址?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM