《深入理解计算机系统》笔记 (4) AT&T汇编基本指令

本文详细介绍了AT&T汇编语言的基本概念,包括机器指令与汇编指令的关系,80386寄存器的种类及用途,以及AT&T汇编代码的格式和常见寻址方式。此外,还探讨了数据传送、算术逻辑指令,并举例说明了C、汇编与机器语言之间的转换关系。
摘要由CSDN通过智能技术生成

汇编指令初步

机器指令是CPU能直接识别并执行的指令,它的表现形式是二进制编码,如00001001010101100110010000101011。用机器指令编写出来的程序执行效率高,没有多余的额外操作。但由于机器指令十分复杂,难以记忆,且不方便阅读和修改,容易产生错误,所以设计了汇编指令,通过一些能反映机器指令功能的单词或词组来代表该机器指令,而不再关心机器指令的具体二进制编码。与此同时,汇编指令也把CPU内部的各种资源符号化,使用该符号名也等于引用了该具体的物理资源。

 

寄存器

80386提供以下几种不同类型的32位寄存器

整数寄存器(前 6 个为通用寄存器)

  • EAX:累加器(Accumulate),是算术运算的主要寄存器,也是存放函数返回值的寄存器
  • EBX:基址寄存器(Base),在内存中寻址时存放基址
  • ECX:计数器(Counter)
  • EDX:数据寄存器(Data)
  • ESI:源变址
  • EDI:目标变址
  • ESP:堆栈指针,栈顶
  • EBP:基址指针,栈底

以上通用寄存器的低16位又构成一个16位寄存器,以兼容更短的指令,分别为:AX、BX、CX、DX、SI、DI、SP、BP。而AX、BX、CX、DX又可划分为两个8位的寄存器,分别为AH和AL,BH和BL,CH和CL,DH和DL,它们实际上是相应的16位寄存器的高8位和低8位。当指令改变寄存器中包含的小寄存器时,寄存器的其他字节不会改变,如改变AL的值时,仅会改变AL表示的一个字节,而不会改变另外3个字节。

段寄存器

  • CS:代码段寄存器
  • SS:堆栈段寄存器
  • DS:数据段寄存器
  • ES、FS、GS:附加数据段寄存器

指令指针寄存器和标志寄存器: EIP、EFLAGS,其中指令指针寄存器也叫程序计数器(PC)

系统表寄存器: GDTR、IDTR、LDTR、TR

控制寄存器: CR0、CR1、CR2、CR3、CR4

调试寄存器: DR0、DR1、DR2、DR3、DR4、DR5、DR6、DR7

测试寄存器: TR6、TR7

 

AT&T汇编代码概览

格式:指令 源操作数, 目的操作数

示例:movl  $8, %eax

操作数可分为立即数(immediate)、寄存器(register)操作数存储器(memory)操作数

  • 立即数不必存储于寄存器或存储器中,可以直接出现在指令中,不可作为目的操作数,相当于高级语言中的常量,使用立即数时,需要在立即数前加上$,如$0x1F。另外,还有一种符号常量,也可以直接引用,相当于高级语言中的变量,引用符号常量的地址时需要在符号常量前加上$
  • 寄存器操作数可作为源操作数或目的操作数,引用寄存器操作数时需要在寄存器名称前加上%,如%eax,CPU计算总是仅从寄存器直接存/取数据,也就是说,两个操作数中至少要有一个是寄存器操作数。R[Ea] 用来表示寄存器 Ea 中的内容。
  • 存储器操作数也叫存储器引用,它根据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值