Assembly 无法在程序集中添加两个值
我试图通过在线阅读文档和教程来学习一些基本的汇编语言 现在我已经编写了我的第一个汇编程序,它将添加两个值(s=x+y),然后将总和设置为退出值Assembly 无法在程序集中添加两个值,assembly,add,Assembly,Add,我试图通过在线阅读文档和教程来学习一些基本的汇编语言 现在我已经编写了我的第一个汇编程序,它将添加两个值(s=x+y),然后将总和设置为退出值 .section .data x: .int 40 y: .int 10 sum: .int 0 .section .text .globl _start _start: movl x, %eax ; move 40 to eax addl y, %eax ; add 10 to eax movl %ea
.section .data
x: .int 40
y: .int 10
sum: .int 0
.section .text
.globl _start
_start:
movl x, %eax ; move 40 to eax
addl y, %eax ; add 10 to eax
movl %eax, sum ; move eax to sum
movl $1, sum ; set sum as exit code
int $0x80
我确信我对寄存器的理解有误,因为我在执行程序时遇到了分段错误。是否可以向寄存器添加多个值(如eax),而不覆盖其他值?为什么会出现分段错误?您的添加很好,但您没有正确退出。
这是未经测试的,但我认为它会让你恢复健康。成功了!你能解释为什么退出代码必须在ebx中,而不在任何其他寄存器中吗?问Linus。系统调用号进入
%eax
,第一个参数进入%ebx
,第二个参数进入%ecx
,第三个参数进入`%edx,等等。问他为什么将其更改为64位!!!:)
; ...
movl %1, %eax ; sys_exit
movl sum, %ebx ; exit code in ebx
int $0x80