Chinaunix首页 | 论坛 | 博客
  • 博客访问: 396660
  • 博文数量: 70
  • 博客积分: 1919
  • 博客等级: 上尉
  • 技术积分: 1179
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-24 20:05
文章分类

全部博文(70)

文章存档

2014年(2)

2013年(29)

2012年(20)

2011年(1)

2010年(13)

2009年(5)

分类: C/C++

2013-10-07 20:32:07

as汇编命令:as [选项] -o objfile srcfile
as 语句一行可以包含用分号分割的多个语句,但通常情况下只包含一条语句
句是可以只包含空格,制表符和换行符的空行,也可以是赋值语句,伪操作语句和机器指令语句。
-a 开启程序列表
-f 快速操作
-o 指定输出的目标文件
-R 组合数据区和代码区
-W 取消警告信息

赋值语句用于给一个符号或标识符赋值,如BOOSEG=0x07c0
伪操作语句是汇编器使用的指示符,它通常不会产生任何代码,它又伪操作码和0个或多个操作数组成。每个操作码都由字符‘.’开始。‘.’字符本身是一个特殊的符号,它表示编译过程中的位置计数器。

点击(此处)折叠或打开

  1. 直接寄存器寻址

  2. mov bx,ax

  3. jmp bx

  4. 间接寄存器寻址

  5. mov [bx],ax

  6. jmp [bx]

  7. 立即数寻址

  8. mov ax,#1234

  9. mov ax,#msg1

  10. 绝对寻址

  11. mov ax,1234

  12. mov ax,msg1

  13. mov ax,[msg1]

  14. 索引寻址

  15. mov ax,msg1[bx]

  16. mov ax,msg1

2 as汇编 命令:

1 .align abs-expr1,abs-expr2,abs-expr3

.algin是汇编对齐命令,用于在当前子区中把位置计数器设置到下一个指令存储边界处,第一个绝对值表达式abs-expr1指定要求的边界对齐值。对于使用a.out格式目标文件的80x86系统,该表达式的计数值表示位置计数器增加后其二进制最右边0的个数,即是2的幂值。

第二个表示用于对齐而填充的字节值,该表示与其前面的逗号可以省略。若省略表示填充字节值是0

第三个表达式abs-expr3用于指定对齐操作允许填充跳过的最大字节数。

2 .ascii "string"...

从位置计数器所指的当前位置为字符串分配空间并存储字符串,可使用逗号分开写出多个字符串。例如

.ascii "Hello world!","my assembler"。该汇编命令会让as把这些字符串汇编在连续的地址位置处,每个字符串后边不会自动添加\0(NULL)字符

3 .asciz "String"...

该汇编命令与.ascii 类似,但每个字符串后边会自动添加\0(NULL)字符 

4 .byte expressions

该汇编命令定义0个或多个用逗号分开的字节值,每个表达式的值时1字节

5 .comm symbol,length

在bss区申明一个命名的公共区域,在ld连接过程中,某个目标文件中的一个公共符号与其他目标文件中的公共符号合并。如果ld没有找到一个符号的定义,而只是一个或多个公共符号,那么ld就会分配指定长度length的未初始化内存。如果找到多个长度不懂但符号相同的公共符号,ld就会分配最大的空间

6 .data subsection

该汇编命令通知as把随后的语句汇编到编号为subsection的data子区中,如果省略编号,默认为0

7 .desc symbol,abs-expr

用绝对表达式的值设置符号symbol的描述字段n_desc的16为值,仅用于a.out格式的目标文件

8 .fill repeat,size,value

该会汇编命令产生数个大小为size字节的重复拷贝

9 .global symbol或 .globl symbol

该命令使得ld连接器可以看得见symbol符号。如果我们目标文件使用了定义符号,那么它的值能被连接过程中的其他目标文件使用

10 .int expression

该汇编命令在某个区设置0个或多个整数值。每个用逗号分开的值就是运行时刻的值,如.int 1234,567,0x89AB

11 .lcomm symbol,length

为符号symbol指定的局部公共区域保留长度为length字节的空间

12 .long expressions

含义与.int相同

13 .octa bignums

这个汇编命令指定0个或多个用逗号隔开的16B大数

(.byte,.word,.long,.quad,.octa分别对应1、2、4、8、16字节数)

14 .org new_lc,fill

这个汇编命令把当前计数器设置为值new_lc,new_lc是一个绝对值。具有相同区作为子区的表达式不能使用.org跨越各区。当位置计数器增长是,所越过的字节将被填入值fill

15 .quad bignums 表示8B大数

16 .short expressions表示0个或多个分开的2字节数 

17 .space size,fill

该汇编命令产生size字节,每个字节值填fill

18 .string "string"

定义一个或多个用逗号分开的字符串

19 .text subsection

定义正文子区,可以省略编号subsection,如果省略默认为0

20 .word expressions

对于32为机器,该命令与short含义相同

阅读(6072) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~