学习NASM大会32位的Ubuntu。
这是给我的头痛:假设我有一个数组(我称之为的节目向量)中.data
:
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
不是一个地址-它只是一个数字,所以我不能用它的支架。 我可能是错的(在这种情况下,这可能是问题的原因)。