计算机系统基础:实验9
第一段代码:
代码文件:
wget http://121.43.169.106:5244/p/Halo/shiyan9-1.s?sign=Qu271cgz48UJ5x7na1H-CodadHV30WHI8b1LAar6-IY=:0 -O shiyan9-1.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 # 调用内核功能
第二段代码:
代码文件:
wget http://121.43.169.106:5244/p/Halo/shiyan9-2.s?sign=wqSExRdY6vIzgzvbGf7H5w5K5we42EE83n5sIGTZKlQ=:0 -O shiyan9-2.s
源码:
.text # 代码段声明
.global _start # 指定入口函数
_start: # 在屏幕上显示一个字符串
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 # 调用内核功能
第三段代码:
代码文件:
wget http://121.43.169.106:5244/p/Halo/shiyan9-3.s?sign=g1h8M9Z15GPYiHztCFEBA7QIfHTCR_xUonpP5ek08Ww=:0 -O shiyan9-3.s
源码:
.text # 代码段声明
.global _start # 指定入口函数
_start: # 入口
movl $10, %eax # 将立即数 10 送入寄存器 eax
movl $20, %ebx # 将立即数 20 送入寄存器 ebx
movl $30, %ecx # 将立即数 30 送入寄存器 ecx
movl $40, %edx # 将立即数 40 送入寄存器 edx
addl %ebx, %eax # 将 ebx 的值加到 eax
addl %ecx, %eax # 将 ecx 的值加到 eax
addl %edx, %eax # 将 edx 的值加到 eax
# 退出程序
movl $0, %ebx # 参数一:退出代码
movl $1, %eax # 系统调用号(sys_exit)
int $0x80 # 调用内核功能
代码使用:
先使用as指令对汇编代码进行编译,编译成.o文件
as -gstabs -o 目标文件名.o 源文件名.s
再使用ld指令对.o文件完成链接,生成可执行文件
ld -o 目标文件名 源文件名.o
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 FwillraWebSite
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果
Steam卡片