2022年AT&T汇编语言语法[归 .pdf

上传人:Che****ry 文档编号:27253337 上传时间:2022-07-23 格式:PDF 页数:3 大小:57.35KB
返回 下载 相关 举报
2022年AT&T汇编语言语法[归 .pdf_第1页
第1页 / 共3页
2022年AT&T汇编语言语法[归 .pdf_第2页
第2页 / 共3页
点击查看更多>>
资源描述

《2022年AT&T汇编语言语法[归 .pdf》由会员分享,可在线阅读,更多相关《2022年AT&T汇编语言语法[归 .pdf(3页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、AT&T汇编语言语法1.Register Reference引用寄存器要在寄存器号前加百分号%, 如“movl %eax, %ebx”。 80386 有如下寄存器:1 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 。它们事实上是寄存器

2、 %ax ,%bx ,%cx ,%dx 的高 8 位和低 8 位; ) 2 6 个段寄存器: %cs(code),%ds(data),%ss(stack), %es,%fs ,%gs ;3 3 个控制寄存器: %cr0 ,%cr2 ,%cr3 ;4 6 个 debug 寄存器: %db0 ,%db1 ,%db2 ,%db3 ,%db6 ,%db7 ;5 2 个测试寄存器: %tr6 ,%tr7 ;6 8 个浮点寄存器栈: %st(0),%st(1),%st(2),%st(3),%st(4),%st(5),%st(6),%st(7)。2. Operator Sequence 操作数排列是从源(左

3、)到目的(右),如“movl %eax( 源), %ebx(目的) ”3. Immediately Operator使用立即数,要在数前面加符号$, 如“movl $0 x04, %ebx ”或者:para = 0 x04 movl $para, %ebx 指令执行的结果是将立即数0 x04 装入寄存器 ebx 。4. Symbol Constant符号常数直接引用如value: .long 0 x12a3f2de movl value , %ebx 指令执行的结果是将常数0 x12a3f2de 装入寄存器 ebx 。引用符号地址在符号前加符号$, 如“movl $value, % ebx”

4、则是将符号 value 的地址装入寄存器ebx 。5. Length of Operator操作数的长度用加在指令后的符号表示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” 等同于

5、指令 “movl $4, %ebx ” ,“push %al” 等同于 “pushb %al”。对于没有指定操作数长度,但编译器又无法猜测的指令,编译器将会报错,比如指令“push $4” 。6. Sign and Zero Extension绝大多数面向 80386 的 AT&T 汇编指令与 Intel 格式的汇编指令都是相同的,但符号扩展指令和零扩展指令有不同格式。符号扩展指令和零扩展指令需要指定源操作数长度和目的操作数长度,即使在某些指令中这些操作数是隐含的。在 AT&T 语法中,符号扩展和零扩展指令的格式为,基本部分movs和movz (对应 Intel 语法的 movsx 和 mov

6、zx ),后面跟上源操作数长度和目名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 3 页 - - - - - - - - - 的操作数长度。 movsbl 意味着 movs (from )byte (to )long ;movbw 意味着 movs (from )byte (to)word ;movswl意味着 movs (from )word (to )long 。对于 movz 指令也一样。比如指令 “movsbl %al,%edx” 意味着将 al 寄存器的内容进行

7、符号扩展后放置到edx 寄存器中。其它的 Intel 格式的符号扩展指令还有:cbw - sign-extend byte in %al to word in %ax;cwde - sign-extend word in %ax to long in %eax;cwd - sign-extend word in %ax to long in %dx:%ax;cdq - sign-extend dword in %eax to quad in %edx:%eax;对应的 AT&T 语法的指令为cbtw ,cwtl ,cwtd ,cltd 。7. Call and Jump段内调用和跳转指令为 c

8、all ,ret 和jmp ,段间调用和跳转指令为 lcall ,lret 和ljmp 。段间调用和跳转指令的格式为“lcall/ljmp $SECTION, $OFFSET”,而段间返回指令则为 “lret $STAC K- ADJUST ”。8. Prefix操作码前缀被用在下列的情况:1 字符串重复操作指令 (rep,repne);2 指定被操作的段 (cs,ds,ss,es,fs,gs);3 进行总线加锁 (lock) ;4 指定地址和操作的大小 (data16,addr16);在 AT&T 汇编语法中,操作码前缀通常被单独放在一行,后面不跟任何操作数。例如,对于重复scas 指令,其

9、写法为:repne scas 上述操作码前缀的意义和用法如下:1 指定被操作的段前缀为cs,ds,ss,es,fs,和 gs 。在 AT&T 语法中,只需要按照section:memory-operand 的格式就指定了相应的段前缀。比如:lcall %cs:realmode_swtch 2 操作数地址大小前缀是“data16 ”和addr16,它们被用来在32-bit 操作数地址代码中指定16-bit 的操作数地址。3 总线加锁前缀 “lock ”,它是为了在多处理器环境中,保证在当前指令执行期间禁止一切中断。这个前缀仅仅对ADD, ADC, AND, BTC, BTR, BTS, CMPX

10、CHG,DEC, INC, NEG, NOT, OR, SBB, SUB, XOR, XADD,XCHG 指令有效,如果将Lock 前缀用在其它指令之前,将会引起异常。4 字符串重复操作前缀 rep,repe,repne用来让字符串操作重复 “%ecx” 次。9. Memory ReferenceIntel 语法的间接内存引用的格式为:section:base+index*scale+displacement 而在 AT&T 语法中对应的形式为:section:displacement(base,index,scale) 其中, base 和 index 是任意的 32-bit base 和

11、index 寄存器。 scale 可以取值 1 ,2 ,4,8 。如果不指定 scale 值,则默认值为 1。section 可以指定任意的段寄存器作为段前缀,默认的段寄存器在不同的情况下不一样。如果在指令中指定了默认的段前缀,则编译器在目标代码中不会产生此段前缀代码。下面是一些例子:-4(%ebp):base=%ebp,displacement=-4,section 没有指定, 由于 base %ebp ,所以默认的 section=%ss,index,scale 没有指定,则 index 为0。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - -

12、 - - - - 名师精心整理 - - - - - - - 第 2 页,共 3 页 - - - - - - - - - foo(,%eax,4):index=%eax,scale=4 ,displacement=foo。其它域没有指定。这里默认的section=%ds。foo(,1):这个表达式引用的是指针foo 指向的地址所存放的值。注意这个表达式中没有base 和 index ,并且只有一个逗号,这是一种异常语法,但却合法。%gs:foo:这个表达式引用的是放置于%gs 段里变量 foo 的值。如果 call 和 jump 操作在操作数前指定前缀 “*” ,则表示是一个绝对地址调用/跳转,也就是说jmp/call 指令指定的是一个绝对地址。如果没有指定* ,则操作数是一个相对地址。任何指令如果其操作数是一个内存操作,则指令必须指定它的操作尺寸(byte,word,long),也就是说必须带有指令后缀(b,w,l)。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 3 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁