assembly - 尝试在 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
解决方案
推荐阅读
- python - JSON 错误:json.decoder.JSONDecodeError:预期值:第 1 行第 1 列(字符 0)
- javascript - 如何解析多个数组的数组
- python - AttributeError:未知的属性插值
- javascript - 如何使用 Javascript 关注范围滑块?
- javascript - onClick 仅在-element上触发
- java - 如何在使用 javamail 发送电子邮件时安全地使用凭据
- c# - 文件未从 File 或 PhysicalFile IActionResult 下载
- doorkeeper - 将范围限制为某些用户
- python - 在成本函数中包含与预期模型输出的偏差
- c# - 有没有办法阻止我的页面在我导航到它们时只闪烁进出?