汇编伪指令解析

伪指令 说明 示例

.section .data

.section .text

.globl _start

_start:

  movl $1, %eax

  movl $4, %ebx

  int $0x80

.section指示把代码划分成若干个段(section),程序被操作系统加载时,每个段被加载到不同的地址,具有不同的读写执行权限。

.data段保存程序的数据是可读写的,C程序的全局变量也属于.data段。上边的程序没定义数据所以.data是空的。

.text段保存代码,是只读和可执行的,后面那些指令都属于这个.text段。

_start是一个符号(Symbol),符号在汇编程序中代表一个地址,可以用在指令中,汇编程序经过汇编器的处理后所有的符号都被替换成它所代表的地址值。

.globl指示告诉汇编器_start这个符号要被链接器用到,所以要在目标文件的符号表中给它特殊标记。_start就像C程序的main函数一样特殊是整个程序的入口,链接器在链接时会查找目标文件中的_start符号代表的地址,把它设置为整个程序的入口地址,所以每个汇编程序都要提供一个_start符号并且用.globl声明。如果一个符号没有用.globl指示声明这个符号就不会被链接器用到。

.ascii "" 插入字符串到目标文件,但不以NULL结束

.ascii "JNZ"  

//插入字节0x4A 0x4E 0x5A

.asciz "" 与.ascii类似,但以NULL结束

.asciz "JNZ"

//插入字节0x4A 0x4E 0x5A 0x00

变量名 equ 数值表达式
变量名 equ <字符串>      

//可以放一句代码!!
变量名 = 数值表达式

变量定义伪指令。
equ命令不允许重复赋值,
但是“=”允许

two equ 2
thirteen =13
calldos equ <int 21h>

mov ah, 2
mov dl, 13
int 21h
//可以如下写
mov ah, two
mov dl, thirteen
calldos

X=13    //合法
X=X+5   //合法
two equal 3

 //不合法,因为已经声明过two了

.balign {alignment} {,fill} {,max}。

第一个参数alignment为一个正整数,以alignment的值的整数倍为结束地址进行对齐,以当前地址为起始地址,进行字节填充,比如当前地址为20,而alignment的值我们设定为16,那么字节填充自20开始,结束于20后第一个16的倍数地址处,即32处。

第二个参数fill即我们选定的,用来填充的数值。balign模式下为1字节,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值