在ASM AT&T中,字符串打印时需要使用系统调用,常见的是使用int 0x80调用。要打印输入的字符串,应该先将字符串指针保存到eax寄存器中,然后在ebx寄存器中设置系统调用号为4(sys_write),ecx寄存器为1(标准输出),edx寄存器为字符串的长度。最后通过int 0x80进行调用。
下面是一个示例代码:
.section .data
inputString:
.string "Hello World"
inputStringLength = . - inputString
.section .text
.globl _start
_start:
movl $inputString, %eax # 把字符串指针保存在eax寄存器中
movl $4, %ebx # 系统调用号4表示sys_write
movl $1, %ecx # 标准输出的文件描述符为1
movl $inputStringLength, %edx # 把字符串的长度保存在edx寄存器中
int $0x80 # 调用系统调用
movl $1, %eax # 退出程序的系统调用号为1
xorl %ebx, %ebx # 退出状态码为0
int $0x80 # 调用系统调用