我正在尝试通过在线阅读文档和教程来学习一些基本的汇编语言。
我现在编写了我的第一个汇编程序,它将添加两个值(s = x + y),然后将sum设置为退出值。
.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,而不会覆盖其他值?为什么我会出现分段错误?
答案 0 :(得分:1)
您的添加很好,但是您没有正确退出。
; ...
movl %1, %eax ; sys_exit
movl sum, %ebx ; exit code in ebx
int $0x80
; ...
movl %1, %eax ; sys_exit
movl sum, %ebx ; exit code in ebx
int $0x80
这是未经测试的,但我认为它会解决你的问题。