ImageVerifierCode 换一换
格式:DOCX , 页数:30 ,大小:39.22KB ,
资源ID:3650022      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3650022.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第4章 指令系统二.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第4章 指令系统二.docx

1、第4章 指令系统二四川警安职业学院标准教案纸课程名称计算机组成原理(第二十八讲)任课教师陈 平授课时间地点多媒体授课班级人数教学目标1. 掌握跨段知识2. 掌握8086/8088指令系统教学重点1. 跨段应用2. 8086/8088指令系统教学难点1. 数据传送指令2. 乘法指令3. 控制转移指令教学时数2节教学方法讲授法、演示法、实践操作法教学手段多媒体教学教学内容:第4章8086/8088寻址方式及指令系统(二)4.2 跨段及寻址综合举例4.2.1 跨段的有关问题8086的存储器是分段使用的,通常,若选用寄存器(能选用的寄存器有BX、BP、SI和DI)作间址寄存器、变址寄存器或基址寄存器,

2、即在采用寄存器间接寻址、变址寻址或基址加变址寻址时,只有BP出现在方括号之内,则操作数在当前堆栈段,此时,操作数的物理地址PA由堆栈段寄存器SS的内容左移4位与偏移地址EA相加;否则,操作数在当前数据段,此时,操作数的物理地址PA由数据段寄存器DS的内容左移4位与偏移地址EA相加形成。这是8086的具体约定、即默认状态。当要否定默认状态,到非约定段寻址操作数时,必须用跨段前缀指明操作数所在段的段寄存器名。汇编格式:段寄存器名:功能:冒号“:”之前的段寄存器指明了操作数所在段。例4.2.1: 有指令如下:(1) MOV AX, DS: BP (2) MOV BX, ES: BX(3) MOV C

3、X, SS: SI (4) MOV DX, SS: DI则,它们所对应的物理地址为:(1) PA=16D*(DS)+(BP) (2) PA=16D*(ES)+(BX)(3) PA=16D*(SS)+(SI) (4) PA=16D*(SS)+(DI)如没有段前缀(DS:、ES:、SS:),则它们所对应的默认的物理地址为:(1) PA=16D*(SS)+(BP) (2) PA=16D*(DS)+(BX)(3) PA=16D*(DS)+(SI) (4) PA=16D*(DS)+(DI)最后需要说明的是:无论是段默认状态,还是跨段情况,操作数的物理地址PA均由系统自动计算。所以,在实际应用中,当要访问

4、某段之中某一存储单元时,着重考虑的不是其物理地址的计算方法及结果,而是其类型及偏移地址的表示形式。因此,从本章之后,我们谈到的存储单元地址均是指偏移地址。4.2.2 寻址的综合举例例4.2.2:请回答如下程序执行到EXIT时,字节单元A、B、C、C+1、C+2中的内容各是什么?STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS DATA SEGMENT A DB 0 B DB 0 C DB 30,40,50 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX, DATA

5、MOV DS, AX MOV AL,C MOV A, AL MOV AL,C+1 MOV AL, C+2 MOV B, AL ADD C, 10 ADD C+1,20 ADD C+2,30 EXIT :MOV AH, 4CH INT 21H CODE ENDS END START说明:DB为数据定义伪指令。其使用格式为: 变量名 DB 表达式 功能:定义一个以变量名为首地址的字节数据存储区,所含数据存储单元的个数由其后表达式的个数决定,并为各数据存储单元提供一个由其对应表达式得出的初值。 图4-10 数据段中的数据 图4-11 程序运行到EXIT时,运 行结果 在主存中的存放形式示意图 在主存

6、中的存放形式示意图在本程序数据段中,三次利用伪指令DB定义了三个字节数据存储区,第一个首地址为变量A,它只包含一个字节单元,初值为0;第二个首地址为变量B,它只包含一个初值为0的字节单元;第三个首地址为变量C,包含三个字节单元,其初值分别为30、40、50。它们在主存中存放的形式如图4-10所示。当程序从START执行到EXIT时,各字节变量的内容和存放形式如图4-11所示。即(A)=70,(B)=90,(C)=40,(C+1)=60,(C+2)=804.3 8086/8088指令系统4.3.1 数据传送指令我们已经知道计算机是通过执行指令序列来解决问题的,因而每种计算机都有一组指令集提供给用

7、户使用,这组指令集就称为计算机的指令系统。目前,一般小型或微型计算机的指令系统可以包括几十种或百余种指令。我们已经知道,计算机只能识别二进制代码,所以机器指令是由二进制代码组成的。为便于人们使用而采用汇编语言来编写程序。汇编语言是一种符号语言,它的助记符来表示操作码,用符号或符号地址来表示操作数或操作数地址,它与机器语言是一一对应的。8086的指令系统可以分为6组:(1) 数据传送指令;(2) 串处理指令;(3) 算术指令;(4) 控制转移指令;(5) 逻辑指令;(6)处理机控制指令。下面分别加以说明。数据传送指令负责把数据、地址或立即数传送到寄存器或存储单元中。它可以分为四种,分别说明如下:

8、1.通用数据传送指令(1) MOV (Move)传送指令格式为:MOV DST,SRC执行操作:(DST) (SRC)其中DST表示目的操作数,SRC表示源操作数。MOV指令的机器语言可以有如下7种格式:1) MOV mem/reg1,mem/reg2当然,双操作数指令不允许两个操作数多使用寄存器,因而两个操作数中必须有一个是寄存器。这种方式不允许指定段寄存器。2) MOV reg, data当然,这种方式也不允许指定段寄存器。3) MOV ac, mem其中ac为累加器,D给出存储单元的偏移地址。4) MOV mem, ac5) MOV segreg, mem/reg其中reg指定段寄存器,

9、但不允许使用CS寄存器。此外,这条指令执行完后不影响中断,要等下一条指令执行完后才可能响应中断。6) MOV mem/reg, segreg7) MOV mem/reg, data这种方式的目的操作数只用存储器寻址方式而不用寄存器方式。以上七种方式说明MOV命令可以在CPU和存储器之间传送字或字节,它传送的信息可以从寄存器到寄存器,立即数到寄存器,立即数到存储单元,从存储单元到寄存器,从寄存器到存储单元,从寄存器或存储单元到除CS外的段寄存器(注意,立即数不能直接送段寄存器),从段寄存器到寄存器或存储单元。但是MOV指令的目的操作数不允许用立即数方式,也不允许用CS寄存器,而且除源操作数为立即

10、数的情况外,两个操作数中必须有一个是寄存器。也就是说,不允许用MOV指令在两个存储单元之间直接传送数据。此外,也不允许在两个段寄存器之间直接传送信息。还应该注意的是MOV指令不影响标志位。(2) PUSH(Pop onto the stack)进栈指令格式为: PUSH SRC执行操作:(SP)- (SP) - 2 (SP)+1,(SP)- (SRC)(3) POP(Pop from the stack)出栈指令格式为: POP DST执行操作:(DST)- (SP) + 1,(SP) (SP) - (SP) + 2这两条堆栈的进栈和出栈指令。堆栈是以“后进先出”方式工作的一个存储区,它必须存

11、在于堆栈段中,因而此段地址存放于SS寄存器中。它只有一个出入口,所以只有一个堆栈指针寄存器SP,SP的内容在任何时候都指向当前的栈顶,所以PUSH和POP指令都必须根据当前SP的内容来确定进栈或是出栈的存储单元,而且必须及时修改指针,以保证(SP)指向当前的栈顶。堆栈的存取必须以字为单位,所以PUSH和POP指令只能作字操作。它们可以使用除立即数以外的其他寻址方式。指令也可以指定段寄存器作为操作数,但POP指令不允许用CS寄存器。这两条堆栈指令不影响标志位。例 4.3.3: PUSH AX堆栈在计算机工作中起着重要的作用,如果在程序中要用到某些寄存器,但它的内容却在将来还有用,这时就可以用堆栈

12、把它们保下来,然后到必要时再恢复其原来的内容。例如:PUSH AXPUSH BX 其间程序用到AX和BX寄存器 POP BXPOP AX堆栈在子程序结构的程序及中断程序中也很有用,这将在以后加以说明。(4) XCHG(Exchange) 交换指令格式为: XCHG OPR1,OPR2执行操作:(OPR1) (OPR2)其中OPR表示操作数。该指令的两个操作数中必须有一个在寄存器中,因而它可以在寄存器之间或者在寄存器和存储器之间交换信息,但不允许使用段寄存器。指令允许字或字节操作,且不影响标志位。2.累加器专用传送指令这组指令只限于使用累加器AX或AL传送信息,不影响标志位。(1) IN(Inp

13、ut)输入指令长格式为: IN AL,PORT (字节操作) IN AX,PORT (字操作)执行的操作:(AL)- (PORT) (字节操作) (AX)- (PORT+1,PORT) (字操作)短格式为: IN AL,DX (字节操作) IN AX,DX (字操作)执行的操作:(AL)- (DX) (字节操作) (AX)- (DX)+1,(DX) (字操作)(2)OUT(Output)输出指令长格式为: OUT PORT,AL (字节操作) OUT PORT,AX (字操作)执行的操作:(POTR)- AL (字节操作) (PORT+1,PORT)- (AX) (字操作)短格式为: OUT

14、DX,AL (字节操作) OUT DX,AX (字操作)执行的操作:(DX)- AL (字节操作) (DX)+1,(DX)- (AX) (字操作)在IBM PC机里,所有I/O端口与CPU之间的通信都由IN和OUT指令来完成。其中IN完成从I/O到CPU的信息传送,而OUT完成从CPU到I/O的信息传送。CPU只能用累加器(AL或AX)接收或发送信息。外部设备最多可有65536个I/O端口,端口号(即外设的端口地址)为0000FFFFH。其中前256个端口(0FFH)可以直接在指令中指定,这就是长格式中的PORT,此时机器指令用二个字节表示,第二个字节就是端口号。所以用长格式时可以在指令中直接

15、指定端口号,但只限于外设的前256个端口。当端口号256时,只能使用短格式,此时,必须先把端口号放到DX寄存器中(端口号可以从0000FFFFH),然后再用IN或OUT指令来传送信息,必须注意。这里的端口号或DX的内容均为地址,而传送的是端口中的信息,而且在用短格式时DX的内容就是端口号本身,不需要由任何段寄存器来修改它的值。输入,输出指令不影响标志位。(3)XLAT(Translate)换码指令格式为: XLAT OPR 或 XLAT执行的操作:(AL)- (BX)+(AL)3.地址传送指令(1)LEA(Load effective addres)有效地址送寄存器指令格式为: LEA REG

16、,SRC执行的操作: (REG)- SRC指令把源操作数的有效地址送到指定的寄存器中。(2)LDS(Load DS with Pointer)指针送寄存器和DS指令格式为: LDS REG,SRC执行的操作:(REG)- (SRC) (DS)- (SRC+2)把源操作数指定的4个相继字节送到由指令指定的寄存器及DS寄存器中。该指令常指定SI寄存器。(3)LES(Load ES with Pointer)指针送寄存器和ES指令格式为: LES REG,SRC执行的操作:(REG)-(SRC) (ES)-(SRC+2)把源操作数指定的4个相继字节送到由指令指定寄存器及ES寄存器中。该指令常指定DI

17、寄存器。以上三条指令指定的寄存器不能使用段寄存器,且源操作数必须使用除立即数方式及寄存器方式以外的其它寻址方式。这些指令不影响标志位。本组指令把变量的偏移地址(LEA)或段地址和偏移地址(LDS和LES)送给寄存器,以提供访问变量的工具。例4.3.7: LEA BX,BX+SI+0F62H 如指令执行前:(BX)=0400H,(SI)=003CH则指令执行后:(BX)=0400+003C+0F62=139EH必须注意。在这里BX 寄存器得到的是偏移地址而不是该存储单元的内容4.3.2 算术运算指令1.加法指令(1) ADD(add)加法格式:ADD DST,SRC执行的操作:(DST)-(SR

18、C)+(DST)(2) ADC(add with carry)带进位加法格式:ADC DST,SRC执行的操作:(DST)- (SRC)+(DST)+CF其中CF为进位位的值(3) INC(increment)加1格式:INC OPR 执行的操作: (OPR)- (OPR)+12.减法指令 (1) SUB(subtract)减法 格式:SUB DST,SRC 执行的操作:(DST) (DST)-(SRC) (2) SBB(subtract with borrow)带借位减法 格式:SBB DST,SRC 执行的操作:(DST) (DST)-(SRC)-CF (3) DEC (decrement

19、) 减1 格式:DEC OPR 执行的操作:(OPR) (OPR)-1 (4)NEG (negate)求补 格式:NEG OPR 执行的操作:(OPR) -(OPR) (5) CMP(compare)比较 格式:CMP OPR1,OPR2 执行的操作:(OPR1)-(OPR2)3. 乘法指令 (1) MUL(Unsigned Multiple)无符号数乘法指令 格式:MUL SRC 执行的操作: 字节操作数:(AX) (AL)(SRC) 字操作数:(DX,AX) (AX) (SRC) (2) IMUL(Signed Multiple)带符号数乘法指令 格式:IMUL SRC 执行的操作:与MU

20、L相同,但必须是带符号数,而MUL是无符号数。在乘法指令里,目的操作数必须是累加器,字运算为AX,字节运算为AL。两个8位数相乘得到的是16位乘积存放在AX中,两个16位数相乘得到的是32位乘积,存放在DX,AX中,其中DX存放高位字,AX存放低位字。指令中的源操作数 可以使用除立即数方式以外的任何一种寻址方式。乘法指令对除CF和OF以外的条件码位无定义(注意:无定义的意义和不影响不同,无定义是指指令执行后这些条件码位的状态不定,而不影响则是指该指令的结果并不影响条件码,因而条件码应保持原状态不变。),对于MUL指令,如果乘积的高一半为0,即字节操作的(AH)或字操作的(DX)为0,则CF和O

21、F均为0;否则(即字节操作时的(AH) 0或字操作时的(DX)0)CF和OF均为1。这样的条件码设置可以检查字节相乘的结果是字节还是字,或者可以检查字相乘的结果是字还是双字。对于IMUL指令,如果乘积的高一半是低一半的符号扩展则CF和OF均为0,否则就均为1。 例4.3.11: 如(AL)=0B4H,(BL)=11H求执行指令 IMUL BL和MUL BL后的乘积值。 (AL)=0B4H为无符号数的180D,带符号数的-76D,(BL)=11H为无符号数的17D,执行IMUL BL的结果为: (AX)=0FAF4H=-1292D;CF=OF=1 执行的MUL BL的结果为: (AX)=0BF4

22、H=3060D;CF=OF=14.除法指令 (1) DIV (Unsigned divide) 无符号数除法指令 格式为: DIV SRC 执行的操作: 1) 字节操作:16位被除数在AX中,8位除数为源操作数,结果的8位商在AL中,8位余数在AH中。表示为: (AL) (AX)/(SRC)的商; (AH) (AX)/(SRC)的余数 2) 字操作:32位被除数在DX,AX中,其中DX为高位字;16位除数为源操作数,结果的16位商在AX中,16位余数在DX中。表示为: (AX) (DX,AX)/(SRC)的商; (DX) (DX,AX)/(SRC)的余数 商和余数均为无符号数。 (2) IDI

23、V (Signed divide)带符号除法指令 格式为:IDIV SRC执行的操作:与DIV相同,但操作数必须是带符号数,商和余数也均为带符号数,且余数的符号和被除数的符号相同。除法指令的寻址方式和乘法指令相同。其目的操作数必须存放在AX或DX,AX中。而其源操作数可以用除立即数以外的任何一种寻址方式。除法指令对所有条件码位均无定义。由于除法指令的字节操作要求被除数为16位,字操作要求被除数为32位,因而往往需要用符号扩展的方法取得除法指令所需要的被除数格式,为此我们介绍两条符号扩展指令如下:(3) CBW(Convert byte to word)字节转换为字指令 格式为:CWB 执行的操

24、作:AL的内容符号扩展到AH。即如(AL)的最高有效位为0,则(AH)=00;如(AL)的最高有效位为1,则(AH)=0FFH。 (4) CWD(Convert word to double word)字转换为字节指令 格式为:CWD执行的操作:AX的内容符号扩展到DX。即如(AX)的最高有效位为0,则(DX)=0000;如(AX)的最高有效位为1,则(DX)=0FFFFH。这两条指令都不影响条件码。 5. 十进制调整指令前面提到的所有算术运算指令都是二进制数的运算指令,但是人们最常用的是十进制数,这样,当用计算机进行计算时,必须先把十进制数转换成二进制数,然后再进行二进制数的计算,计算结果又

25、转换成十进制数输出。为了便于十进制数的计算,计算机还提供了一组十进制数调整指令,这组指令在二进制计算的基础上,给予十进制调整,可以直接得到十进制的结果。在说明这组指令之前,我们首先介绍计算机中常用的表示十进制数的BCD码。在IBM PC机里,表示十进制数的BCD码可以用压缩的BCD码和非压缩的BCD码两种格式来表示。压缩的BCD码(packed BCD format)用4位二进制数表示一个十进制数位,整个十进制数形式为一个顺序的以4位为一组的数串。例如,9503d应表示为:1001 0101 0000 0010。非压缩的BCD码(unpacked BCD format)则以8位为一组表示一个十

26、进制数位,8位中的低4位表示8421的BCD 码,而高4位则没有意义。例如,9502d则表示为:uuuu1001 uuuu0101 uuuu0000 uuuu0010。可以看出数字的ASCII码是一种非压缩的BCD码。因为数字的ACSII的高4位值为0011而低4位是以8421码表示的十进制数位,这符合非压缩BCD码高4位无意义的规定。IBM PC机的十进制调整指令分为两组,下面分别加以说明: (1) 压缩的BCD码调整指令 1) DAA(decimal adjust for addifion)加法的十进制调整指令 执行的操作:(AL)- 把AL中的和调整到压缩的BCD码格式,这条指令之前必须

27、执行ADD或ADC指令,加法指令必须把两个压缩的BCD码相加,并把结果保存AL寄存器中。本指令的调整方法是:如果AF标志(辅助进位位)为1,或者AL寄存器的低4位是十六进制的AF,则 AL寄存器内容加06H,且将AF置1;如果CF标志为1,或者AL寄存器的高4位是十六进制的AF,则AL寄存器内容加60H,并将CF位置1。DAA指令对标志无定义,但影响所有其它条件标志。 2) DAS(decimal adjust for subtraction)减法的十进制调整指令执行的操作:(AL)把AL中的差调整到压缩的BCD格式。这条指令之前必须执行SUB和SBB指令,减法指令必须把两个BCD码相减,并把

28、结果存放在AL寄存器中。本指令的调整方法是:如果AF标志为1,或者AL寄存器的低4位是十六进制的AF,则使AL寄存器的内容减去06H,且将AF置1;如果CF标志为1,或者AL寄存器的高4位是十六进制的AF,则AL寄存器的内容减去60H,并将CF位置1。DAS指令对OF标志无定义,但影响所有其它条件标志。 (2) 非压缩的BCD码调整指令1) AAA(ASCII adjust for addition)加法的ASCII调整指令2) AAS(ASCII adjust for subtraction)减法的ASCII调整指令3) AAM(ASCII adjust for multiplication)乘法的ASCII调整指令4) AAD(ASCII adjust for division)除法的ASCII调整指令这里我们不再详细叙述。4.3.3 逻辑指令1逻辑运算指令 逻辑运算指令可以对字或字节执行逻辑运算。由于逻辑运算是按位操作的,因此一般说来,其操作数应该是位串而不是数。 (1) AND(and)逻辑与指令 格式:OR DST,SRC 执行的操作:(DST)(DST)(SRC)

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1