【发布时间】:2020-03-16 03:04:36
【问题描述】:
我的目标是创建一个高/低游戏,让我的计算机在最后两个可能的数字之间进行简单的计算。它问:“我变热了吗?”我需要让它继续运行(我不知道这是否是特定于 nasm 的东西)是知道为什么 cmp 指令不起作用。我已经尝试了几个答案,但它们都不起作用。
我尝试过使用
mov r8w, 'Y'
我也试过了
mov r8w, 59h
两者都与字寄存器r8w 进行比较。我想知道我的代码在哪里跳过了逻辑。这是代码。
.loop:
mov rax, 1
mov rdi, 1
mov rsi, hot_cold
mov rdx, w_len
syscall
mov r9w, 0
mov rax, 0 ; setup for input
mov rbx, 0 ;
mov rdi, 2 ;
mov si, r9w ; collect input
syscall ; init collection
mov r8w, 0 ;
mov r8w, 'Y' ; 59h
cmp r9w, r8w ; compare to Y
jne .hop_no ; compare fail, try N
jmp _for_y ; compare success, change numbers
;syscall
jmp .loop ; loop on successful Y
.hop_no:
mov r8w, 0
mov r8w, 'N' ;4Eh
cmp r8w, r9w ; compare to N
jne _exit ; compare fail, exit
call _for_n ; compare success change numbers
;syscall
jmp .loop
【问题讨论】:
-
@PeterCordes 好的,所以(strace 很棒)EFAULT 正在发生。我说地址不好。我该怎么做才能清除该变量?
-
您可以阅读我在答案中链接的How to read input from STDIN in x86_64 assembly?。
-
如果指令集不能在一条指令中做某事,那就使用两条或更多条指令!