伪指令 | 说明 | 示例 |
---|---|---|
.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 数值表达式 //可以放一句代码!! |
变量定义伪指令。 |
two equ 2 mov ah, 2 X=13 //合法 //不合法,因为已经声明过two了 |
.balign {alignment} {,fill} {,max}。 |
第一个参数alignment为一个正整数,以alignment的值的整数倍为结束地址进行对齐,以当前地址为起始地址,进行字节填充,比如当前地址为20,而alignment的值我们设定为16,那么字节填充自20开始,结束于20后第一个16的倍数地址处,即32处。 第二个参数fill即我们选定的,用来填充的数值。balign模式下为1字节, |