繁体   English   中英

为什么我的寄存器常数比较在NASM Assembly中不起作用?

[英]Why is my register-constant comparison not working in NASM Assembly?

在32位Ubuntu中学习NASM汇编。

这让我头疼:假设我在.data有一个数组(我在程序中称其为vector):

vector db  1,2,3,4
size   equ $-vector

而且我还有一个数字0

index  db 0

我想将size存储在EBX ,然后将index存储在ECX ,最后检查是否ECX < EBX 在此示例中,它将为0 < 4 我的程序根本不这样做:

SECTION .data
    vector  db  1,2,3,4
    size    equ $-vector

    index   db  0

    ; Vocabulary
    msg1    db  "ECX < EBX",10
    msg1len equ $-msg1
    msg2    db  "ECX >= EBX",10
    msg2len equ $-msg2

SECTION .text
global main
main:
; -----------------------------------------------
; MAIN
; -----------------------------------------------
    mov EBX,size     ; EBX = 4
    mov ECX,[index]  ; ECX = 0
    call    check    ; Check ECX < EBX (0 < 4)

; -----------------------------------------------
; EXIT
; -----------------------------------------------
mov EAX,1
int 0x80

; -----------------------------------------------
; Check
; Checks whether ECX < EBX
; -----------------------------------------------
check:
cmp ECX,EBX
jge greater_or_equal

mov EAX,4
mov EBX,0
mov ECX,msg1
mov EDX,msg1len
int 0x80
jmp end_check

greater_or_equal:

mov EAX,4
mov EBX,0
mov ECX,msg2
mov EDX,msg2len
int 0x80

end_check:

ret

它输出:

ECX> = EBX

但这是不对的。 ECX应该为0, EBX应该为4。

我没有看到问题-但我有一个观察:

mov EBX,size

这行让我很烦-我想这样做:

mov EBX,[size]

但是我会遇到细分错误。 我不知道会发生这种情况,但是我猜是因为size不是地址-只是数字,所以我不能在上面加上括号。 我可能是错的(在这种情况下,这可能是问题的原因)。

index   db  0
msg1    db  "ECX < EBX",10

mov  ecx, [index] 

index定义为db ,因此指令将从msg1 0和3个字节移至ecx

采用:

index dd 0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM