为什么我在NASM大会不工作寄存器不断比较?(Why is my register-constant

2019-11-02 11:52发布

学习NASM大会32位的Ubuntu。

这是给我的头痛:假设我有一个数组(我称之为的节目向量)中.data

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

而且我也有一些0

index  db 0

我想存储sizeEBX ,然后存储indexECX ,最后检查是否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不是一个地址-它只是一个数字,所以我不能用它的支架。 我可能是错的(在这种情况下,这可能是问题的原因)。

Answer 1:

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

mov  ecx, [index] 

index被定义为db ,所以该指令将移动到ecx此0和3从多个字节msg1

采用:

index dd 0


文章来源: Why is my register-constant comparison not working in NASM Assembly?