我现在正在学习汇编,我有一个很大的问题需要解决。 (顺便说一句,我使用 x86_64 nasm 程序集)
到目前为止,我已经做到了
section .bss
result: resb 10
section .data
num1: db '22'
num2: db '33'
num3: db '44'
section .text
global _start
_start:
mov cl, [num1]
cmp cl, [num2]
jg _check_third_num
mov cl, [num2]
_check_third_num:
cmp cl, [num3]
jg _exit
mov cl, [num3]
_exit:
mov [result], rcx
mov rax, 1
mov rdi, 1
mov rsi, result
mov rdx, 10
syscall
mov rax, 60
mov rdi, 0
syscall
我猜它按我的预期工作,但输出不正确。
所以,我基本上是这样编译的
$ nasm -f elf64 hello.asm -o hello.o
$ ld -o hello hello.o
$ ./hello
我得到这个输出
4
,而不是我希望的44
。
那么你能帮我吗?
所以,我参加了印度教程(就我个人而言非常糟糕)。他们说我们可以比较字符串来代替数字。但是,可以肯定的是,这不能正常工作。
另外,我将完成 <10 numbers. For >10 个号码的工作,我想我很快就会完成。
section .bss
result: resb 2
section .data
num1: db 9
num2: db 8
num3: db 7
section .text
global _start
_start:
mov cl, [num1]
cmp cl, [num2]
jg _check_third_num
mov cl, [num2]
_check_third_num:
cmp cl, [num3]
jg _exit
mov cl, [num3]
_exit:
add rcx, '0'
mov [result], rcx
mov rax, 1
mov rdi, 1
mov rsi, result
mov rdx, 2
syscall
mov rax, 60
mov rdi, 0
syscall
.bss 节 结果:resb 10 .data 节 num1: 数据库'22' num2: 数据库'33' num3:db'44'
节.text 全局_start _开始: mov cl, [num1] cmp cl,[编号2] jg _check_third_num mov cl,[num2]
_check_third_num: cmp cl,[num3] jg_退出 mov cl,[num3] _出口: mov [结果], rcx 移动拉克斯, 1 莫夫RDI,1 mov rsi, 结果 移动rdx,10
syscall
mov rax, 60
mov rdi, 0
syscall