组装检查三个数中最大的一个

问题描述 投票:0回答:2

我现在正在学习汇编,我有一个很大的问题需要解决。 (顺便说一句,我使用 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

那么你能帮我吗?

assembly x86-64 nasm
2个回答
0
投票

所以,我参加了印度教程(就我个人而言非常糟糕)。他们说我们可以比较字符串来代替数字。但是,可以肯定的是,这不能正常工作。

另外,我将完成 <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

0
投票

.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
© www.soinside.com 2019 - 2024. All rights reserved.