第五章微型计算机的指令系统_第1页
第五章微型计算机的指令系统_第2页
第五章微型计算机的指令系统_第3页
第五章微型计算机的指令系统_第4页
第五章微型计算机的指令系统_第5页
已阅读5页,还剩103页未读 继续免费阅读

下载本文档

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

文档简介

1、第五章第五章 微型计算机的指令系统微型计算机的指令系统 指令指令是让计算机完成某种操作的命令,是让计算机完成某种操作的命令,指令的集合称作指令的集合称作指令系统指令系统,不同系列计算机有,不同系列计算机有不同的指令系统。不同的指令系统。 指令是根据计算机指令是根据计算机CPUCPU硬件特点研制出来硬件特点研制出来的,的,指令的符号用规定的英文字母组成,称为指令的符号用规定的英文字母组成,称为助记符助记符。 它的程序目标代码短、运行速度快它的程序目标代码短、运行速度快,因此,指令语言是面向机器的语言,它在自动控制、智能化仪器仪表、监测等领域应用非常广泛。5.1 8086/80885.1 8086

2、/8088汇编语言指令格式与寻址方式汇编语言指令格式与寻址方式5.1.1 8086/80885.1.1 8086/8088汇编语言指令语句格式汇编语言指令语句格式 任何一种汇编语言的指令语句都是与机器任何一种汇编语言的指令语句都是与机器指令一一对应的指令一一对应的,它通过汇编程序将其翻译成机器指令代码机器指令代码(目标代码目标代码),CPU执行某种操作。 86系列汇编语言指令语句格式如图:指令助记符指令助记符操作数操作数 1标号标号是给该指令所在地址取的名字,必须后跟冒号“:”,标号可以缺省标号可以缺省,是可供选是可供选择的标识符。择的标识符。8086/8088汇编语言中可使用的标识符必须遵循

3、下列规则:(1 1)标识符由字母()标识符由字母(a za z、A ZA Z)、)、数字(数字(0 0一一9 9)或某些特殊字符(,)或某些特殊字符(,- -,?),?)组成;组成;(2 2)第一个字符必须是字母()第一个字符必须是字母( a za z、A Z A Z )或某些特殊的符号(,)或某些特殊的符号(, - - ,?),?),但但“?”不能单独作标识符;不能单独作标识符;(3 3)标识符有效长度为)标识符有效长度为3131个字符,若超过个字符,若超过3131个字符,则只保留前面的个字符,则只保留前面的3131个字符为有效标个字符为有效标识符。识符。 下面是有效的标识符:有效的标识符:

4、 START: MY-CODE: ALPHA: NUM-1: LOOP1 : X: ? MORE-350: BETA-1: DELAYIS: 下面是无效的标识符无效的标识符: 4LOOP: MAIN AB: BETA*: START=3: GAMA1: NUM+1: ?: ONE*TWO:2指令助记符是指令名称的代表符号指令助记符是指令名称的代表符号,它是指令语句中的关键字,不可缺省。 3.操作数是参加本指令运算的数据,有些指令不需要操作数,可以缺省;有些指令需要两个操作数,这时必须用逗号(,)将两个操作数分开;有些操作数可以用表有些操作数可以用表达式来表示。达式来表示。 4.注释部分是可选项

5、,允许缺省,如果带注释则必须用分号(;)开头,注释本身只用来对指令功能加以说明,给阅读程序带来方便,汇编程序不对它做任何处理。5.1.2 865.1.2 86系列系列CPUCPU的寻址方式的寻址方式 1 1立即数寻址立即数寻址 8086指令系统中,有一部分指令所用的8位或16位操作数就在指令中提供操作数就在指令中提供,这种方式叫立即数寻址方式立即数寻址方式,例如: MOV AL,80H; MOV AX,1090H; 将1090H送AX,AH中为10H,AL中为90H 采用立即数寻址方式的指令主要用来对采用立即数寻址方式的指令主要用来对寄存器赋值。寄存器赋值。因为操作数可以从指令中直接取得,不需

6、要运行总线周期,所以,立即数立即数寻址方式的显著特点就是速度快。寻址方式的显著特点就是速度快。2 2寄存器寻址寄存器寻址 如果操作数就在操作数就在CPUCPU的内部寄存器中的内部寄存器中,那么寄存器名可在指令中指出,这种寻址方式就叫寄存器寻址方式寄存器寻址方式。 例如: INC CX ;将CX的内容加1 执行速度如何?执行速度如何? 采用寄存器寻址方式的指令在执行时,操作就在操作就在CPUCPU内部进行内部进行,不需要使用总线周期,因此,执行速度快执行速度快。 问:通常情况下操作数放在哪里? 3 3直接寻址直接寻址 使用直接寻址方式时,数据总是在存储使用直接寻址方式时,数据总是在存储器中器中,

7、存储单元的有效地址存储单元的有效地址由指令直接指出。 例如:MOV AX,1070H; 将DS段的1070H和1071H两单元的内容取到AX中。 要注意的是采用直接寻址方式时,如果指令前面没有用前缀前缀指明操作数在哪一段,则默则默认为段寄存器是数据段寄存器认为段寄存器是数据段寄存器DSDS。 如果要对其它段寄存器所指出的存储区如果要对其它段寄存器所指出的存储区进行直接寻址,怎么办?进行直接寻址,怎么办? CS:MOV BX,3000H;(加前缀) 将CS段的3000H和3001H两单元的内容送BX 设CS为5100H,则本指令在执行时,将54000H和54001H两单元的内容取出送BX。 注意

8、:在汇编语言中常将注意:在汇编语言中常将“ ” ”方括方括号中的内容作为存储单元的地址。号中的内容作为存储单元的地址。4 4寄存器间接寻址寄存器间接寻址 采用寄存器间接寻址方式时,操操作数一定在存储器作数一定在存储器中中,存储单元的有存储单元的有效地址由寄存器指效地址由寄存器指出出,这些寄存器可以为BX、BP、SI和DI之一,即有效地即有效地址等于其中某一个址等于其中某一个寄存器的值寄存器的值: 和直接寻址的情况一样,如果指令前面如果指令前面没有用前缀指明具体的段寄存器,则寻址时没有用前缀指明具体的段寄存器,则寻址时默认的段寄存器通常为默认的段寄存器通常为DSDS。如寄存器为如寄存器为BPBP

9、时,时,则对应的段寄存器为则对应的段寄存器为SSSS。 采用寄存器间接寻址采用寄存器间接寻址时,允许在指令中指定一时,允许在指令中指定一个位移量。个位移量。MOV AX,BP+0050MOV AX,BP+0050BP=2000HBP=2000HSS=3000HSS=3000H32050HAL32050HAL32051HAH32051HAH寄存器相对寻址寄存器相对寻址 细分起来,寄存器间接寻址可分为以下四种:(1)以BX寄存器进行间接寻址数据段基址数据段基址寻址寻址 用用BXBX寄存器进行间接寻址时,默认的段寄寄存器进行间接寻址时,默认的段寄存器为存器为DSDS,因为,因为BXBX称为称为基址寄

10、存器基址寄存器,所以这种寻址方式也叫数据段基址寻址数据段基址寻址。例如: MOV AX,BX 设DS = 5000H,BX = 6000H, 则本指令在执行时,将56000H和56001H两单元的内容送AX。 如果要对其他段寄存器所指的区域进行如果要对其他段寄存器所指的区域进行寻址,怎么办?(比如寻址,怎么办?(比如ESES段)段) ES:MOV CX,BX 设ES = 3000H,BX = 3000H。 则本指令在执行时,将33000H和33001H两单元的内容送CX。 (2)以BP寄存器进行间接寻址堆栈段堆栈段基址寻址。基址寻址。 如果以寄存器BP对操作数进行间接寻址,则必须注意,操作数默

11、认在堆栈段中,操作数默认在堆栈段中,因为因为BPBP称为基址寄存器称为基址寄存器,所以这种寻址方式通常称为堆栈段基址寻址堆栈段基址寻址。例如: MOV BX,BP 设SS = 5000H,BP = 2000H。 则本指令在执行时,将52000H和52001H两单元的内容送BX。(3)以SI、DI寄存器进行间接寻址变址寻变址寻址址 SISI源变址寄存器源变址寄存器 DIDI目的变址寄存器,目的变址寄存器,所以用这两个所以用这两个寄存器来进行间接寻址也叫变址寻址寄存器来进行间接寻址也叫变址寻址。 变址寻址通常用于对数组元素进行操作变址寻址通常用于对数组元素进行操作。(4)将将BXBX、BPBP和和

12、SISI、DIDI寄存器组合寄存器组合起来起来进进行间接寻址行间接寻址基址加变址的寻址基址加变址的寻址 通常将通常将BXBX和和BPBP称为基址寄存器,将称为基址寄存器,将SISI和和DIDI称为变址寄存器。称为变址寄存器。 8086指令系统允许把基址寄存器和变址寄存器组成起来构成一种新的寻址方式,叫基址加变址的寻址基址加变址的寻址。 用这种寻址方式时,操作数的有效地址是:1个基址寄存器(BX或BP)的内容加上一个变址寄存器(SI或DI)的内容。即例如: MOV AX,BX+SI 设DS=1000H,BX=5000H,SI=3000H。 则上面指令在执行时,有效地址为8000H,本指令将180

13、00H和18001H两单元的内容取到AX中。 在基址加变址的寻址方式中,只要用上只要用上BPBP寄存器,那么默认的段寄存器就是寄存器,那么默认的段寄存器就是SSSS; 在其它情况下,默认的段寄存器是什在其它情况下,默认的段寄存器是什么?如果操作数不在默认段,怎么办?么?如果操作数不在默认段,怎么办? 用基址加变址的寻址方式时,也允许带一个8位或16位的位移量位移量。例如: MOV AX,BPSI0050;将BP和SI中的内容与0050相加作为有效地址。相对相对的基址加变址寻址的基址加变址寻址。 设BP=3000H,SI=4000H,SS=5000H,结果如何? 这种寻址方式使用起来很灵活,特别

14、是特别是为堆栈中数组的访问过程提供了极大的方便。为堆栈中数组的访问过程提供了极大的方便。 如图5-2所示,在访问堆栈数组时,可以在BPBP中存放堆栈顶的地址中存放堆栈顶的地址,位移量表示数位移量表示数组第一个元素到栈顶的距离,组第一个元素到栈顶的距离,变址寄存器SI(也可为DI)指出数组元素。指出下列指令中源操作数的寻址方式。指出下列指令中源操作数的寻址方式。 (1 1)MOV AXMOV AX,1070H1070H (2 2)MOV AXMOV AX,BXBX (3 3)MOV AXMOV AX,BXBXSISI00500050 (4 4)AND AX, BXAND AX, BX (5 5)

15、MOV AX, 6000HMOV AX, 6000H 5.2 5.2、传送类指令、传送类指令 传送类指令是指令系统中最活跃的一类指令,也是条数最多的一类指令,主要用于数据的保存及交换等场合数据的保存及交换等场合。 我们把这类指令分为四种,并把各种指令操作码助记符和对应的操作数列表格如表所示。注意:1、POPPOP指令中的目的操作数可以是除代码指令中的目的操作数可以是除代码段寄存器段寄存器CSCS之外的其他寄存器和存储器之外的其他寄存器和存储器。 2、根据先进后出的原则,程序设计必须对称根据先进后出的原则,程序设计必须对称。 例如:将16位通用寄存器CX的内容推入堆栈,然后,弹出栈顶至CX中,已

16、知:(SS)=0200H,(SP)=0008H,(CX)=12FA,其示意如图5-4和5-5所示。 又如:假设数据表放在偏移地址又如:假设数据表放在偏移地址为为 2000H2000H开始的内存中,取出开始的内存中,取出“3”3”所对所对应的七段码,用如下几条程序来完成:应的七段码,用如下几条程序来完成: MOV BX, 2000H MOV AL,3 XLAT 执行结果执行结果 AL=30HAL=30H PUSHF和和POPF指令一般用在子程指令一般用在子程序和中断程序的首尾,起保存主程序标志序和中断程序的首尾,起保存主程序标志和恢复主程序标志的作用。和恢复主程序标志的作用。 ADCADC指令为

17、实现指令为实现多字节的加法多字节的加法运算提供了方便。运算提供了方便。比如,有两个比如,有两个4 4字节的无符号数相加,这两个数分别放字节的无符号数相加,这两个数分别放在在2000H2000H和和3000H3000H开始的存储单元中,低位在前,高位开始的存储单元中,低位在前,高位在后,要求进行运算后,得到的和放在在后,要求进行运算后,得到的和放在2000H2000H开始的内开始的内存单元中。存单元中。多字节的加法程序段如下:多字节的加法程序段如下: CLCCLC ;清进位;清进位CFCF MOV SI MOV SI,2000H2000H ;取第一个数的首地址;取第一个数的首地址 MOV AXM

18、OV AX,SISI ;将第一个数的低;将第一个数的低1616位取到位取到AXAX MOV DI MOV DI,3000H3000H ;取第二个数的首地址;取第二个数的首地址 ADD AXADD AX,DIDI ; 第一个和第二个数的低第一个和第二个数的低1616位相加位相加 MOV SIMOV SI,AXAX ;相加结果送到;相加结果送到2000H2000H和和20012001单元单元 MOV AXMOV AX,SI+2SI+2 ;取第一个数的高;取第一个数的高1616位送到位送到AXAX中中 ADC AXADC AX,DI+2DI+2 ;两个数的高;两个数的高1616位连同进位位相加位连同

19、进位位相加 MOV SI+2MOV SI+2,AXAX ;相加的结果送到;相加的结果送到20022002和和20032003单元单元 下面简单举例说明移位指令的应用:下面简单举例说明移位指令的应用: 一般算术移位指令可用于实现带符号数一般算术移位指令可用于实现带符号数的简单乘除运算,而逻辑移位指令则用于无的简单乘除运算,而逻辑移位指令则用于无符号数的简单乘除。符号数的简单乘除。 例 AX中已存放一带符号数,若要完成(AX)*32运算,可用以下程序段: MOV DX,AX ; SAL AX, 1 ;乘;乘2AX ADD AX, DX ;乘;乘3AX SAR AX, 1 ;完成(;完成(AX)*3

20、/2字符串的扫描和比较字符串的扫描和比较 SCASSCAS指令是用来从目标串中查找某个关键指令是用来从目标串中查找某个关键字,要求查找的关键字应事先置入字,要求查找的关键字应事先置入AXAX或或ALAL寄存寄存器中。器中。 SCAS指令的操作是将AXAL寄存器中的关键字减去由DI所指向的目标串中一个元素,不不传送结果,只根据结果置标志位传送结果,只根据结果置标志位,修改DI寄存器内容指向下一元素。 通常在通常在SCASSCAS指令之前加重复前缀指令之前加重复前缀REPNEREPNEREPNZREPNZ,用来从目标串中寻找关键字,操作一操作一直进行到直进行到ZFZF1 1或或(CX)(CX)0 0为止。为止。 例如,在某字符串中查找是否存在“$”字符。若存在,则将“$”字符所在地址送入BX寄存器中,否则将BX寄存器清“0”。程序如下: CLD CLD ; 清除方向标志清除方向标志DFDF MOV DIMOV DI,010

温馨提示

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

评论

0/150

提交评论