【发布时间】:2015-09-25 03:34:40
【问题描述】:
试图让它正常工作时遇到了严重的麻烦.. 刚开始 NASM 组装很抱歉,如果这是一个问题,但感谢您的任何帮助!
试图让两个变量渲染相等,以便 cmp 之后的跳转起作用。这让我非常沮丧,因为直接值(如果 mov eax 和 ebx 为 "5" )它可以工作,所以它是地址问题吗?我不确定。
section .data
str_equal db "Equal!", 0xA
len_equal equ $ - str_equal
str_number_a db "5"
str_number_b db "5"
section .text
global _start
_start:
mov eax, [ str_number_a ]
mov ebx, [ str_number_b ]
cmp eax, ebx
je _Equal
jmp _Exit
ret
_Equal:
mov eax, 4 ; syscall - write()
mov ebx, 1 ; stdout
mov ecx, str_equal
mov edx, len_equal
int 0x80 ; Call dat Kernel
jmp _Exit
ret
_Exit:
mov eax, 1
mov ebx, 0
int 0x80
ret
【问题讨论】:
-
这与您的问题没有直接关系,但您应该使用
jmp指令而不是call在线call _Exit。call只是毫无意义地添加到调用堆栈中 -
我最初是这样做的,但由于未知原因无法正常工作,并且通话正常,所以我把它留在那里..
-
您使用的是 32 位还是 64 位系统?每个调用向量都不同