了解Linux汇编语言的基本语法、汇编语言的编写、调试技巧
二、实验内容:- 用给定的hello.s和test.s练习linux汇编语言的汇编、链接、执行、调试过程。
- 采用eax,ebx,ecx,edx四个寄存器存放数据10,20,30,40,编程完成10+20+30+40,结果存放在eax,写出完整的可执行汇编程序代码,并采用gdb调试,查看寄存器结果。
hello.s
#hello.s
.data # 数据段声明
msg : .string "Hello, world!n" # 要输出的字符串
len = . - msg # 字串长度
.text # 代码段声明
.global _start # 指定入口函数
_start: # 在屏幕上显示一个字符串
movl $len, %edx # 参数三:字符串长度
movl $msg, %ecx # 参数二:要显示的字符串
movl $1, %ebx # 参数一:文件描述符(stdout)
movl $4, %eax # 系统调用号(sys_write)
int $0x80 # 调用内核功能
# 退出程序
movl $0,%ebx # 参数一:退出代码
movl $1,%eax # 系统调用号(sys_exit)
int $0x80 # 调用内核功能
test.s
#test.s
.text # 代码段声明
.global _start # 指定入口函数
_start: # 完成5+8
movl $5,%eax #立即数5送入寄存器eax
movl $8,%ecx #立即数8送入寄存器ecx
addl %ecx,%eax #5+8的结果送入寄存器eax
# 退出程序
movl $0,%ebx # 参数一:退出代码
movl $1,%eax # 系统调用号(sys_exit)
int $0x80 # 调用内核功能
源码:
#includeextern int add(int a, int b); extern int add1; extern int add2; int main() { printf("add is %dn", add(add1, add2)); printf("add is %dn", add(40, 30)); return 0; }
.data
.globl add1
.globl add2
add1: .int 10
add2: .int 20
.text
.code32
.globl add
add:
movl 0x8(%esp),%eax
movl 0x4(%esp),%ebx
add %ebx,%eax
ret
调试过程:
四、思考题(必做) 查资料,了解汇编语言的应用场合。汇编语言的特点:
- 面向机器的低级语言,通常是为特定的计算机或系列计算机专门设计的。
- 保持了机器语言的优点,具有直接和简捷的特点。
- 可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。
- 目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。
- 经常与高级语言配合使用,应用十分广泛。
汇编语言的应用:
- 70%以上的系统软件是用汇编语言编写的。
- 某些快速处理、位处理、访问硬件设备等高效程序是用汇编语言编写的。
- 某些高级绘图程序、视频游戏程序是用汇编语言编写的。



