看了一个多月的汇编始终都是门外汉,连个输入输出都很困难,今天终于查阅相关资料实现了
,也借此寒假的时间好好学习一下汇编,就用下面这段代码来开始汇编的学习吧,如果有什么错误,还请各路大大见谅,毕竟本人也是菜鸟一个!
#实现从键盘输入字符串 并输出
#如果不清楚系统调用函数参数可以使用man 2 function_name 查看
#如 man 2 read
#参数与寄存器对应关系为从左到右分别为ebx,ecx,edx,...(注此为lz自己发现的规律,不一定正确)
#eax 用于指定系统调用的函数代码
#函数对应的宏代码定义可以在头文件/usr/include/asm/unistd.h中看到
.section .bbs #定义bbs段
.lcomm buffer,30
.section .text
.globl _start
_start:
movl $buffer,%ecx #下面三条语句将sys_read参数分别传入到相应寄存器,$加变量名相当于取地址
movl $30,%edx
movl $0,%ebx
movl $3,%eax #系统调用sys_read函数代码
int $0x80 #使用ox80指定执行系统调用中断代码
movl $1,%ebx
movl $4,%eax #系统调用sys_write
int $0x80
movl $0,%ebx
movl $1,%eax #系统调用sys_exit
运行结果如下: