首页 > 解决方案 > 尝试在 x86 汇编中进行乘法运算,使用 rax、rdi、rsi 和 rcx 寄存器

问题描述

我是 x86 程序集的新手。我正在尝试使用 rax、rdi、rsi 和 rcx 寄存器编写一个乘法函数。但是,我注意到它不起作用。对于 2 * 3,如果我将右操作数加 1,则结果会增加 8。首先,2 * 3 产生 26。这里可能与计算错误的字节有关。然而,除此之外,我觉得我在黑暗中。有谁明白我的代码有什么问题?这就是我组装它的方式:gcc -O0 -g -mstackrealign -masm=intel -o test test.asm

    .global _main
    .text
end:
    mov rax, rdi
    ret
plus:
    add rdi, rsi
    jmp end
minus:
    sub rdi, rsi
    jmp end
multiply:
    add rdi, rcx
    sub rsi, 1
    cmp rsi, 0
    je end
    jmp multiply
eq:
    cmp rdi, rsi
    je true
    jmp false
    true:
        mov rax, 1
        ret
    false:
        mov rax, 0
        ret
_main:
    push 2
    push 4
    pop rsi
    pop rdi
    mov rcx, rsi
    call multiply
    push rax
    mov rdi, rax
    mov rax, 0x2000001
    syscall

标签: assemblyx86bytemultiplicationcpu-registers

解决方案


推荐阅读