微处理器指令系统_第1页
微处理器指令系统_第2页
微处理器指令系统_第3页
微处理器指令系统_第4页
微处理器指令系统_第5页
已阅读5页,还剩110页未读 继续免费阅读

下载本文档

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

文档简介

第3章从8088/8086的指令格式入手,论述:立即数寻址方式寄存器寻址方式存储器寻址方式进而熟悉8088/8086汇编语言指令格式,尤其是其中操作数的表达方法为展开8088/8086指令系统做好准备第三章指令系统-教学重点

指令:是计算机用以控制各部件协调动作的命令;

指令系统:CPU可执行的指令的集合;机器指令:是CPU仅能识别的指令的二进制代码,也称机器码第一节指令的基本格式操作码说明计算机要执行哪种操作,如传送、运算、移位、跳转等操作,它是指令中不可缺少的组成部分操作数是指令执行的参与者,即各种操作的对象有些指令不需要操作数,通常的指令都有一个或两个操作数,也有个别指令有3个甚至4个操作数操作码操作数指令由操作码和操作数两部分组成8086/8088符号指令的书写格式标号后面必须跟冒号,它可缺省。指令是指令功能的代表符号,它是指令语句的关键字,不可缺省。操作数是参加本操作的数据。注释是必须以“;”开头的说明部分,可以用英文或中文,注释允许缺省。[标号:]指令助记符操作数[;注释]其中带[]号的标号和注释可以缺省第一节操作数类型8086/8088系统中的操作数根据存放的位置不同,可以分为三类:1.立即数操作数作为指令代码的一部分出现在指令中。通常作为源操作数使用。可以是各进制数或一个可求出确定值的表达式。其寻址方式为立即数寻址。2.寄存器操作数是把操作数存放在CPU内部的寄存器中,用来参加运算或存放结果。书写形式就是寄存器的名称。其寻址方式为寄存器寻址。3.存储器操作数这种操作数存放在内存储器中。CPU对存储器操作数进行操作时,指令中提供操作数在存储器中存放的地址。其寻址方式为存储器寻址。4.I/O端口操作数这种操作数放在I/O接口的端口中,CPU通过I/O接口与输入输出设备交换信息。其寻址方式为I/O寻址。第一节操作数类型第二节操作数的寻址方式指令系统设计了多种操作数的来源寻找操作数地址的过程称为寻址寻找操作数存放地址的各种方式叫做寻址方式理解操作数的寻址方式是理解指令功能的前提操作数采取哪一种寻址方式一方面,会影响处理器执行指令的速度和效率另一方面,对程序设计也很重要注意:一条指令一般都有源操作数和目的操作数,要说明一条指令为何种寻址方式,应就源操作数和目的操作数分别加以说明。MOV指令1.立即数寻址方式指令中的操作数直接存放在机器代码中,紧跟在操作码之后(操作数作为指令的一部分存放在操作码之后的主存单元中)这种操作数被称为立即数imm可以是8位数值i8(00H~FFH)也可以是16位数值i16(0000H~FFFFH)立即数寻址方式常用来给寄存器和存储单元赋值,多以常量形式出现演示MOVAX,0102H ;AX←0102HMOVAL,80H;AL←80H特点及注意事项执行速度快:操作数是直接从指令中取得立即数只能作源操作数,不能作目的操作数主要用来给寄存器或存储器赋初值8位立即数可装入8位或16位寄存器,16位立即数只能装入16位寄存器。例如:MOVAL,14H和MOVAX,14H合法,而MOVAL,1234H或MOVBL,123H是错误的。2.寄存器寻址方式操作数存放在CPU的内部寄存器reg中:8位寄存器r8:AH、AL、BH、BL、CH、CL、DH、DL16位寄存器r16:AX、BX、CX、DX、SI、DI、BP、SP4个段寄存器seg:CS、DS、SS、ES寄存器名表示其内容(操作数)演示MOVAX,BX;AX←BX2.寄存器寻址方式执行速度快:因操作数就在CPU内部源操作数和目的操作数都可使用寄存器寻址注意:源操作数的长度必须与目的操作数一致,否则会出错。例如:MOVCX,AH

×

尽管CX寄存器放得下AH的内容,但汇编程序不知道将它放到CH还是CL。特点3.I/O端口寻址(输入输出指令中讲解)操作数存放在I/O端口中直接端口寻址

INAL,50H;将50H端口的字节数输入到ALINAX,60H;将60H和61H两个相邻端口的16位数据输入到AXDX寄存器间接端口寻址

MOVDX,383HOUTDX,ALMOVDX,380HINAX,DX4.存储器寻址方式一条指令中,最多只能有一个存储器操作数,或者是源操作数,或者是目的操作数存储器寻址方式共有24种,按EA的计算方法不同又可分为以下几种:1、直接寻址方式2、寄存器间接寻址方式3、寄存器相对寻址方式4、基址变址寻址方式5、相对基址变址寻址方式存储器寻址的指令,其操作数总是在代码段之外的数据段、堆栈段或附加段的存储器中,指令给出的是操作数寻址信息(逻辑地址)16第3章:(1)直接寻址方式直接寻址方式的有效地址在指令中直接给出默认的段地址在DS段寄存器,可使用段超越前缀改变,因此,段地址默认的情况下,物理地址PA=DS×10H+EA指令中有效地址可以用数值或符号表示,数值必须加一个方括号,以便与立即数相区别演示MOVAX,[2000H] ;AX←DS:[2000H]MOVAX,ES:[2000H] ;AX←ES:[2000H]第3章:(1)直接寻址方式如果要对代码段、堆栈段或附加段寄存器所指出的存储区进行直接寻址,应在指令中加段超越前缀。例如:数据若存放在附加段中,则应在有效地址前加“ES:”,这里的冒号称为修改属性运算符,计算物理地址时要用ES作段地址,而不再是默认值DS。MOVAX,ES:[2000H] ;该指令的源操作数物理地址:PA=ES×10H+2000H第3章:(1)直接寻址方式在汇编语言中还允许用符号地址代替数值地址,实际上就是给存储单元取一个名字,这样,如果要与这些单元打交道,只要使用其名字就可以了,而不必记住具体数值是多少。MOVAX,DATA1第3章:(2)寄存器间接寻址方式①

操作数放在存储器中,操作数的有效地址EA存放在指令指明的寄存器中。寄存器可以是BX、SI、DI、BP其中之一。指令中指定的寄存器是BX、DI或SI,则操作数在当前DS数据段中,其操作数的物理地址是:

PA=DS×10H+演示MOVAX,[BX] ;AX←DS:[BX]BXSIDI第3章:(2)寄存器间接寻址方式②

指令中若指明BP为间址寄存器,则操作数在堆栈段中。此时,用SS寄存器内容作段地址,操作数的实际地址PA=SS×10H+BPMOVAX,[BP] ;AX←SS:[BP]若在指令中规定是段超越的,则BP的内容也可以与其它的段寄存器相加,形成操作数地址。MOVAX,DS:[BP] ;AX←DS:[BP]演示第3章:(3)寄存器相对寻址方式指定BX,BP,SI,DI的内容进行的是间接寻址。但是,和寄存器间接寻址方式不同的是:指令中还要指定一个8位或16位的位移量DISP,操作数的有效地址EA则等于间址寄存器内容和位移量之和,结果按16位归算。寄存器间接寻址寄存器相对寻址第3章:(3)寄存器相对寻址方式对于寄存器为BX,SI,DI的情况,用段寄存器DS的内容作段首址;而对于寄存器BP,则使用段寄存器SS的内容作段首址。操作数的实际地址为:第3章:(3)寄存器相对寻址方式演示MOVAX,[SI+06H] ;AX←DS:[SI+06H]MOVAX,06H[SI] ;AX←DS:[SI+06H]采用寄存器相对寻址的指令,也可使用段超越前缀。第3章:(4)基址变址寻址方式通常将BX和BP看作基址寄存器,将SI、DI看作变址寄存器。在基址变址寻址方式中存储器操作数的有效地址EA由指令指定的一个基址寄存器和一个变址寄存器的内容之和确定。第3章:(4)基址变址寻址方式基址在BX,段寄存器使用DS;基址在BP中,段寄存器使用SS。第3章:(4)基址变址寻址方式演示MOVAX,[BX+SI] ;AX←DS:[BX+SI]MOVAX,[BX][SI] ;AX←DS:[BX+SI]采用基址变址寻址的指令,也可使用段超越前缀PA计算公式中,BX可与SI或DI组合,BP也可与SI或DI组合,但BX不可与BP组合第3章:(5)相对基址变址寻址方式操作数的有效地址EA是由指令指定的一个基址寄存器和一个变址寄存器的内容再加上8位或16位位移量之和。第3章:(5)相对基址变址寻址方式对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS;可用段超越前缀改变。演示MOVAX,[BX+DI+6] ;AX←DS:[BX+DI+6]MOVAX,6[BX+DI]MOVAX,6[BX][DI]第3章:存储器寻址方式中的变量变量指示内存中的数据,变量名具有地址属性。存储器寻找方式中经常采用变量形式变量的定义WVARDW1234H;定义16位变量WVAR,具有初值1234H;假设其偏移地址为10H单独引用变量名是直接寻址方式MOVAX,WVAR;指令功能:AX=1234H;等同于MOVAX,[0010H]第3章:相对寻址方式中的位移量在寄存器相对和相对基址加变址寻址方式中,其位移量不仅可用常量表示,也可用符号表示这个符号可以是变量名,例如WVAR变量,而且支持多种表达形式MOVAX,[DI+WVAR]

;等同于MOVAX,WVAR[DI]MOVAX,[BX+SI+WVAR]

;等同于MOVAX,WVAR[BX+SI]

;等同于MOVAX,WVAR[BX][SI]对寻址方式作一总结对寻址方式作一总结对寻址方式作一总结对寻址方式作一总结例题:分别指出下列指令中源操作数和目的操作数的寻址方式。若是存储器寻址,试用表达式表示出EA=?,PA=?(1)MOVSI,2100H(2)MOV[SI],AX(3)MOVAX,ES:[BX](4)MOVAX,[BX+SI+20H](5)MOVCX,DISP[BX]例题2:一些寄存器的内容和一些存储单元的内容如下图所示。试指出下列各条指令执行后,AX中的内容。(1)MOVAX,2010H(2)MOVAX,[1200H](3)MOVAX,1100H[BX](4)MOVAX,1100H[BX+SI]0100H0002H3000HBXSIDSCPU12H34H56H78H︰

2AH4CHB7H65H31100H31101H31102H31103H31200H31201H31202H31203HM1.以下指令中,设执行前:DS=3000H,BX=0600H,SI=00B0H,ES=2000H,SS=1000H,CS=3500H,BP=0050H。(1)执行指令MOVAX,BX后,AX=()H,BX=()H,该指令的源操作数是()寻址方式。(2)执行指令ADDAX,[BX][SI],其源操作数物理地址为()H,源操作数是()寻址方式。复习题2.80X86微处理器的寻址方式有_______、_____、________和________四种。3.根据以下要求用一条指令写出相应的操作:(1)用寄存器BX间接寻址2000H内存单元,并将2000H单元的内容传送至AX寄存器中。(2)用寄存器BX和SI的基址变址寻址方式把存储器中的一个字传送至AX寄存器中。

MOV指令的功能立即数寻址方式寄存器寻址方式直接寻址方式间接寻址方式相对寻址方式基址变址寻址方式相对基址变址寻址方式总结一、指令的基本格式二、寻址方式作业习题3-1、习题3-31.寄存器间接寻址方式中,操作数在()中。

8086/8088CPU指令系统的操作数的来源有()、()、()、()。3.

习题下列三条指令语句中,()是错误的。A.MOVAX,[SI][DI]B.MOVAX,200HC.MOVAX,ARRAY[SI+2]

4.

若(CS)=5200H时,物理地址为5A238H,那么(CS)变成7800H时,物理地址为多少?

5.设(BX)=637DH,(SI)=2A9BH,位移量=0C237H,(DS)=3100H,求下列寻址方式产生的有效地址和物理地址:(1)直接寻址;(2)用BX的寄存器间接寻址;(3)用BX的寄存器相对寻址;

(4)用BX和SI的基址变址寻址;(5)用BX和SI的基址变址且相对寻址7.将左边的词汇和右边的说明联系起来,括号内填入所选的A、B、C、D等。(1)EU()A总线接口部件,实现执行部件所需要的所有总线操作(2)BIU()B唯一代表存储器空间中的每个字节单元的地址(3)堆栈()C保存当前栈顶偏移地址的寄存器(4)SP()D以后进先出方式工作的存储空间(5)物理地址()E执行部件,由算术逻辑单元(ALU)和寄存器等组成第三节8086/8088指令系统8086/8088指令系统包含133条基本指令。这些指令与寻址方式组合,再加上不同的数据形式——有的为字处理,有的为字节处理,可构成上千种指令。这些指令按功能可分为六类:①数据传送类②算术运算类③逻辑运算与移位类④串操作类⑤控制转移类⑥处理器控制类第三节8086/8088指令系统实现CPU内部寄存器之间、CPU和存储器之间以及CPU和I/O端口之间的数据传送。3.1数据传送类指令功能特点含两个操作数;除SAHF和POPF指令外,数据传送指令不影响标志寄存器的内容重点掌握MOVXCHGPUSHPOPLEA1.通用数据传送指令提供方便灵活的通用传送操作有4条指令MOVPUSHPOPXCHGMOVXCHGPUSHPOP(1)传送指令MOV(move)指令格式:MOVdst,src;src→dst把一个字节或字的操作数从源地址传送至目的地址MOVreg/mem,imm;立即数送寄存器或主存MOVreg/mem/seg,reg;寄存器送(段)寄存器或主存MOVreg/seg,mem;主存送(段)寄存器MOVreg/mem,seg;段寄存器送寄存器或主存演示MOV指令--立即数传送MOVCL,’A’ ;CL←41H,字节传送MOVDX,0FFH

;DX←00FFH,字传送MOVSI,200H

;SI←0200H,字传送MOVBVAR,0AH

;字节传送;假设BVAR是一个字节变量,定义如下:BVARDB0MOVWVAR,0BH

;字传送;假设WVAR是一个字变量,定义如下:WVARDW0明确指令是字节操作还是字操作以字母开头的常数要有前导0MOV指令--寄存器传送MOVAH,AL ;AH←AL,字节传送MOVBVAR,CH ;BVAR←CH,字节传送MOVAX,BX ;AX←BX,字传送MOVDS,AX ;DS←AX,字传送MOV[BX],AL ;[BX]←AL,字节传送

寄存器具有明确的字节和字类型MOV指令--存储器传送MOVAL,[BX] ;AL←DS:[BX]MOVDX,[BP] ;DX←SS:[BP+0]MOVDX,[BP+4] ;DX←SS:[BP+4]MOVES,[SI] ;ES←DS:[SI]

不存在存储器向存储器的传送指令MOV指令--段寄存器传送MOV[SI],DSMOVAX,DS

;AX←DSMOVES,AX ;ES←AX←DS

对段寄存器的操作不灵活例1:请指出下列指令中的错误。(1)MOVAH,400H(2)MOVDS,2000H(3)MOV[BX],[SI]MOV指令传送功能图解MOV指令也并非任意传送!立即数段寄存器CSDSESSS通用寄存器AXBXCXDXBPSPSIDI存储器

非法指令的主要现象:两个操作数的类型不一致无法确定是字节量还是字量操作两个操作数都是存储器段寄存器之间直接传送数据立即数作为目的操作数CS和IP作为目的操作数向段寄存器送立即数非法指令--两个操作数类型不一致在绝大多数双操作数指令中,目的操作数和源操作数必须具有一致的数据类型,或者同为字量,或者同为字节量,否则为非法指令

MOVAL,050AH ;非法指令,

MOVSI,DL ;非法指令,

修正:;MOVAX,050AH

修正: ;MOVDH,0

;MOVSI,DX非法指令--无法确定是字节量还是字量操作当无法通过任一个操作数确定是何种操作类型时,需要利用汇编语言的操作符显式指明

MOV[BX+SI],255 ;非法指令,修正: ;MOVBYTEPTR[BX+SI],255

;BYTEPTR说明是字节操作 ;MOVWORDPTR[BX+SI],255

;WORDPTR说明是字操作非法指令--两个操作数都是存储器8086指令系统除串操作指令外,不允许两个操作数都是存储单元(存储器操作数)

MOVBUF2,BUF1 ;非法指令,修正:

;假设BUF2和BUF1是两个字变量

;MOVAX,BUF1

;MOVBUF2,AX

;假设BUF2和BUF1是两个字节变量

;MOVAL,BUF1

;MOVBUF2,AL非法指令--段寄存器的操作有一些限制8086指令系统中,能直接对段寄存器操作的指令只有MOV等个别传送指令,并且不灵活

MOVDS,ES ;非法指令,修正: ;MOVAX,ES

;MOVDS,AX MOVDS,100H ;非法指令,修正: ;MOVAX,100H

;MOVDS,AX

MOVCS,[SI] ;非法指令

一般数据传送指令例子判断下列指令的正确性:MOVAL,BXMOVAX,[SI]05HMOV[BX][BP],BXMOVDS,1000HMOVDX,09HMOV[1200],[SI]作业讲评:P1123.(DS)=2000H,(BX)=0100H,(AX)=1200H,(SI)=0002H,(20100H)=12H,(20101H)=34H,(20102H)=56H,(20103H)=78H,

(21200H)=2AH,(21201H)=4CH,(21202H)=0B7H,(21203H)=65H.

试说明下列各指令单独执行后相关寄存器或存储单元的内容。(1)MOVAX,1800H(2)MOVAX,BX(3)MOVBX,[1200H](4)MOVDX,1100[BX](5)MOV[BX][SI],AL(6)MOVAX,1100[BX][SI](2)交换指令XCHG(exchange)指令格式:XCHGdst,src;dstsrc实现CPU内部寄存器之间或内部寄存器与存储器之间的内容交换,不影响标志寄存器。XCHGreg,reg/mem;regreg/mem演示例:数据交换MOVAX,1199H ;AX=1199HXCHGAH,AL

;等同于XCHGAL,AHMOVWVAR,5566H ;WVAR是一个字量变量XCHGAX,WVAR

;等同于XCHGWVAR,AX

XCHGAL,BYTEPTRWVAR+1

;“BYTEPTRWVAR+1”强制为字节量,只取高字节与AL类型交换,否则数据类型不匹配;AX=9911H;AX=5566H,WVAR=9911H;AX=5599H,WVAR=6611H使用XCHG指令时应注意:dst和src不能同时为存储器操作数;任一个操作数都不能使用段寄存器和IP,也不能使用立即数。堆栈的引入以三层子程序嵌套为例,逐级进入子程序时,A、B、C三点都有断点和现场需要保护,顺序为A→B→C;当子程序sub3执行结束,逐级返回时,最后被保护的C点数据应最先恢复,最先保护的A点数据应最后恢复。为此,通常在内存中开辟一段区域,结合软硬件技术,使其具有保护数据和后进先出的功能。ABCmainsub1sub2sub3(3)堆栈操作指令堆栈以“后进先出”或“先进后出”的原则存取信息存取地址由一个专门的地址寄存器SP来管理堆栈段段基址由SS提供,偏移地址由SP提供栈顶:堆栈指针始终指向堆栈中最后存入信息的那个单元,称该单元为栈顶。栈底:在信息的存与取的过程中,栈顶是不断移动的,也称它为堆栈区的动端,而堆栈区的另端则是固定不变的,这端我们又称其为栈底。

栈底0010H00FFH00FEH00FDHSP0000H初始化堆栈:堆栈只有两种基本操作:进栈和出栈,对应两条指令PUSH和POP进栈指令PUSH指令格式:PUSHsrcSP-1→SP,srcH→(SP),SP-1→SP,srcL→(SP)该指令不影响标志寄存器。PUSHr16/m16/seg

;SP←SP-2

;SS:[SP]←r16/m16/seg演示例如:PUSHAXPUSH[2000H] PUSHCSMOVSS,1050HMOVSP,000EHPUSHAX(设AX=1234H)PUSHBX(设BX=5CF8H)例题:出栈指令POP指令格式:POPdst(SP)→dstL,SP+1→SP,(SP)→dstH,SP+1→SP该指令不影响标志寄存器。POPr16/m16/seg

;r16/m16/seg←SS:[SP]

;SP←SP+2POPBXPOP[2000H]POPDS演示堆栈操作注意事项:堆栈操作的单位是字,进栈和出栈只针对字量字量数据从栈顶压入和弹出时,都是低地址字节送低字节,高地址字节送高字节CS寄存器可进栈,但不能随意弹出一个数据到CS堆栈容量有限,因此进栈和出栈要成对出现,否则将有数据残留在堆栈中,时间一长,堆栈会满的!进栈和出栈指令用于程序保存或恢复数据或中断时保护现场和恢复现场。输入/输出(I/O)指令执行输入指令时,CPU可以从一个8位端口读入1个字节到AL中,也可以从两个连续的8位端口读1个字到AX中。例:INAL,50H;INAX,70H将50H端口的字节读入AL将70H、71H两端口的值读入AX2.输入/输出指令(累加器专用传送指令)2.输入/输出指令(累加器专用传送指令)(1)输入指令INAL,PORT;将port端口字节数据输入到ALINAX,PORT;将port和port+1两端口的内容输入到AX,其中port的内容输入到AL,port+1的内容输入到AHINAL,DX;从DX所指的端口中输入一字节到ALINAX,DX;从DX和DX+1所指的两个端口输一个字到AX,低地址端口的值输到AL,高地址端口的值输到AH直接端口寻址DX寄存器间接端口寻址I/O寻址(2)输出指令OUTPORT,AL;将AL中的一个字节数据输出到PORT端口OUTPORT,AX;将AX中的字数据输出到PORT和PORT+1两端口OUTDX,AL;将AL中的字节输出到DX所指的端口OUTDX,AX;将AL中低位字节输出到DX所指的端口,同时将AH中的高位字节输出到DX+1所指的端口例:从端口2F0H输入数据的程序段为:MOVDX,02F0HINAX,DX8086的地址——目标传送指令是用来对寻址机构进行控制的。此类指令传送到16位目标寄存器中的是存储器操作数的地址,而不是它的内容。3.地址——目标传送指令这类指令有3条:LEALDSLES将存储器操作数的有效地址送至指定的16位通用寄存器(1)有效地址送寄存器(LEA)指令LEAr16,src;src的EA→r16例:

MOVBX,400H MOVSI,3CH LEABX,[BX+SI+0F62H]

;BX←400H+3CH+0F62H=139EH例:地址传送与内容传送WVARDW4142H ;假设偏移地址为04H…MOVAX,WVAR

;内容传送:AX=4142HLEASI,WVAR

;地址传送:SI=0004H;等同于LEASI,[0004H]MOVCX,[SI] ;内容传送:CX=4142HMOVDI,OFFSETWVAR

;=MOVDI,0004H

;利用操作符OFFSET获取变量的有效地址MOVDX,[DI] ;内容传送:DX=4142H该指令完成一个32位地址指针的传送。地址指针包括段地址和偏移量部分。指令把源操作数src指定的4个字节地址指针传送到两个目标寄存器。(2)数据段指针送寄存器LDS指令LDSr16,src;其中,地址指针的前2个字节(低地址中的字)传到某一寄存器r16(通常为SI),后2个字节(高地址中的字)传到DS中。例:LDSSI,[2100]在指令执行前,设(DS)=3000H,在DS段中,有效地址EA为2100~2103H的4个字节,其中存放着一个地址指针,如图所示,则指令执行后,SI=0140H,DS=2000H该指令和LDSr16,src功能类似,不同的只是用ES代替DS,这时常指定DI作寄存器r16。(3)附加段指针送寄存器LES指令LESr16,src;其中,地址指针的前2个字节传到某一寄存器R16中,后2个字节传到ES中。使用LDS和LES指令时应注意:R16不能使用段寄存器Src一定是存储器操作数,其寻址方式可以是以前所学存储器寻址中的一种

通过这些指令可以读出当前标志寄存器中各状态位的内容,也可以对各状态位设置新的值。这类指令有4条。源操作数和目的操作数都隐含在操作码中。4.标志传送指令这类指令有4条:LAHFSAHFPUSHFPOPF(1)读取标志指令(LAHF)LAHF;FL→AH,标志寄存器低8位送AH1514131211109876543210

OFDFIFTFSFZF

AF

PF

CFD7D6D4D2D0AH(2)设置标志指令(SAHF)SAHF;AH→FL,AH的内容送标志寄存器低8位1514131211109876543210

OFDFIFTFSFZF

AF

PF

CFD7D6D4D2D0AH(3)标志寄存器的入栈指令(PUSHF)和出栈指令(POPF)PUSHF;标志寄存器的内容入栈同时修改堆栈指针:(SP-2)→SP。POPF;将堆栈顶部的一个字弹出到标志寄存器,同时修改堆栈指针:(SP+2)→SP。这两条指令分别可以用作在中断服务程序和子程序的应用中,保存主程序的标志和恢复主程序的标志。MOV指令的功能XCHG指令的功能XLAT指令的功能PUSH指令的功能POP指令的功能LDS指令DS=3000H01H00H20H40HEA=2100H32100HSIDS总结一、数据传送类指令通用传送指令(MOV、PUSH、POP、XCHG)累加器专用传送指令(IN、OUT)地址——目标传送指令(LEA、LDS、LES)习题1.指出下列指令中的错误,并改正。MOVBL,30A0H(2)MOV0010H,AL(3)XCHGAL,BX(4)MOV[AX],3456H(5)PUSHAL(6)POPCS(7)MOVDS,1000H(8)MOV[BX],[1000H](9)LDS(BX),[1000H](10)LEABX,CX2.已知AX=4A0BH,[1020H]单元中的内容为260FH,写出下列每条指令单独执行后AX的结果。MOVAX,1020H(2)XCHGAX,[1020H](3)MOVAX,[1020H](4)LEAAX,[1020H]3.在堆栈内,有效地址为2500H到2505H单元内依次存放10H、20H、30H、40H、50H、60H六个数,已知SP=2502H,执行POPBX指令后,有()。A.SP=2502H,BX=1020HB.SP=2504H,BX=4030HC.SP=2504H,BX=3040HD.SP=2500H,BX=2010H

B4.假定SS=2000H,SP=0100H,AX=2107H,执行指令PUSHAX后,存放数据21H的物理地址是()。A.20102HB.20101HC.200FEHD.200FFH

D5.交换寄存器SI、DI的内容,正确的程序段是()。A.MOVAX,SIMOVBX,DIXCHGBX,AX

C.MOVAX,SIMOVSI,AXMOVDI,AXB.PUSHSIPUSHDIPOPDIPOPSID.D

PUSHSIPUSHDIPOPSIPOPDI6.若已知SP=2000H,AX=1234H,BX=5678H

执行指令

PUSHAXPUSHBXPOPAXPOPBX

执行后,SP=

,AX=

,BX=

。7.BX=1000H,DS=2000H,(21000H)=3000H,(23000H)=4000H,则XCHGBX,[BX]执行完后BX=

H((BX))=

H(一个字的内容)

([BX])==

H(21000H)=

H(一个字的内容)8.SP=1000H,SS=3000H,(31000H)=2000H,DS=4000H,BX=1200H,则POP[BX]指令执行完后SP=

H,BX=

H(41200H)=

H(一个字的内容)第3章:3.2算术运算类指令算术运算类指令用来执行二进制的算术运算:加减乘除。这类指令会根据运算结果影响状态标志,有时要利用某些标志才能得到正确的结果;使用他们时请留心有关状态标志。重点掌握加法指令:ADD、ADC、INC减法指令:SUB、SBB、DEC、CMP、NEG第3章:3.2算术运算类指令(1)无符号数和带符号数均不溢出0000000000111100+000011110CS=0,CP=0OF=0⊕0=0作为无符号数312+15作为带符号数+3(+12)++15CF=0,无溢出OF=0,无溢出CF=0第3章:3.2算术运算类指令(2)无符号数溢出,带符号数不溢出0000111101101100+000000101CS=1,CP=1OF=1⊕1=0作为无符号数6252+258>255作为带符号数+6(-4)++2CF=1,溢出OF=0,无溢出CF=1第3章:3.2算术运算类指令(3)无符号数不溢出,带符号数溢出0000011110001011+100000110CS=0,CP=1OF=0⊕1=1作为无符号数8123+131作为带符号数+8(+123)++131>+127CF=0,无溢出OF=1,溢出CF=0第3章:3.2算术运算类指令(4)无符号数溢出,带符号数溢出1000111101110101+011111001CS=1,CP=0OF=1⊕0=1作为无符号数135245+380>255作为带符号数-121(-11)+-132<-128CF=1,溢出OF=1,溢出CF=1归纳上面4种情况:用CF可检测无符号数是否溢出,用OF可检测带符号数是否溢出。无符号数运算结果溢出是在其结果超出了最大表示范围的唯一原因下发生的,溢出也就是产生进位,这不叫出错。并且在多字节数的相加过程中,正式利用溢出的CF来传递低位字节向高位字节的进位。而带符号数运算产生溢出则表示运算结果出错。第3章:3.2算术运算类指令算术运算的特点有:在加、减、乘、除基本运算指令中,除+1/-1指令外,都具有两个操作数这类指令执行后,除+1、-1指令不影响CF标志外,其它对CF、OF、ZF、SF、PF和AF等6位标志均可产生影响。由这6位状态标志反映的操作结果的性质如下:第3章:1.加法和减法指令加法指令:ADD,ADC和INC减法指令:SUB,SBB,DEC,NEG和CMP他们分别执行字或字节的加法和减法运算,除INC和DEC不影响CF标志外,其他按定义影响全部状态标志位操作数组合:运算指令助记符reg,imm/reg/mem运算指令助记符mem,imm/reg第3章:(1)加法和减法指令

ADD

dst,src

;加法:dst←dst+src

;ADD指令使目的操作数加上源操作数,和的结果送到目的操作数

SUB

dst,src

;减法:dst←dst-src

;SUB指令使目的操作数减去源操作数,差的结果送到目的操作数第3章:例题(加法)MOVAX,7348H ;AX=7348HADDAL,27H

;AL=48H+27H=6FH,AX=736FH

;OF=0,SF=0,ZF=0,PF=1,CF=0ADDAX,3FFFH

;AX=736FH+3FFFH=B36EH

;OF=1,SF=1,ZF=0,PF=0,CF=03章:例题(减法)SUBAH,0F0H

;AH=B3H-F0H=C3H,AX=C36EH

;OF=0,SF=1,ZF=0,PF=1,CF=1MOVWORDPTR[200H],0EF00H

;[200H]=EF00H,标志不变SUB[200H],AX

;[200H]=EF00H-C36EH=2B92H

;OF=0,SF=0,ZF=0,PF=0,CF=0SUBSI,SI ;SI=0

;OF=0,SF=0,ZF=1,PF=1,CF=0第3章:(2)带进位加和减指令ADC

dst,src

;加法:dst←dst+src+CF

;ADC指令除完成ADD加法运算外,还要加上进位CF,结果送到目的操作数SBB

dst,src

;减法:dst←dst-src-CF

;SBB指令除完成SUB减法运算外,还要减去借位CF,结果送到目的操作数第3章:例(无符号双字加法和减法)MOVAX,7856H ;AX=7856HMOVDX,8234H ;DX=8234HADDAX,8998H ;AX=01EEH,CF=1ADCDX,1234H ;DX=9469H,CF=0SUBAX,4491H ;AX=BD5DH,CF=1SBBDX,8000H ;DX=1468H,CF=0DX.AX=82347856H+12348998H-80004491H=1468BD5DH第3章:(3)比较指令CMP(compare)CMP

dst,src

;做减法运算:dst-src

;CMP指令将目的操作数减去源操作数,但差值不回送目的操作数比较指令通过减法运算影响状态标志,用于比较两个操作数的大小关系CMPAX,BXCMPAL,100第3章:(4)增量和减量指令INC

reg/mem

;增量(加1):reg/mem←reg/mem+1DEC

reg/mem

;减量(减1):reg/mem←reg/mem-1INC指令和DEC指令是单操作数指令与加法和减法指令实现的加1和减1不同的是:INC和DEC不影响CF标志INCSI ;SI←SI+1DECBYTEPTR[SI] ;[SI]←[SI]-1第3章:(5)求补指令NEG(negtive)NEGreg/mem

;reg/mem←0-reg/memNEG指令对操作数执行求补运算,即用零减去操作数,然后结果返回操作数求补运算也可以表达成:将操作数按位取反后加1NEG指令对标志的影响与用零作减法的SUB指令一样NEG指令也是一个单操作数指令第3章:例题(求补运算)MOVAX,0FF64HNEGAL

;AL=0-64H=9CH,AX=FF9CH

;OF=0,SF=1,ZF=0,PF=1,CF=1SUBAL,9DH

;AL=9CH-9DH=FFH,AX=FFFFH

;OF=0,SF=1,ZF=0,PF=1,CF=1NEGAX

;AX=0-FFFFH=0001H

;OF=0,SF=0,ZF=0,PF=0,CF=1DECAL

;AL=01H-1=0,AX=0000H

;OF=0,SF=0,ZF=1,PF=1,CF=1NEGAX

;AX=0-0=0

;OF=0,SF=0,ZF=1,PF=1,CF=0第3章:(6)压缩BCD码加法调整指令DAA指令用于对压缩BCD码相加的结果进行调整,使结果仍为压缩BCD码。微处理器中,运算器的核心是二进制加法器,逢二进一,当BCD码≤

温馨提示

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

评论

0/150

提交评论