簡體   English   中英

NASM是不一致還是我只是錯過了即時CMP的明顯事實?

[英]Is NASM inconsistent or am I just missing an obvious fact with CMP of immediate?

“警告:簽名的dword立即超出界限”是我現在存在禍害,因為它似乎不一致或者我只是沒有看到明顯的事實。

我聲明了以下結構:

struc   FRTType        
        .class    resq  1   ; Class
        .type     resq  1   ; Type
endstruc 

我有以下分配:

%assign TYPE_SCALAR     0xfffffffffffffff1
%assign INTEGER         0xffffffff1000a8a9

在我的功能中:

cmp     qword [rdi+FRTType.class], TYPE_SCALAR  ; This works fine
jne     .exception
cmp     qword [rdi+FRTType.type], INTEGER       ; THIS PRODUCES WARNING

我知道我可以移動mov rax, INTEGER然后進行比較,但這似乎不需要,因為第一次比較沒有問題。

沒有CMP r/m64,imm64
CMP r/m64,imm32 ,其中imm32符號擴展為64位。 這適用於0xfffffffffffffff1 ,因為0xfffffff1符號擴展為64位是0xfffffffffffffff1 0x1000a8a9符號擴展為64位是0x000000001000a8a9 ,它與您想要比較的值不同。

您可以通過首先將立即加載到寄存器中來克服此問題:

mov rax, INTEGER
cmp     qword [rdi+FRTType.type], rax

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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