第一段代码:

代码文件:

shiyan9-1.s

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            # 调用内核功能

第二段代码:

代码文件:

shiyan9-2.s

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      # 调用内核功能

第三段代码:

代码文件:

shiyan9-3.s

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