Linux 如何将用户输入与常量1、2(如组装中的开关盒(NASM))进行比较?
在下面的问题中,我看到了如何在用户输入和程序员指定的某些选项之间进行比较。 但就我而言,这是行不通的。 这是我代码的和平Linux 如何将用户输入与常量1、2(如组装中的开关盒(NASM))进行比较?,linux,assembly,x86,nasm,Linux,Assembly,X86,Nasm,在下面的问题中,我看到了如何在用户输入和程序员指定的某些选项之间进行比较。 但就我而言,这是行不通的。 这是我代码的和平 section .data msgTes db 'NEW ELEMENT' msgTes_len equ $-msgTes section .bss opt resb 2 . . . new_element: ; option one is a new element push ebp mov e
section .data
msgTes db 'NEW ELEMENT'
msgTes_len equ $-msgTes
section .bss
opt resb 2
.
.
.
new_element: ; option one is a new element
push ebp
mov ebp, esp
mov eax, 4
mov ebx, 1
mov ecx, msgTes
mov edx, msgTes_len
int 80h
pop ebp
ret
read_option:
push ebp
mov ebp, esp
mov eax, 3 ; reading the option
mov ebx, 0
mov ecx, opt
mov edx, 2
int 80h
mov ah, [opt] ; which option the user entered?
sub ah, '0'
cmp ah, 1
je new_element
pop ebp
ret
菜单上有选项,但与问题无关。
为什么不打印“新元素”消息?对以
ret
结尾的内容执行je
通常不是一个好主意。除此之外,打印出您在opt
上得到的内容,或者使用调试器在mov-ah、[opt]
上设置断点,这样您就知道您实际上在与什么进行比较。好的,但是如何在je之后返回下一条指令?我使用的是call,但在这种情况下,我无法为程序做出决定……如果要执行调用
,如果设置了零标志,则可以使用类似jnz skip/call foo/skip:
的构造。我看不到菜单输入的提示。您如何知道它执行了代码的read\u选项
部分?进入点在哪里?潜伏者,读取选项被执行!迈克尔是对的!由于新元素中的ret指令,出现分段错误!我必须在新的_元素中设置一条jmp指令,以返回程序的正常流,并为jmp设置标签。。。这就是解决办法!谢谢大家的关注!