电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

ATamp;T汇编与GCC内嵌汇编语法

ATamp;T汇编与GCC内嵌汇编语法_第1页
1/31
ATamp;T汇编与GCC内嵌汇编语法_第2页
2/31
ATamp;T汇编与GCC内嵌汇编语法_第3页
3/31
1.寄存器引用 引用寄存器要在寄存器号前加百分号%,如“movl %eax, %ebx”。 80386 有如下寄存器: 8 个 32-bit 寄存器 %eax ,%ebx ,%ecx ,%edx ,%edi,%esi,%ebp,%esp; 8 个 16-bit 寄存器,它们事实上是上面 8 个 32-bit 寄存器的低 16位:%ax ,%bx ,%cx ,%dx ,%di,%si,%bp,%sp; 8 个 8-bit 寄存器:%ah,%al,%bh,%bl,%ch,%cl,%dh,%dl。它们事实上是寄存器%ax ,%bx ,%cx ,%dx 的高 8 位和低 8 位; 6 个段寄存器:%cs(code),%ds(data),%ss(stack), %es,%fs,%gs; 3 个控制寄存器:%cr0,%cr2,%cr3; 6 个 debu g 寄存器:%db0,%db1,%db2,%db3,%db6,%db7; 2 个测试寄存器:%tr6,%tr7; 8 个浮点寄存器栈:%st(0),%st(1),%st(2),%st(3),%st(4),%st(5),%st(6),%st(7)。 2. 操作数顺序 操作数排列是从源(左)到目的(右),如“mov l %eax (源), %ebx (目的)” 3. 立即数 使用立即数,要在数前面加符号$, 如“movl $0x04, %ebx” 或者: para = 0x 04 mov l $para, %ebx 指令执行的结果是将立即数 04h 装入寄存器ebx 。 4. 符号常数 符号常数直接引用如 v alu e: .long 0x 12a3f2de mov l v alu e , %ebx 指令执行的结果是将常数 0x 12a3f2de 装入寄存器ebx 。 引用符号地址在符号前加符号$, 如“movl $value, % ebx”则是将符号v alu e 的地址装入寄存器ebx 。 5. 操作数的长度 操作数的长度用加在指令后的符号表示b(byte, 8-bit), w(word, 16-bits), l(long, 32-bits),如“movb %al, %bl”,“movw %ax, %bx”,“movl %eax, %ebx ”。 如果没有指定操作数长度的话,编译器将按照目标操作数的长度来设置。比如指令“mov %ax, %bx”,由于目标操作数bx 的长度为 word,那么编译器将把此指令等同于“movw %ax, %bx”。同样道理,指令“mov $4, %ebx”等同于指令“movl $4, %ebx”,“push %al”等同于“pushb %al”。对于没有指定操作数长度,但编译器又无法猜测的指令,编译器将会报错,比如指令“push $4”。 6. 符号扩展和零扩展指令 绝大多数面向 80386 的AT&T 汇编指令与 Intel 格式的汇编指令都是相同的,符号扩展指令和零扩展指令则是仅有的不同格式指令。 符号扩展指令和零扩展指令需要指定源操作数长度和目的操作数长度,即使在某些...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

ATamp;T汇编与GCC内嵌汇编语法

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部