Assembly 无法在程序集中添加两个值

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

我试图通过在线阅读文档和教程来学习一些基本的汇编语言

现在我已经编写了我的第一个汇编程序,它将添加两个值(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 %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