微机原理02(1)-sjj_第1页
微机原理02(1)-sjj_第2页
微机原理02(1)-sjj_第3页
微机原理02(1)-sjj_第4页
微机原理02(1)-sjj_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、(1) 第第2 2章章 微处理器指令系统微处理器指令系统 本章重点:本章重点: n8088/8086的寄存器组和各种寻址方式的寄存器组和各种寻址方式 n8088/8086常用指令的功能常用指令的功能 内部数据总线内部数据总线 控制总线控制总线 数据总线数据总线 地址总线地址总线 暂存器暂存器累加器累加器 ALU 标志寄存器标志寄存器 指指 令令 寄寄 存存 指指 令令 译译 码码 时序时序 和和 控制控制 逻辑逻辑 通通 用用 寄存器组寄存器组 地地 址址 寄存器组寄存器组 地址地址 总线总线 控制控制 数据数据 总线总线 控制控制 2.1.1 微处理器的基本结构 图图2-1 8位位CPU的基

2、本组成的基本组成 算术逻辑单元算术逻辑单元 寄存器组寄存器组 指令处理单元指令处理单元 1. 算术逻辑单元算术逻辑单元(ALU,Arithmetic Logic Unit) n计算机的运算器,负责计算机的运算器,负责CPU所能进行的各种运算,所能进行的各种运算, 主要是算术运算和逻辑运算。主要是算术运算和逻辑运算。 nALU的基本组成是一个加法器。有两操作数入口。的基本组成是一个加法器。有两操作数入口。 n对于对于8位位CPU来说,总是由累加器来说,总是由累加器(AL)和暂存器分和暂存器分 别提供一个操作数,运算结果被返回到累加器,反别提供一个操作数,运算结果被返回到累加器,反 映运算结果的状

3、态信息则被记录在标志映运算结果的状态信息则被记录在标志(Flag)寄存寄存 器里。器里。 n程序可根据运算后各标志的状态来决定下一步的走程序可根据运算后各标志的状态来决定下一步的走 向。向。 2. 寄存器组寄存器组 nCPU内部的高速存储单元。内部的高速存储单元。 n从应用角度,可将从应用角度,可将CPU内的可编程寄存器分内的可编程寄存器分 为三类为三类 n通用寄存器通用寄存器即可存即可存数据数据,又可存,又可存地址地址。 n地址寄存器地址寄存器主要用来存放主要用来存放地址地址,用于存储器,用于存储器 的寻址操作,因而也称为地址指针寄存器。的寻址操作,因而也称为地址指针寄存器。 n标志寄存器标

4、志寄存器用来保存程序的运行状态,也称用来保存程序的运行状态,也称 为为“程序状态字程序状态字(PSW)寄存器寄存器”。 n状态类标志状态类标志:用来反映计算结果的状态。:用来反映计算结果的状态。 n控制类标志控制类标志:用于控制微处理器的工作方式。:用于控制微处理器的工作方式。 3. 指令处理单元指令处理单元 n微处理器的控制器。负责对指令进行译码和微处理器的控制器。负责对指令进行译码和 处理,一般包括:处理,一般包括: n指令寄存器指令寄存器暂存被译码处理的指令暂存被译码处理的指令 n指令译码逻辑指令译码逻辑对指令译码,获知指令的功能对指令译码,获知指令的功能 n时序和控制逻辑时序和控制逻辑

5、根据指令要求,按一定的时根据指令要求,按一定的时 序发出和接收各种信号,以便控制微机系统完成序发出和接收各种信号,以便控制微机系统完成 指令所要求的操作。指令所要求的操作。 2.1.2 8088/8086的功能结构 n8088的的内部结构内部结构从功能分成两个单元从功能分成两个单元 n总线接口单元总线接口单元BIU管理管理8088与系统总线与系统总线 的接口,负责的接口,负责CPU对存储器和外设进行访问对存储器和外设进行访问 n执行单元执行单元EU负责指令的译码、执行和数负责指令的译码、执行和数 据的运算据的运算 n两个单元相互独立,分别完成各自操作两个单元相互独立,分别完成各自操作 n两个单

6、元可以两个单元可以并行执行并行执行,实现指令取指和,实现指令取指和 执行的流水线操作执行的流水线操作 1. 总线接口单元总线接口单元(BIU,Bus Interface Unit) n构成:构成:指令队列、指令指针指令队列、指令指针(IP)、段寄存器、段寄存器 (CS、DS、SS、ES)、地址加法器、总线控、地址加法器、总线控 制逻辑等制逻辑等 n指令队列指令队列存放预取的指令代码,按照先进先存放预取的指令代码,按照先进先 出原则工作出原则工作 n地址加法器地址加法器(20位位)计算存储单元的计算存储单元的20位物理位物理 地址地址 n功能:功能:管理着管理着8088与总线的接口,负责与总线的

7、接口,负责CPU 对存储器和外设进行访问。对存储器和外设进行访问。 n8088 CPU所有所有对外操作对外操作必须通过必须通过BIU和总线和总线 来进行。来进行。 总线的几种工作情况:总线的几种工作情况: n取指操作取指操作BIU通过总线进行取指。通过总线进行取指。 n取指以外的其他总线操作取指以外的其他总线操作应指令或外设的要应指令或外设的要 求,由求,由BIU负责进行读写存储器操作数、输入输出、负责进行读写存储器操作数、输入输出、 响应中断时读取中断向量号等。响应中断时读取中断向量号等。 n总线空闲总线空闲指令队列已满,指令队列已满,CPU又在进行内部又在进行内部 操作时,总线呈空闲状态。

8、操作时,总线呈空闲状态。 n总线请求设备占用总线总线请求设备占用总线总线请求设备经申请总线请求设备经申请 获得总线的使用权,利用总线进行数据传输。获得总线的使用权,利用总线进行数据传输。 2. 执行单元执行单元(EU,Execution Unit) n构成构成:由:由ALU、通用寄存器、地址寄存器、标志寄、通用寄存器、地址寄存器、标志寄 存器和指令译码逻辑等构成。存器和指令译码逻辑等构成。 n功能功能:负责指令的译码、执行和数据的运算。:负责指令的译码、执行和数据的运算。 n执行单元无直接对外接口,要译码的指令从执行单元无直接对外接口,要译码的指令从BIU的的 指令队列中获得指令队列中获得 n

9、在指令译码后,在指令译码后,CPU所需进行的操作可分为:所需进行的操作可分为: n内操作内操作所有所有8位、位、16位的算术逻辑运算都将由位的算术逻辑运算都将由EU来完来完 成,其中包括成,其中包括16位有效地址位有效地址EA的计算。的计算。 n外操作外操作所有指令所要求的读、写存储器或外设的操作,所有指令所要求的读、写存储器或外设的操作, 通过通过BIU和总线来完成。和总线来完成。 n例,例,ADD AL, 0020H (外操作读存储器,内操作完成计算)(外操作读存储器,内操作完成计算) 3. 指令预取指令预取 n8088 BIU中的指令队列为中的指令队列为4个字节,按个字节,按“先进先出先

10、进先出” 的方式进行工作的方式进行工作 n当指令队列中出现空缺时,当指令队列中出现空缺时,BIU会自动取指来弥补这一空会自动取指来弥补这一空 缺缺 n当程序发生转移时,当程序发生转移时,BIU会废除原序列,重新取指来形成会废除原序列,重新取指来形成 新的队列新的队列 n指令预取:指令预取:EU单元在对一个指令进行译码执行时,单元在对一个指令进行译码执行时, BIU单元可以同时对后续指令进行读取。单元可以同时对后续指令进行读取。 n并行执行并行执行:8088中指令读取是在中指令读取是在BIU,指令执行是,指令执行是 在在EU。BIU和和EU两单元相互独立,可以并行进行。两单元相互独立,可以并行进

11、行。 2.1.3 8088/8086的寄存器结构 n8088/8086的寄存器组有的寄存器组有8个通用寄存器、个通用寄存器、4个段寄存器、个段寄存器、 1个标志寄存器和个标志寄存器和1个指令指针寄存器,均为个指令指针寄存器,均为16位。位。 1. 通用寄存器通用寄存器 4个数据寄存器,个数据寄存器,2个变址寄存器,个变址寄存器,2个指针寄存器个指针寄存器 (1) 数据寄存器数据寄存器 n 8088有有4个个16位数据寄存器:位数据寄存器:AX、BX、CX、DX n每个均能分为两个独立的每个均能分为两个独立的8位寄存器:位寄存器:AH、AL、BH、 BL、CH、CL、DH、DL。 n“独立独立”

12、:对某个:对某个8位寄存器的操作,不影响对应位寄存器的操作,不影响对应8位寄位寄 存器的数据存器的数据。 例例 mov AX, 0102H mov AL, 03H 结果结果AX=0103H n数据寄存器是通用,用来存放操作数和计算结果,数据寄存器是通用,用来存放操作数和计算结果, 但每个寄存器又有其各自的常用用法但每个寄存器又有其各自的常用用法 nAX累加器累加器(Accumulator):使用频率最高,用于算术逻:使用频率最高,用于算术逻 辑运算,以及与外设传送信息等。辑运算,以及与外设传送信息等。 AL为为8位累加器。位累加器。 nBX基址寄存器基址寄存器(Base address reg

13、ister):常用来存放:常用来存放 存储器地址。常用来做基址指针,指向一批连续存放操存储器地址。常用来做基址指针,指向一批连续存放操 作数的基地址。作数的基地址。 nCX计数器计数器(Counter):作为循环和串操作等指令中的隐:作为循环和串操作等指令中的隐 含计数器。存含计数器。存“循环次数循环次数”。 nDX数据存储器数据存储器(Data register):常用来存放双字长数据:常用来存放双字长数据 (32位位)的高的高16位或存放外设端口地址。位或存放外设端口地址。(DX、AX配合使配合使 用,存放双字长数据用,存放双字长数据 (2) 变址寄存器变址寄存器 n16位变址寄存器位变址

14、寄存器SI和和DI n常用于存储器变址寻址方式时提供地址常用于存储器变址寻址方式时提供地址 nSI是源地址寄存器,是源地址寄存器,DI是目的地址寄存器。是目的地址寄存器。 n具体用法将在寻址方式中详细讲述。具体用法将在寻址方式中详细讲述。 (3) 指针寄存器指针寄存器 16位指针寄存器位指针寄存器BP和和SP,用以指向,用以指向堆栈堆栈中中 的数据单元。的数据单元。 nSP为堆栈指针寄存器。为堆栈指针寄存器。 n堆栈段寄存器堆栈段寄存器SS指示堆栈段的开始位置,堆栈指指示堆栈段的开始位置,堆栈指 针寄存器针寄存器SP指示堆栈顶部相对于开始的偏移位置。指示堆栈顶部相对于开始的偏移位置。 nSP具

15、有专用性,不能再用作其他目的。具有专用性,不能再用作其他目的。 n堆栈段数据的压入堆栈段数据的压入(Push)和弹出和弹出(Pop)都是相对都是相对 于堆栈顶进行的,每次数据操作于堆栈顶进行的,每次数据操作SP要减要减2或加或加2 nBP为基址指针寄存器为基址指针寄存器 n默认表示堆栈段中的基地址默认表示堆栈段中的基地址 n采用随机存取方式读写堆栈段中的数据采用随机存取方式读写堆栈段中的数据 n主要在子程序中,利用堆栈传递参数主要在子程序中,利用堆栈传递参数 nSP、BP存储器与存储器与SS段寄存器联合使用,以段寄存器联合使用,以 确定堆栈段中的存储单位地址确定堆栈段中的存储单位地址 2. 指

16、令指针寄存器指令指针寄存器 n程序代码被存放在存储器的代码段中。程序代码被存放在存储器的代码段中。 n代码段存储器代码段存储器CS指示代码段的开始位置。指示代码段的开始位置。 n16位指令指针寄存器位指令指针寄存器IP用来指示代码段中用来指示代码段中下一下一 条将执行的指令条将执行的指令的偏移地址。的偏移地址。 n代码段由微处理器自动维护,代码段由微处理器自动维护,IP寄存器是专寄存器是专 用的,用户不能直接访问。用的,用户不能直接访问。 n微处理器利用微处理器利用CS: IP取得要执行的指令,从取得要执行的指令,从 而控制指令序列的执行流程而控制指令序列的执行流程 3. 标志寄存器标志寄存器

17、 n标志标志(Flag)用于反映指令执行结果或控制指用于反映指令执行结果或控制指 令的执行形式。令的执行形式。 n8088中各种常用标志形成了一个中各种常用标志形成了一个16位的标位的标 志寄存器志寄存器FLAGS,也称为程序状态字寄存器,也称为程序状态字寄存器 PSW。 nFLAGS中的各种标志分为两类:中的各种标志分为两类: n6个状态标志:反映指令运行结果的状态,个状态标志:反映指令运行结果的状态,CF OF AF SF ZF PF n3个控制标志:控制指令执行的方式,个控制标志:控制指令执行的方式,DF IF TF (1)状态标志状态标志用来记录程序运行结果的状态用来记录程序运行结果的

18、状态 信息。信息。 1) ZF:零标志:零标志(Zero Flag) n运算结果为零时,运算结果为零时,ZF=1 n运算结果不为零时,运算结果不为零时,ZF=0 2) SF:符号标志:符号标志(Sign Flag) n运算结果最高位为运算结果最高位为1,则,则SF=1 n运算结果最高位为运算结果最高位为0,则,则SF=0 3) PF:奇偶标志:奇偶标志(Parity Flag) n运算结果运算结果最低字节最低字节中中“1”的个数为的个数为0或偶数时,或偶数时,PF=1 n运算结果运算结果最低字节最低字节中中“1”的个数为奇数时,的个数为奇数时,PF=0 n注意:注意:PF标志仅反映最低标志仅反

19、映最低8位中位中“1”的个数是否是偶数,的个数是否是偶数, 即使是进行即使是进行16位字操作也如此。位字操作也如此。 4) CF:进位标志:进位标志(Carry Flag) n当当无符号数无符号数运算结果的最高有效位有进位运算结果的最高有效位有进位(加法加法)或借位或借位 (减法减法)时,时,CF=1,否则,否则CF=0 n8位无符号数整数的范围是位无符号数整数的范围是0255 (00HFFH),若无符,若无符 号数运算结果超过这一范围,就是产生了进位或借位。号数运算结果超过这一范围,就是产生了进位或借位。 5) AF:辅助进位标志:辅助进位标志(Auxiliary Carry Flag) n

20、运算时运算时D3位位(低半字节低半字节)有进位或借位时,有进位或借位时,AF=1 n否则,否则,AF=0 6) OF:溢出标志:溢出标志(Overflow Flag) n若算术运算的结果有溢出,则若算术运算的结果有溢出,则OF=1 n否则,否则,OF=0 关于溢出标志OF的几个问题 什么是溢出什么是溢出: n溢出标志针对的是溢出标志针对的是有符号数有符号数,(处理器内,(处理器内 部以补码表示有符号数)部以补码表示有符号数) n8位有符号数的表示范围位有符号数的表示范围:-128+127 n16位有符号数的表示范围位有符号数的表示范围:-32768+32787 如果运算结果超出了这个范围,就是

21、产生了溢出。如果运算结果超出了这个范围,就是产生了溢出。 n发生溢出时,说明有符号数的运算结果不发生溢出时,说明有符号数的运算结果不 正确。正确。 n以以8位运算为例:计算位运算为例:计算3AH+7CH n实际上:实际上:58+124=182,超出了,超出了-128127的范的范 围,故溢出。围,故溢出。 n按照二进制的加法进行运算:按照二进制的加法进行运算:3AH+7CH=B6H n按照补码解释上述加法:按照补码解释上述加法:58+124=-74,运算结,运算结 果是错的果是错的 溢出标志和进位标志的区别溢出标志和进位标志的区别: n溢出标志和进位标志是两个意义不同的标溢出标志和进位标志是两

22、个意义不同的标 志志 n进位标志进位标志CF表示表示无符号数无符号数运算结果是否超出范运算结果是否超出范 围,当围,当CF=1时,运算结果仍然正确时,运算结果仍然正确 n溢出标志溢出标志OF表示表示有符号数有符号数运算结果是否超出范运算结果是否超出范 围,当围,当OF=1时,运算结果已经不正确了。时,运算结果已经不正确了。 如何运用溢出和进位如何运用溢出和进位: n处理器处理器对两个操作数进行运算时对两个操作数进行运算时(CF和和OF的设的设 置置) n根据根据无符号运算无符号运算结果有无进位来设置进位标志结果有无进位来设置进位标志CF n根据根据有符号运算有符号运算结果是否超出表示范围来设置

23、溢出结果是否超出表示范围来设置溢出 标志标志OF n对于对于程序员程序员来讲,利用哪个标志取决于如何看来讲,利用哪个标志取决于如何看 待操作数待操作数(主观主观) n如果将参加运算的操作数认为是如果将参加运算的操作数认为是无符号数无符号数,则应关,则应关 心进位标志心进位标志 n如果将参加运算的操作数认为是如果将参加运算的操作数认为是有符号数有符号数,则应关,则应关 心溢出标志心溢出标志 判断运算结果是否溢出的简单规则判断运算结果是否溢出的简单规则: n只有两个相同符号数相加,而运算结果的符号与原只有两个相同符号数相加,而运算结果的符号与原 数符号相反时,产生溢出数符号相反时,产生溢出 (此时

24、的运算结果显然不此时的运算结果显然不 正确正确) 。其他情况下,则不会产生溢出。其他情况下,则不会产生溢出。 n推论:推论: n两同号数相减不会溢出两同号数相减不会溢出 n异号相减异号相减(相当于同号相加相当于同号相加)可能溢出可能溢出 n两异号数相加不会产生溢出两异号数相加不会产生溢出 用于控制处理器执行指令的方式,由程序根据需要用于控制处理器执行指令的方式,由程序根据需要 用指令来设置。用指令来设置。 1) DF方向标志方向标志(Direction Flag) 用于串操作指令中,控制地址的变化方向用于串操作指令中,控制地址的变化方向 nDF=0,则每次串操作后,存储地址自动增加,则每次串操

25、作后,存储地址自动增加(增址增址) nDF=1,则每次串操作后,存储地址自动减少,则每次串操作后,存储地址自动减少(减址减址) 指令设置:指令设置: nCLD ;指令复位;指令复位DF,即令,即令DF=0 nSTD ;指令置位;指令置位DF,即令,即令DF=1 (2) 控制标志 2) IF中断允许标志中断允许标志(Interrupt-enable Flag) 用于控制外部可屏蔽中断是否可被处理器响应用于控制外部可屏蔽中断是否可被处理器响应 nIF=1,允许中断,允许中断 nIF=0,禁止中断,禁止中断 指令设置:指令设置: nCLI ;指令复位;指令复位DF,即令,即令IF=0 nSTI ;指

26、令置位;指令置位DF,即令,即令IF=1 3) TF陷阱标志陷阱标志(Trap Flag)又称单步标志又称单步标志 用于控制处理器是否进入单步操作方式用于控制处理器是否进入单步操作方式 nTF=0,处理器正常工作,处理器正常工作 nTF=1,处理器单步执行指令,即处理器在每条指,处理器单步执行指令,即处理器在每条指 令执行结束时,产生一个编号为令执行结束时,产生一个编号为1的内部中断的内部中断(单单 步中断步中断) 利用单步中断可对程序进行逐条的指令调试,利用单步中断可对程序进行逐条的指令调试, 这种逐条指令调试程序的方法就是单步调试。这种逐条指令调试程序的方法就是单步调试。 2.1.4 80

27、86/8088的存储器结构 1. 数据的存储格式数据的存储格式 n信息的表示单位有:信息的表示单位有: n位位(bit):存储一位二进制数,:存储一位二进制数,0或或1 n字节字节(Byte):8位二进制,位二进制,D7D0 n字字(Word):16位位/2个字节,个字节, D15D0 n双字双字(Double Word):32位位/4个字节,个字节, D31D0 最低有效位最低有效位LSB(Least Significant Bit):数据的最低:数据的最低 位,即位,即D0位位 最高有效位最高有效位MSB(Most Significant Bit):数据的最:数据的最 高位,对应字节、字、

28、双字分别指高位,对应字节、字、双字分别指D7、D15、D31位位 n存储单元存储单元 存储器中,信息的存储单元存储器中,信息的存储单元字节字节 存储单元地址存储单元地址每个存储单元的每个存储单元的编号编号 无符号二进制数,从无符号二进制数,从0开始顺序加开始顺序加1 常用十六进制数表示常用十六进制数表示 存储单元的内容存储单元的内容存储单元中存放的存储单元中存放的信息信息 n多字节数据在存储器中的存储多字节数据在存储器中的存储 n占用多个连续的存储单元占用多个连续的存储单元 n采用采用“小端方式小端方式”存储存储 n低字节存于低地址,高字节存于高地址低字节存于低地址,高字节存于高地址 n占用的

29、地址空间用它的占用的地址空间用它的低地址低地址表示表示 n同一个地址即可看作是字节单元的地址,也可看同一个地址即可看作是字节单元的地址,也可看 作是作是“字字”、“双字双字”单元的地址。编程中需要单元的地址。编程中需要 特别注意。特别注意。 2. 存储器的分段管理存储器的分段管理 n8088有有20位地址线位地址线 n最大可寻址的存储空间是最大可寻址的存储空间是220=1MB n可寻址的地址范围是可寻址的地址范围是00000HFFFFFH n物理地址物理地址(绝对地址绝对地址)每个存储单元的唯一的每个存储单元的唯一的 20位地址位地址 n硬件用硬件用20位的物理地址来对存储单元进行寻位的物理地

30、址来对存储单元进行寻 址址 n8088中寄存器、内部总线是中寄存器、内部总线是16位的,不能用位的,不能用 来表示来表示20位的物理地址。位的物理地址。 n8088将将1MB存储空间分成许多逻辑段来管理存储空间分成许多逻辑段来管理 n分段准则:分段准则: n每段最大每段最大64kB n只能从只能从模模16地址开始一个逻辑段地址开始一个逻辑段 XXXX0H n用用“段基地址:段内偏移地址段基地址:段内偏移地址”来准确表示来准确表示 存储单元的物理地址存储单元的物理地址 n段基地址段基地址 n逻辑段在存储器中的起始地址,逻辑段在存储器中的起始地址, nXXXX0H可用可用XXXXH表示,即用表示,

31、即用16位二进制数表示位二进制数表示 n存储于存储于16位段寄存器中位段寄存器中(CS/SS/DS/ES) n段内偏移地址段内偏移地址 n存储单元距段起始位置的偏移量存储单元距段起始位置的偏移量 n在在64KB范围内范围内 n可用可用16位二进制表示位二进制表示 n逻辑地址逻辑地址 段地址:偏移地址段地址:偏移地址 n8088内部和用户编程时,采用逻辑地址内部和用户编程时,采用逻辑地址 n由逻辑地址计算物理地址由逻辑地址计算物理地址 n段地址左移二进制段地址左移二进制4位位(即乘以即乘以16)+偏移地址偏移地址= 物理地址物理地址 n在在8088CPU内部,内部,BIU中的中的20位地址加法器

32、用位地址加法器用 于计算物理地址于计算物理地址 n一个存储单元具有唯一的一个存储单元具有唯一的20位物理地址,但位物理地址,但 可拥有多个逻辑地址。可拥有多个逻辑地址。 3. 段寄存器段寄存器 8088用用4个个16位段寄存器来存储位段寄存器来存储段地址段地址 nCS 代码段寄存器,用来指明代码段寄存器,用来指明代码段代码段的首地址的首地址 nDS 数据段寄存器,用来指明数据段寄存器,用来指明数据段数据段的首地址的首地址 nES 附加段寄存器,用来指明附加段寄存器,用来指明附加段附加段的首地址的首地址 nSS 堆栈段寄存器,用来指明堆栈段寄存器,用来指明堆栈段堆栈段的首地址的首地址 n代码段代

33、码段:主要用来存放程序的指令代码:主要用来存放程序的指令代码 n代码段寄存器代码段寄存器CS存放代码段的段地址存放代码段的段地址 n指令指针寄存器指令指针寄存器IP指示代码段中指令的偏移地址指示代码段中指令的偏移地址 n处理器利用处理器利用CS:IP取得下一条要执行的指令取得下一条要执行的指令 n堆栈段堆栈段:用于确定堆栈所在的主存区域,用于:用于确定堆栈所在的主存区域,用于 保存程序断点和现场,向子程序传递参数等保存程序断点和现场,向子程序传递参数等 n堆栈段寄存器堆栈段寄存器SS存放堆栈段的段地址存放堆栈段的段地址 n堆栈指针寄存器堆栈指针寄存器SP指示堆栈栈顶的偏移地址指示堆栈栈顶的偏移

34、地址 n处理器利用处理器利用SS:SP操作堆栈栈顶的数据操作堆栈栈顶的数据 n数据段数据段:存放程序所使用的数据:存放程序所使用的数据 n数据段寄存器数据段寄存器DS存放数据段的段地址存放数据段的段地址 n通过各种存储器寻址方式得到存储器中操作数的通过各种存储器寻址方式得到存储器中操作数的 偏移地址偏移地址(称为有效地址称为有效地址EA) n处理器利用处理器利用DS:EA存取数据段中的数据存取数据段中的数据 n附加段附加段:附加的数据段,也用于数据的存放:附加的数据段,也用于数据的存放 n附加段寄存器附加段寄存器ES存放附加段的段地址存放附加段的段地址 n通过各种存储器寻址方式得到存储器中操作

35、数的通过各种存储器寻址方式得到存储器中操作数的 偏移地址偏移地址(称为有效地址称为有效地址EA) n处理器利用处理器利用ES:EA存取附加段中的数据存取附加段中的数据 n串操作指令将附加段作为其目的操作数的存放区串操作指令将附加段作为其目的操作数的存放区 域域 n存储器的分段管理符合程序的模块化思想。存储器的分段管理符合程序的模块化思想。 n程序员在编程时应将程序的各部分放在相应程序员在编程时应将程序的各部分放在相应 的逻辑段内的逻辑段内 n程序的指令序列必须安排在代码段程序的指令序列必须安排在代码段 n程序使用的堆栈一定放在堆栈段程序使用的堆栈一定放在堆栈段 n程序中的数据默认是安排在数据段

36、,也经常安排程序中的数据默认是安排在数据段,也经常安排 在附加段,尤其是串操作的目的区必须是附加段在附加段,尤其是串操作的目的区必须是附加段 n数据的存放比较灵活,实际上可以存放在任何一数据的存放比较灵活,实际上可以存放在任何一 种逻辑段中种逻辑段中 n程序中如何指明数据所在的逻辑段?程序中如何指明数据所在的逻辑段? n没有指明时,一般的数据访问在数据段没有指明时,一般的数据访问在数据段 n若使用若使用BP访问存储器,则在堆栈段访问存储器,则在堆栈段 n8088设计了设计了4个段超越前缀指令,用于改变默认个段超越前缀指令,用于改变默认 的情况,明确指定数据所在的逻辑段的情况,明确指定数据所在的

37、逻辑段 nCS: 代码段超越,使用代码段的数据代码段超越,使用代码段的数据 nSS: 堆栈段超越,使用堆栈段的数据堆栈段超越,使用堆栈段的数据 nDS: 数据段超越,使用数码段的数据数据段超越,使用数码段的数据 nES: 附加段超越,使用附加段的数据附加段超越,使用附加段的数据 n例:例: n没有段超越的指令没有段超越的指令 MOV AX, 2000H n采用段超越前缀的指令采用段超越前缀的指令 MOV AX, ES:2000H 2.2 8088/8086的寻址方式的寻址方式 n本节从本节从8088/8086的指令构成入手,论述立的指令构成入手,论述立 即数寻址方式、寄存器寻址方式、存储器寻即

38、数寻址方式、寄存器寻址方式、存储器寻 址方式址方式 一、指令的构成一、指令的构成 指令由指令由操作码操作码和和操作数操作数两部分构成。两部分构成。 n操作码操作码说明指令的功能说明指令的功能 n如传送、运算、移位、跳转等操作如传送、运算、移位、跳转等操作 n每种指令的操作码用一个唯一的助记符表示每种指令的操作码用一个唯一的助记符表示 n对应着一个二进制编码的机器指令对应着一个二进制编码的机器指令 n操作数操作数指令执行的参与者,即操作的对象指令执行的参与者,即操作的对象 n通常的指令有一到两个操作数通常的指令有一到两个操作数 n有些指令不需要操作数有些指令不需要操作数 n操作数存在哪里?操作数

39、存在哪里?(寻址方式寻址方式) n操作数可以存放于操作码之后操作数可以存放于操作码之后立即寻址立即寻址 MOV AL, 1 n操作数可以存放在操作数可以存放在CPU内部的寄存器中内部的寄存器中寄存寄存 器寻址器寻址 MOV AL, BL n操作数可以存放于存储器中操作数可以存放于存储器中存储器寻址方式存储器寻址方式 MOV AL, 0200H 二、汇编语言的语句格式二、汇编语言的语句格式 n 汇编语言源程序由语句序列构成汇编语言源程序由语句序列构成 n 每条语句一般占一行每条语句一般占一行 n 汇编语言对大小写不敏感汇编语言对大小写不敏感 (1) 执行性语句执行性语句用于表达处理器指令用于表达

40、处理器指令(硬指硬指 令令),汇编后对应一条指令代码,汇编后对应一条指令代码(即可以产生即可以产生 机器码机器码),格式如下:,格式如下: 标号:硬指令助记符标号:硬指令助记符 操作数操作数, 操作数操作数 ; 注释注释 1) 标号标号 n反映硬指令位置和属性的标识符反映硬指令位置和属性的标识符 n可有可无可有可无 n主要用于指示分支、循环等程序的转移地址主要用于指示分支、循环等程序的转移地址 n后跟一个后跟一个“:”,与说明性语句中的名字相区别,与说明性语句中的名字相区别 例例 MOV AL, BL JMP NEXT NEXT:ADD AL, CL 2)硬指令助记符硬指令助记符可以是任何一条

41、处理器指令可以是任何一条处理器指令 3)操作数操作数表示参与操作的对象,可以是立即表示参与操作的对象,可以是立即 数、寄存器和存储单元数、寄存器和存储单元 在双操作数指令中:在双操作数指令中: 操作数操作数1,操作数,操作数2 n操作数操作数1目的操作数目的操作数dest,一般写在逗号前,一般写在逗号前, 不仅可以作为指令操作的一个对象,还用来存放指不仅可以作为指令操作的一个对象,还用来存放指 令操作的结果令操作的结果 n操作数操作数2源操作数源操作数src,表示参与指令操作的一,表示参与指令操作的一 个对象个对象 4)注释注释 n在语句中位于分号之后,是对指令或程序段功能在语句中位于分号之后

42、,是对指令或程序段功能 的说明,是为了程序便于阅读而加上的,帮助理的说明,是为了程序便于阅读而加上的,帮助理 解和记忆,可有可无。解和记忆,可有可无。 n必要时,一个语句行也可以由分号开始作为阶段必要时,一个语句行也可以由分号开始作为阶段 性注释性注释 n汇编语言在翻译源程序时将跳过该部分,不对它汇编语言在翻译源程序时将跳过该部分,不对它 们做任何处理们做任何处理 (2) 说明性语句说明性语句用于表达伪指令。用于表达伪指令。 n指示源程序如何汇编、变量怎样定义、过程指示源程序如何汇编、变量怎样定义、过程 怎样设置等。怎样设置等。 n不产生机器码不产生机器码 n格式:格式: 名字名字 伪指令助记

43、符伪指令助记符 参数,参数参数,参数 ;注释;注释 1) 名字名字 n反映伪指令位置反映伪指令位置(逻辑地址逻辑地址)和属性的标识符,和属性的标识符, 可以是变量名、段名、子程序名等。可以是变量名、段名、子程序名等。 n后跟空格或制表符分隔,后跟空格或制表符分隔,没有冒号没有冒号 n标号和名字均是用户自定义的符合汇编语言语标号和名字均是用户自定义的符合汇编语言语 法的标识符,区别在于其后的分隔符不同。法的标识符,区别在于其后的分隔符不同。 2) 伪指令助记符伪指令助记符帮助记忆伪指令的符号,帮助记忆伪指令的符号, 反映指令的功能。反映指令的功能。 3) 参数参数可以是常量、变量名、表达式等,可

44、以是常量、变量名、表达式等, 可以有多个,参数间用逗号分隔。可以有多个,参数间用逗号分隔。 4) 注释注释 寻址方式的讨论 n程序中使用最多的是程序中使用最多的是mov指令指令 n格式:格式: mov dest, src n功能:将源操作数功能:将源操作数src传送至目的操作数传送至目的操作数dest n在下面讲述寻址方式时,采用在下面讲述寻址方式时,采用 mov ax, src 的形式的形式 n 目的操作数固定采用目的操作数固定采用ax寄存器寻址寄存器寻址 n 源操作数反映各种寻址方式源操作数反映各种寻址方式 2.2.1 立即数寻址方式 n指令中的操作数直接存放在机器代码中,紧指令中的操作数

45、直接存放在机器代码中,紧 跟在操作码之后跟在操作码之后(代码段中代码段中)。 n这种操作数被称为立即数这种操作数被称为立即数 imm n可以是可以是8位数值位数值 i8 (00HFFH) n可以是可以是16位数值位数值 i16 (0000HFFFFH) n例:将立即数例:将立即数1234H送至送至AX寄存器寄存器 MOV AX,1234H ;机器码为;机器码为B8 34 12 n在汇编语言中,立即数是以在汇编语言中,立即数是以常量常量的形式出现的的形式出现的 n常数可以是二、十、十六进制数、字符串,还可常数可以是二、十、十六进制数、字符串,还可 以是标识符表示的符号常量、数值表达式以是标识符表

46、示的符号常量、数值表达式 n例例 nMOV AL, A ; AL=字符字符A的的ASCII码码 41H nMOV AX, 0A123H ; AX=A123H 在汇编语言中,以字母开头的十六进制数应增加一个前导在汇编语言中,以字母开头的十六进制数应增加一个前导0,以,以 便与标识符区别。便与标识符区别。 2.2.2 寄存器寻址方式 n操作数存放在操作数存放在cpu的内部寄存器的内部寄存器reg中中 n8位寄存器位寄存器r8:AH AL BH BL CH CL DH DL n16位寄存器位寄存器r16:AX BX CX DX SI DI BP SP n段寄存器段寄存器seg:CS DS SS ES

47、 n例例 MOV AX,BX ; AXBX n此种寻址方式的操作数存放在此种寻址方式的操作数存放在CPU内部的寄存器中,内部的寄存器中, 不需要访问存储器,因而执行速度快不需要访问存储器,因而执行速度快(内操作内操作) n汇编语言在表达寄存器寻址时使用寄存器名,实质指汇编语言在表达寄存器寻址时使用寄存器名,实质指 的是它的是它存放的内容存放的内容(操作数操作数) n注意寄存器位数的匹配注意寄存器位数的匹配 2.2.3 存储器寻址方式 n操作数存放在主存中,指令中给出的是操作数操作数存放在主存中,指令中给出的是操作数 在主存中的在主存中的偏移地址偏移地址 n8088的存储空间是分段管理的,程序设计时的存储空间是分段管理的,程序设计时 采用逻辑地址采用逻辑地址(段地址:偏移地址段地址:偏移地址) n在存储器寻址方式中在存储器寻址方式中 n段地址由默认的段寄存器给出段地址由默认的段寄存器给出(或段超越前缀指定或段超越前缀指定 的段寄存

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论