【x86汇编】第一章:预备知识

机器语言

  • 机器指令是指挥计算机完成某个基本操作的命令
  • 机器指令的一般形式为:操作码 + 地址码
  • 操作码和地址码均是由 0 和 1 组成的二进制代码
  • 操作码指出了操作的种类, 如加、减、传送、移位等
  • 地址码指出了参与运算的操作数和运算结果存放的位置

一个简单的机器语言程序

将偏移地址为 1000H 的字存储单元中的内容加 3000H , 再送回到原存储单元中去
  1 0 0 0 0 0 0 1  
  0 0 0 0 0 1 1 0  
  0 0 0 0 0 0 0 0  
  0 0 0 1 0 0 0 0  
  0 0 0 0 0 0 0 0  
  0 0 1 1 0 0 0 0

每台计算机都有一些基本指令,这些指令的集合即为该计算机的指令系统,也称为机器语言,用机器语言编写的程序称为机器语言程序

汇编语言

  • 机器语言是二进制的,编写、调试、阅读、维护都很困难,所以出现了汇编语言
  • 汇编语言用助记符表示机器指令的操作码,用变量代替操作数的存放地址,在指令前冠以标号,用来代表该指令的存放地址等
  • 这种用符号书写的、其主要操作与机器指令基本上一一对应的、并遵循一定语法规则的计算机语言就是汇编语言
  • 用汇编语言编写的程序称为汇编源程序
  • 指令助记符、语句标号、数据变量、伪指令及它们的使用规则构成了整个汇编语言的内容

将刚才的例子改用汇编语言写

操作码:加操作数类型目的操作数源操作数
ADDWORD PTRDS:[1000H]3000H

汇编程序

  • 汇编源程序经过翻译转换,生成的机器语言程序称为目标程序
  • 把汇编源程序翻译成目标程序的语言加工程序称为汇编程序
  • 汇编程序进行翻译的过程叫做汇编

伪指令

  • 为了能让汇编程序准确地完成翻译工作,就要求汇编源代码中有一套命令去告诉汇编程序如何进行汇编工作
  • 这种命令称伪指令(或称汇编控制命令)

宏汇编程序

  • 为了简化程序的编写, 提高编程效率, 现代的计算机系统一般都提供了宏汇编程序
  • 它允许程序员用一个名字(宏指令名)来代替程序中重复出现的一组语句, 然后在源程序中所需要的地方使用宏指令名字及不同的参数进行宏调用

80X86微处理器结构

总线接口部件

CPU与外界(外设、存储器等)打交道的接口,能接受所有的总线操作请求,利用本身的资源为这些请求服务

执行部件

  • 执行机器指令,负责从译码指令队列中取出指令并执行
  • 执行部件主要由寄存器组、标志寄存器、算逻部件、控制部件等组成

寄存器组

  • 寄存器组中含有8个32位的寄存器, 这些寄存器属于CPU内的存储器, 也称通用寄存器
  • 按其用途可将它们分成两组:数据寄存器组指示器变址寄存器组
数据寄存器组
  • 主要用来保存操作数、运算结果或作指示器、变址寄存器等
寄存器名累加器基址寄存器计数寄存器数据寄存器
32位EAXEBXECXEDX
16位AXBXCXDX
8位AH,ALBH,BLCH,CLDH,DL
指示器变址寄存器组
寄存器名堆栈指示器堆栈基址寄存器源变址寄址器目的变址寄存器
32位ESPEBPESIEDI
16位SPBPSIDI
  • ESP : 当前堆栈段中栈顶的偏移地址
  • EBP : 对堆栈操作的基址寄存器,存放的是该段中某一存储单元的偏移地址
  • ESI/EDI : 源操作数和目的操作数的偏移地址

指令预取部件、译码部件

  • 预取部件把将要执行的指令从主存中取出, 送入预取指令队列中
  • 译码部件从预取指令队列中读出指令并译码, 再送入译码指令队列排队供执行部件使用

指令指示器EIP

  • 保存着下一条将要被CPU执行的指令,相对于代码段的偏移地址
  • IP/EIP的内容由微处理器硬件自动设置, 不能供程序直接访问,

分段部件、分页部件

  • 帮助实现虚拟地址空间到物理地址空间的映射
  • 分段部件用于将各段二维的逻辑地址转换为一维的线性地址, 从而完成从虚拟空间到线性空间的转换
  • 分页部件则主要用于物理存储器的管理
  • 分段部件有6个16位的段寄存器
代码段寄存器堆栈段寄存器数据段寄存器附加数据段寄存器
CSSSDSES FS GS

三种工作方式

实地址方式、保护方式、虚拟8086方式

主储存器

  • 用来存放程序和数据
  • 一个计算机系统的存储系统由主存和辅助存储器组成
  • 按8位(1个字节)进行编址
  • 对于字,双字等类型,高位数据放高地址,低位数据放低地址

堆栈

  • 先进后出
  • 16位段的栈时,自动使用SP,32位段自动使用ESP
  • ESP/SP移动的字节数,取决于操作数的大小,子类型移动2,双字移动4

PUSH OPS

  • 将源操作数压栈,系统自动确定操作数类型
  • 源操作数可以是立即数,寄存器,段寄存器,存储器

POD OPD

  • 栈顶元素出栈,送到目的操作数
  • 目的操作数可以是寄存器,存储器,段寄存器(CS除外)

PUSHA

  • 将8个16位寄存器按AX、CX、DX、BX、SP、BP、SI、DI顺序入栈保存
  • 压入堆栈的SP值是执行PUSHA之前的值

PUSHAD

  • 将8个32位寄存器按EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI顺序入栈保存
  • 压入堆栈的ESP值是执行PUSHAD之前的值

POPA

  • 8个16位寄存器出栈

POPAD

  • 8个32位寄存器出栈

实方式物理地址

  • 段首地址:偏移地址,称为二维的逻辑地址,用以表示某段中的某个地址单元
  • CPU 可访问6个段:CS, SS, DS, ES, FS, GS
  • EIP/IP 是CS段下一次执行指令的偏移地址
  • ESP/IP 是SS段中栈顶的偏移地址

保护方式物理地址

特权级

保护方式下有4个特权级:

  • 0级:操作系统内核
  • 1级:操作系统服务程序
  • 2级:系统扩展程序
  • 3级:应用程序

每一个段,都有对应的特权级,当前执行的代码段,对应的特权级,就是当前特权级
被访问段的特权级,不能高于当前特权级

描述符

段按作用分类:

  • 存储段:保存可访问数据和程序
  • 系统段:实现存储管理机制
  • 控制段:用于控制系统任务切换、特权变换、中断异常处理

描述符的定义:用4个字,来描述段的所有信息
描述符的对应分类:
存储段描述符、系统段描述符、控制段描述符
描述符

描述符表

描述符表是描述符的集合,分类如下:

  • 局部描述符表:每一个程序,对应一个局部描述符表(LDT),包含该程序所有段的描述符
  • 全局描述符表:只有一个,包含各任务共享段的描述符
  • 中断描述符表:含有指向中断服务程序的描述符

段选择符和描述符寄存器

段寄存器的内容称为段选择符,可以用描述符表中选择相应的描述符
为了得到物理地址,必须将虚拟存储空间映射到物理空间,这个过程,就是根据段选择符,到对应的LDT或者GDT中查找对应的描述符,CPU把所有段选择符对应的描述符,装入描述符高速缓冲寄存器,提高查找速度

保护方式物理地址形成

  • 根据段寄存器中的段选择符,在描述符高速缓冲寄存器中,查找对应的描述符
  • 从高速缓冲寄存器中取出段基址,与偏移地址相加,得到32位线性地址
  • 如果有分页部件,还需要经过分页部件的映射

数据在计算机内的表示形式

定点数、浮点数、BCD码、ASCII码

BCD码

  • 压缩过的:利用4位二进制数,表示一个10进制数
  • 未压缩的:利用8位二进制数,表示一个10进制数,高4位无效,可以压缩

标志寄存器

标志寄存器

常用的标志位

  • 符号标志SF:运算结果最高位为1,则SF=1
  • 零标志ZF:运算结果为0,则ZF=1
  • 溢出标志OF:上溢或者下溢,则OF=1
  • 进位标志CF:最高位产生进位、借位的情况,CF=1
  • 辅助进位标志AF:做字节运算时,低半字节向高半字节 进位与借位,AF=1,主要用于BCD码的运算
  • 奇偶标志PF:运算结果最低字节中,1的个数为偶数,PF=1,用于检测传输错误
  • 方向标志DF:串操作指令中,对字符串进行正向处理DF=0,反向处理DF=1
  • 中断允许标志IF:允许开中断时,IF=1

操作指令

  • LAHF:将EFLAGS的低8位,送入AH中
  • SAHF:将AH中的内容,送入EFLAGS的低8位
  • PUSHFD:32位EFLAGS入栈
  • POPFD:32位EFLAGS出栈

进位与溢出

进位的条件

最典型的是:正数+负数=正数
另外很多情况下,均能产生进位,进位不是错误,溢出才是

溢出的条件

  • 正数 + 正数 = 负数
  • 负数 + 负数 = 正数
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值