版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
微型计算机原理及其接口技术第三章1第1页,课件共187页,创作于2023年2月主要内容:指令系统的一般概念对操作数的寻址方式六大类指令的操作原理:
操作码的含义指令对操作数的要求指令执行的结果2第2页,课件共187页,创作于2023年2月3.1概述指令——控制计算机完成指定操作的命令机器指令——指令的二进制代码形式。例如:CD21H汇编指令——助记符形式的指令。例如:INT21H指令系统——CPU所有指令及其使用规则的集合8088/8086指令系统:(1)指令向后兼容(x86系列)(2)应用广泛,资料易于寻找3第3页,课件共187页,创作于2023年2月指令按功能分为六大类(92种)(1)数据传送类;(2)算术运算类;(3)逻辑运算和移位;(4)串操作;(5)控制转移类;(6)处理器控制。4第4页,课件共187页,创作于2023年2月3.1.1
指令的基本构成操作码[操作数],[操作数]说明要执行的是什么操作操作对象,可以有0个、1个或2个目的源5第5页,课件共187页,创作于2023年2月指令举例:ADDAX,[SI+6]MOVAX,BX操作码操作数INC[BX]HLT6第6页,课件共187页,创作于2023年2月部分8088常用指令指令类型助记符数据传送数据传送MOV,PUSH/POP,XCHG等地址传送LEA,LDS,LES输入输出IN,OUT算术运算加法ADD,ADC,INC减法SUB,SBB,DEC,NEG,CMP乘/除法MUL,IMUL,DIV,IDIV逻辑AND,OR,NOT,XOR,TEST移位SHL/SHR/SAR,ROL/ROR,RCL/RCR串操作MOVS,CMPS,SCAS,LODS,STOS控制转移JMP,JXX,LOOP,CALL/RET,INT/IRET7第7页,课件共187页,创作于2023年2月8088/8086的操作数分为3类1、立即数(常数)取值范围如下表:立即数只能用作源操作数,如8位16位无符号数00H-FFH(0-255)0000H-FFFFH(0-65535)带符号数80H-7FH(-128~127)8000H-7FFFH(-32768~32767)MOV AX,0FA00H ;正确MOV 8000H,DX ;错误8第8页,课件共187页,创作于2023年2月2、寄存器操作数放在8个通用寄存器或4个段寄存器中的操作数9第9页,课件共187页,创作于2023年2月只能存放字操作数段寄存器存放当前操作数的段基地址不允许将立即数传送到段寄存器SIDIBPSPCSDSESSS10第10页,课件共187页,创作于2023年2月3、存储器操作数存储器操作数字节字双字124类型存储单元个数一般不允许两个操作数同时为存储器操作数11第11页,课件共187页,创作于2023年2月存储单元的物理地址=段基地址+偏移地址若指令中没有指明所涉及的段寄存器,CPU就采用默认的段寄存器来确定操作数所在的段。表3.3段寄存器使用的一些基本约定存储器操作数的偏移地址(也称有效地址)可以通过不同的寻址方式由指令给出。例如,若(BX)=2000H,(SI)=0A00H,(DI)=2A00H,则以下指令的结果是一样的:
MOVAL,[2A00H] MOVAL,[BX+0A00H] MOVAL,[BX][SI] MOVAL,[DI]12第12页,课件共187页,创作于2023年2月一条指令的执行时间=∑3.1.2
指令的执行时间取指令取操作数执行指令传送结果单位用时钟周期数表示表3.4常用指令执行时间结论:
1)尽量使用寄存器作为操作数
2)若有可能,用移位代替乘除法
3)尽量使用简单的寻址方式13第13页,课件共187页,创作于2023年2月寻址方式——寻找操作数的方法
寻找操作数的地址(一般指源操作数)
寻找要执行的下一条指令的地址在8086指令系统中,说明操作数所在地址的寻址方式可分为8种:
①立即寻址⑤寄存器相对寻址
②直接寻址⑥基址-变址寻址
③寄存器寻址⑦相对的基址-变址寻址
④寄存器间接寻址⑧隐含寻址3.2
8086的寻址方式14第14页,课件共187页,创作于2023年2月
操作数(为一常数)直接由指令给出
(此操作数称为立即数)
立即寻址只能用于源操作数例:
MOVAX,1C8FHMOVBYTEPTR[2A00H],8FH
错误例:
×
MOV2A00H,AX;错误!
3.1.2
立即寻址15第15页,课件共187页,创作于2023年2月立即数操作码低8位高8位存储器MOV操作码02H31HAHAL代码段代码段立即寻址指令在存储器中的存放形式AX指令操作例:MOVAX,3102H;AX3102H
执行后,(AH)=31H,(AL)=02H16第16页,课件共187页,创作于2023年2月3.2.2
直接寻址
指令中直接给出操作数的16位偏移地址
偏移地址也称为有效地址(EA,EffectiveAddress)
默认的段寄存器为DS,但也可以显式地指定其他段寄存器——称为段超越前缀偏移地址也可用符号地址来表示,如ADDR、VAR
例:
MOVAX,[2A00H]MOVDX,ES:[2A00H]MOVSI,TABLE_PTR17第17页,课件共187页,创作于2023年2月指令操作例:MOVAX,[3102H]AL(3102H),AH(3103H)如果(DS)=2000H,(23012H)=CDH,(23013H)=ABH则操作数的物理地址为:
20000H+3102H=23102H指令执行后:(AX)=ABCDHMOV操作码02H31HAHAL23102HCDHABH存储器代码段数据段..18第18页,课件共187页,创作于2023年2月3.2.3
寄存器寻址
操作数放在某个寄存器中源操作数与目的操作数字长要相同寄存器寻址与段地址无关例:
MOVAX,BXMOV[3F00H],AXMOVCL,AL
错误例:
×
MOVAX,BL;字长不同
×MOVES:AX,DX;寄存器与段无关19第19页,课件共187页,创作于2023年2月AXSI2233H2233H指令操作例:MOVSI,AX;SI(AX)
指令执行前:(AX)=2233H
指令执行后:(AX)=2233H,(SI)=2233H20第20页,课件共187页,创作于2023年2月3.2.4
寄存器间接寻址
操作数的偏移地址(有效地址EA)放在寄存器中
只有SI、DI、BX和BP可作间址寄存器
例:MOVAX,[BX]MOVCL,CS:[DI]
错误例:
×MOVAX,[DX]×
MOVCL,[AX]EA=(BX)(BP)(SI)(DI)21第21页,课件共187页,创作于2023年2月指令操作例:MOVAX,[SI]若(DS)=6000H,
(SI)=1200H,(61200H)=44H,(61201H)=33H则指令执行后,(AX)=3344H。44H33H60001200DSSI6000061200
61200HAX存储器数据段
+)120044H33H22第22页,课件共187页,创作于2023年2月3.2.5
寄存器相对寻址EA=间址寄存器的内容加上一个8/16位的位移量寄存器相对寻址常用于存取表格或一维数组中的元素——把表格的起始地址作为位移量,元素的下标值放在间址寄存器中(或反之)EA=(BX)(BP)(SI)(DI)+8位16位位移量
23第23页,课件共187页,创作于2023年2月
例:MOVAX,[BX+8]MOVCX,TABLE[SI]MOVAX,[BP+1000H];
默认段寄存器为SS
指令操作例:MOVAX,DATA[BX]
若(DS)=6000H,(BX)=1000H,DATA=2A00H,(63A00H)=66H,(63A01H)=55H
则物理地址=60000H+1000H+2A00H=63A00H
指令执行后:(AX)=5566H(见下页图示)24第24页,课件共187页,创作于2023年2月操作码00偏移量低2A偏移量高DS6000BX1000+DATA2A0063A0063A00HAHALAX代码段数据段.........66H55HMOVAX,DATA[BX]25第25页,课件共187页,创作于2023年2月3.2.6
基址-变址寻址
若操作数的偏移地址:由基址寄存器(BX或BP)给出——
基址寻址方式由变址寄存器(SI或DI)给出——
变址寻址方式
由一个基址寄存器的内容和一个变址寄存器的内容相加而形成操作数的偏移地址,称为基址-变址寻址。EA=(BX)(BP)+(SI)(DI)
同一组内的寄存器不能同时出现。26第26页,课件共187页,创作于2023年2月例:
MOVAX,[BX][SI]MOVAX,[BX+SI]MOVAX,DS:[BP][DI]错误例:
×
MOVAX,[BX][BP]
×
MOVAX,[DI][SI]27第27页,课件共187页,创作于2023年2月83000操作码DS
8000BX
2000+SI
100083000HAHALAX代码段数据段.........YYXX指令操作例:MOVAX,[BX][SI]假定:(DS)=8000H,(BX)=2000H,SI=1000H则物理地址=80000H+2000H+1000H=83000H指令执行后:(AL)=[83000H](AH)=[83001H]28第28页,课件共187页,创作于2023年2月3.2.7相对的基址-变址寻址
在基址-变址寻址的基础上再加上一个相对位移量
注意事项同基址-变址寻址EA=(BX)(BP)+(SI)(DI)+8位16位位移量
例:MOVAX,BASE[SI][BX]MOVAX,[BX+BASE][SI]MOVAX,[BX+SI+BASE]MOVAX,[BX]BASE[SI]MOVAX,[BX+SI]BASE29第29页,课件共187页,创作于2023年2月指令操作例:MOVAX,DATA[DI][BX]若(DS)=8000H,(BX)=2000H,(DI)=1000H,DATA=200H则指令执行后(AH)=[83021H],(AL)=[83020H]8320083200HAHALAX+DATA0200操作码代码段数据段.........YYXXDS
8000BX
2000
DI
100030第30页,课件共187页,创作于2023年2月使用相对的基址-变址寻址方式可以很方便地访问二维数组。基址寄存器数组首地址变址寄存器数组元素行址位移量数组元素列址(偏移地址)二维数组例:内存图示(按行存储)(行位移地址)(行内元素下标)183252409A=31第31页,课件共187页,创作于2023年2月3.2.8
隐含寻址
指令操作数是隐含的,在指令中未显式地指明。例:MULBL
指令隐含了被乘数AL及乘积AX
类似的指令还有:DIV、CBW、MOVS等(AL)×(BL)→AX32第32页,课件共187页,创作于2023年2月小结指令由(
)和(
)构成如何取得操作数——称为(
)操作码操作数寻址方式33第33页,课件共187页,创作于2023年2月寻址方式可分为立即寻址直接寻址寄存器相对寻址寄存器寻址基址-变址寻址基址-变址相对寻址寄存器间接寻址34第34页,课件共187页,创作于2023年2月寄存器间接、寄存器相对、基址变址、相对基址变址四种寻址方式的比较:
寻址方式指令操作数形式
寄存器间接只有一个寄存器(BX/BP/SI/DI之一)寄存器相对一个寄存器加上位移量基址—变址两个不同类别的寄存器相对基址-变址两个不同类别的寄存器加上位移量35第35页,课件共187页,创作于2023年2月3.38086/8088指令系统可分成如下6类:数据传送指令算术运算指令逻辑运算和移位指令串操作指令程序控制指令处理器控制指令36第36页,课件共187页,创作于2023年2月3.3.1数据传送指令
可实现存储器寄存器I/O
数据传送指令又可分为如下四种:通用传送目标地址传送标志传送输入输出37第37页,课件共187页,创作于2023年2月1.通用传送指令(1)
MOVdest,src;dest←src
传送的是字节还是字取决于指令中涉及的寄存器是8位还是16位。具体来说可实现:
①MOVmem/reg1,mem/reg2
指令中两操作数中至少有一个为寄存器例:MOV CL,DLMOV AX,BX MOV [SI],CX
MOV CL,[BX+5]38第38页,课件共187页,创作于2023年2月②MOVreg,data;立即数送寄存器③MOVmem,data;立即数送存储单元④MOVacc,mem;存储单元送累加器⑤MOVmem,acc;累加器送存储单元⑥MOVsegreg,mem/reg;存储单元/寄存器送段寄存器⑦MOVmem/reg,segreg;段寄存器送存储单元/寄存器39第39页,课件共187页,创作于2023年2月MOV指令使用规则:1)IP不能作目的寄存器2)不允许mem←mem3)不允许segreg←segreg4)立即数不允许作为目的操作数5)不允许segreg←立即数6)源操作数与目的操作数类型要一致40第40页,课件共187页,创作于2023年2月几个不能传送的解决办法:用AX作桥梁
存储器←存储器:
MOVAX,MEM1 MOVMEM2,AX段寄存器←段寄存器:
MOVAX,DS MOVES,AX段寄存器←立即数:
MOVAX,DATA MOVDS,AX41第41页,课件共187页,创作于2023年2月应用举例:将1000H开始的100个存储单元全部填充为ASCII码2AH(*)。程序段如下:
MOVDI,1000HMOVCX,64HMOVAL,2AHAGAIN:MOV[DI],ALINCDI
DECCXJNZAGAINHLT42第42页,课件共187页,创作于2023年2月上程序段存放在代码段中,設(CS)=109EH,则各条指令存放地址如下:
CS:IP指令109E:0100MOVDI,1000H109E:0103MOVCX,64H109E:0106MOVAL,2AH109E:0108MOV[DI],AL109E:010AINCDI109E:010BDECCX109E:010CJNZ0108109E:010EHLT 109E:011043第43页,课件共187页,创作于2023年2月
写入2AH(*)后,数据段中相应存储单元的内容改变如下:DS:10002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2ADS:10102A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2ADS:10202A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2ADS:10302A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2ADS:10402A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2ADS:10502A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2ADS:10602A2A2A2A44第44页,课件共187页,创作于2023年2月什么是堆栈?按“后进先出(LIFO)”方式工作的存储区域。堆栈以字为单位进行压入弹出操作。为什么要设置堆栈?为什么要按“后进先出”方式工作?参见下图(2)堆栈操作指令45第45页,课件共187页,创作于2023年2月主程序IP继续执行主程序执行子程序转子程序压栈弹出返回主程序主程序IPIP(下)继续执行主程序转子程序1返回主程序IP’执行子程序2转子程序2返回子程序1IP’(下)执行子程序1继续执行子程序1(a)(b)子程序调用示意图(a)主程序调子程序;(b)子程序嵌套示意图压栈弹出IP(下)46第46页,课件共187页,创作于2023年2月规定由SS指示堆栈段的段基址,堆栈指针SP始终指向堆栈的顶部,SP的初值规定了所用堆栈区的大小。堆栈的最高地址叫栈底。SPSS堆栈段进栈方向退栈方向栈底栈顶47第47页,课件共187页,创作于2023年2月
①压栈指令
PUSHsrc ;src为16位操作数例:PUSH AX ;将AX内容压栈执行操作:(SP)-1←高字节AH
(SP)-2←低字节AL(SP)←(SP)-248第48页,课件共187页,创作于2023年2月设(AX)=1020H,执行示意图如图低地址存储区(SS段)执行前(AX)=1020(SP)存储区(SS段)进栈方向执行后2010(AL)(AH)2-8PUSHAX指令执行示意图(SP)-2(SP)高地址低地址高地址(SP)-149第49页,课件共187页,创作于2023年2月压栈指令的格式为:
PUSH regPUSH mem/regPUSH segreg例如:
PUSHAXPUSH[BX]PUSHDS注意进栈方向是高地址向低地址发展。50第50页,课件共187页,创作于2023年2月
②弹出指令
POP dest例:POP BX ;将栈顶内容弹至BX
执行操作:(BL)←(SP)
(BH)←(SP)+1
(SP)←(SP)+251第51页,课件共187页,创作于2023年2月POPBX的执行示意图如下图所示低地址存储区(SS段)出栈方向执行前2010POPBX指令执行示意图(SP)存储区(SS段)执行后(BX)=1020(SP)(SP)+1(SP)+2BX2010高地址低地址高地址52第52页,课件共187页,创作于2023年2月堆栈指令使用时应注意几点:①堆栈操作总是按字进行②不能从栈顶弹出一个字给CS③堆栈指针为SS:SP,SP永远指向栈顶④SP自动进行增减量(-2,+2)53第53页,课件共187页,创作于2023年2月格式:XCHGreg,mem/reg功能:交换两操作数的内容。要求:两操作数中必须有一个在寄存器中;操作数不能为段寄存器和立即数;源和目地操作数类型要一致。举例:XCHG AX,BXXCHG [2000],CL(3)交换指令XCHG54第54页,课件共187页,创作于2023年2月(4)查表指令XLAT
执行的操作:AL←[(BX)+(AL)]
又叫查表转换指令,它可根据表项序号查出表中对应代码的内容。执行时先将表的首地址(偏移地址)送到BX中,表项序号存于AL中。
例如:内存数据段有一张16进制数的ASCII码表,设首地址为2000H,如欲查出表中第11个代码(代码序号从0开始)即十六进制数B的ASCII码。ASCII表在DS段中,并假设(DS)=4000H。见下页图。‘’55第55页,课件共187页,创作于2023年2月303132...394142...4546...42000H+042000H+0BH‘0’‘1’‘2’‘9’‘A’‘B’‘E’‘F’十六进制数ASCII码表存储器56第56页,课件共187页,创作于2023年2月则可用如下几条指令实现:MOVBX,2000H
;(BX)←表首地址MOVAL,0BH
;(AL)←序号XALT
;查表转换执行后得到:(AL)=42H=’B’注意:转换表长度最大为256个表项(字节)。57第57页,课件共187页,创作于2023年2月(5)字节-字转换指令格式:CBW;把AL的符号位复制到AHCWD;把AX的符号位复制到DX用途:用于有符号数的除法。例如:(AL)=A7H,则执行CBW后,AH的内容为FFH。58第58页,课件共187页,创作于2023年2月2.输入输出(I/O)指令
只限于用累加器AL或AX来传送信息。功能:(累加器)←→I/O端口(1)输入指令IN格式:INacc,PORT;PORT端口号0~255INacc,DX;DX表示的端口范围达64K例:INAL,80H;(AL)←(80H端口)
INAL,DX;(AL)←((DX))59第59页,课件共187页,创作于2023年2月例:OUT68H,AX;(69H,68H)←(AX)
OUTDX,AL;((DX))←(AL)在使用间接寻址的IN/OUT指令时,要事先用传送指令把I/O端口号设置到DX寄存器,如:
MOVDX,220HINAL,DX;将220H端口内容读入AL(2)输出指令OUT
格式:OUTport,acc
OUTDX,acc60第60页,课件共187页,创作于2023年2月3.地址传送指令共有三条:格式:LEAreg,mem;将指定存储器的16位偏移地址送指定寄存器
LDSreg,mem32;DS:reg←(mem开始的四个内存单元)LESreg,mem32;同上,但DS改为ES
要求源操作数必须是一个内存操作数,目的操作数必须是一个16位的通用寄存器。61第61页,课件共187页,创作于2023年2月设:(SI)=1000H则执行该指令后,(BX)=1010H注意以下两条指令差别:
LEABX,BUFFERMOVBX,BUFFER前者表示将符号地址为BUFFER的存储单元的偏侈地址取到
BX中;后者表示将BUFFER存储单元中的内容取到
BX中.例:LEA BX,[SI+10H]62第62页,课件共187页,创作于2023年2月下面两条指令等效:
LEABX,BUFFERMOVBX,OFFSETBUFFER其中OFFSETBUFFER表示存储器单元BUFFER的偏移地址。二者都可用于取存储器单元的偏移地址,但LEA指令可以取动态的地址,OFFSET只能取静态的地址。63第63页,课件共187页,创作于2023年2月4.标志传送指令共有四条:(1)读标志指令LAHF
LAHF把标志寄存器低8位中的5个标志位传送到AH中的指定位,如下图所示:OFDFIFTFSFZFAFPFCFAHLAHF指令的功能FLAG64第64页,课件共187页,创作于2023年2月(2)设置标志指令SAHF
SAHF的功能与LAHF的功能正好相反,用图来示意,只要将上图中5个箭头方向反一下即可。OFDFIFTFSFZFAFPFCFAHSAHF指令的功能FLAG65第65页,课件共187页,创作于2023年2月
执行的操作:(SP)-1←标志寄存器高8位
(SP)-2←标志寄存器低8位
(SP)←(SP)-2(4)从栈顶弹出标志寄存器指令POPF
执行的操作:标志寄存器低8位←(SP)
标志寄存器高8位←(SP)+1
(SP)←(SP)+2PUSHF和POPF指令用于保护和恢复标志寄存器内容。(3)把标志寄存器推入栈顶指令PUSHF66第66页,课件共187页,创作于2023年2月例如:
PUSH AXPUSH CX
PUSHF;保护标志寄存器内容
;这段程序要用到AX,CX以及标志位
POPF ;恢复标志寄存器内容
POP CXPOP AX...67第67页,课件共187页,创作于2023年2月数据传送指令中,除SAHF和POPF这两条指令外,其余所有指令均不影响标志位。68第68页,课件共187页,创作于2023年2月3.3.2算术运算指令
涉及两种类型数据:无符号数和有符号数。对加减法指令,无符号和有符号数可采用同一套指令,但应注意:参加的操作数必须都是无符号数或都是有符号数。需使用不同的标志位来检查无符号数和有符号数的运算结果是否溢出。69第69页,课件共187页,创作于2023年2月两个8位数相加时有4种情况:①无符号数和有符号数均不溢出二进制相加无符号数加有符号数加
000010008+8+00011110
+30
+(+30)0010011038+38
结果38 CF=0OF=070第70页,课件共187页,创作于2023年2月②无符号数溢出
000010008+8+11111101
+253
+(-3)100000101261+5
结果5 CF=1 OF=0③有符号数溢出
000010008+8+01111101
+125
+(+125)
10000101133+133
结果-123 CF=0OF=1(补码表示)71第71页,课件共187页,创作于2023年2月④无符号数和有符号数均溢出
10001000136-120+11110111
+247
+(-9)101111111383-129
结果127CF=1OF=1上面四种情况说明,CF标志可用来表示无符号数的溢出,OF标志可用来表示有符号数的溢出。有符号数的溢出是一种出错状态,在运算过程中应当避免。72第72页,课件共187页,创作于2023年2月共有5条:(1)不带进位的加法指令ADD
格式:ADD acc,dataADD mem/reg,dataADD
mem/reg1,mem/reg2例:ADD AL,30HADD AX,[BX+20H] ADD CX,SI ADD [DI],200HADD指令对标志位(指状态标志)都有影响。1.加法指令73第73页,课件共187页,创作于2023年2月(2)带进位位的加法指令ADCADC指令在形式上和功能上都有与ADD类似,只是相加时还要包括进位标志CF的内容,例如:
ADCAL,68H;AL←(AL)+68H+(CF) ADCAX,CX;AX←(AX)+(CX)+(CF)ADCBX,[DI];BX←(BX)+[DI+1][DI]+(CF)74第74页,课件共187页,创作于2023年2月例:有两个4字节的无符号数相加:
2C56F8AC+309E47BE=?设被加数、加数分别存放在BUFFER1及BUFFER2开始的两个存储区内,结果放回BUFFER1存储区,如下页图所示。因CPU只能进行8位或16位的加法运算,为此可将加法分4次进行。ADC指令主要用于多字节加法运算中75第75页,课件共187页,创作于2023年2月56H2CHBEH47HBUFFER1BUFFER2ACHF8H9EH30H被加数加数数据段多字节加法示意图......76第76页,课件共187页,创作于2023年2月程序段如下:
MOVCX,4;置循环次数
MOVSI,0;置SI初值为零
CLC;清进位标志CFLL:MOV AL,BUFFER2[SI] ADC BUFFER1[SI],AL;带进位加
INC SI;(SI)+1DEC CX;(CX)-1JNZLL;若(CX)0,则转LL思考:若最高位有进位,如何改?77第77页,课件共187页,创作于2023年2月格式:INCreg/mem功能:类似于C语言中的++操作:对指定的操作数加1例:INCALINCSIINCBYTEPTR[BX+4]注:本指令不影响CF标志。3)加1指令INC(单操作数指令)78第78页,课件共187页,创作于2023年2月ADD/ADC对条件标志位(CF/OF/ZF/SF)的影响:CF位表示无符号数相加的溢出。OF位表示带符号数相加的溢出。1结果为负0否则SF=1结果为00否则ZF=1和的最高有效位有向高位的进位0否则CF=1两个操作数符号相同,而结果符号与之相反0否则OF=79第79页,课件共187页,创作于2023年2月(1)不考虑借位的减法指令SUB
格式:SUBdest,src操作:dest←(dest)-(src)注:1.源和目的操作数不能同时为存储器操作数
2.立即数不能作为目的操作数指令例子:
SUBAL,60HSUB[BX+20H],DXSUBAX,CX2.减法指令80第80页,课件共187页,创作于2023年2月SBB指令主要用于多字节的减法。格式:SBBdest,src操作:dest←(dest)-(src)-(CF)指令例子:SBBAX,CXSBBWORDPTR[SI],2080HSBB[SI],DX(2)考虑借位的减法指令SBB81第81页,课件共187页,创作于2023年2月例:x、y、z均为32位数,分别存放在地址为X,X+2;Y,Y+2;Z,Z+2的存储单元中,用指令序列实现wx+y+24-z,结果放在W,W+2单元中。MOVAX,XMOVDX,X+2ADDAX,YADCDX,Y+2;x+yADDAX,24ADCDX,0;x+y+24
SUBAX,Z
SBBDX,Z+2;x+y+24-zMOVW,AXMOVW+2,DX;结果存入W,W+2单元82第82页,课件共187页,创作于2023年2月作用类似于C语言中的”--”操作符。格式:DECopr 操作:opr←(opr)-1指令例子:
DECCLDECBYTEPTR[DI+2]
DECSI(3)减1指令DEC83第83页,课件共187页,创作于2023年2月格式:NEGopr操作:opr←0-(opr)对一个操作数取补码相当于用0减去此操作数,故利用NEG指令可得到负数的绝对值。例:若(AL)=0FCH,则执行NEGAL 后,
(AL)=04H,CF=1本例中,0FCH为-4的补码,执行求补指令后,即得到4(-4的绝对值)。(4)求补指令NEG84第84页,课件共187页,创作于2023年2月SUB/SBB对标志位(CF/OF/ZF/SF)的影响
CF=1表示无符号数减法溢出。
OF=1表示带符号数减法溢出。NEG指令对CF/OF的影响:
CF:操作数为0时,求补的结果使CF=0,否则CF=1。
OF:字节运算对-128求补或字运算对-32768求补时OF=1,否则OF=0。1被减数的最高有效位有向高位的借位0否则CF=1两个操作数符号相反,而结果的符号与减数相同0否则OF=85第85页,课件共187页,创作于2023年2月格式:CMPdest,src操作:(dest)-(src)CMP也是执行两个操作数相减,但结果不送目标操作数,其结果只反映在标志位上。指令例子:
CMPAL,0AHCMPCX,SICMPDI,[BX+03](5)比较指令CMP86第86页,课件共187页,创作于2023年2月根据标志位来判断比较的结果1)根据ZF判断两个数是否相等。若ZF=1,则两数相等。2)若两个数不相等,则分两种情况考虑:①比较的是两个无符号数若CF=0,则dest>src;若CF=1,则dest<src。②比较的是两个有符号数若OF⊕SF=0,则dest>src;
若OF⊕SF=1,则dest<src。87第87页,课件共187页,创作于2023年2月比较指令在使用时,一般在其后紧跟一条条件转移指令,判断比较结果的转向。举例:比较AL、BL、CL中带符号数的大小,将最小数放在AL中。程序:CMPAL,BL;AL和BL比较
JNGBBB
;若AL≤BL,则转
XCHGAL,BL;若AL>BL,则交换
BBB:CMPAL,CL;AL和CL比较
JNGCCC;若AL≤CL,则转
XCHGAL,CL;若AL>CL,则交换
CCC:HLT88第88页,课件共187页,创作于2023年2月进行乘法时:8位*8位→16位乘积 16位*16位→32位乘积(1)无符号数的乘法指令MUL(MEM/REG)格式:MULsrc操作:字节操作数(AX)(AL)×(src)
字操作数(DX,AX)(AX)×(src)指令例子:
MULBL;(AL)×(BL),乘积在AX中
MULCX;(AX)×(CX),乘积在DX,AX中
MULBYTEPTR[BX]3.乘法指令
89第89页,课件共187页,创作于2023年2月格式与MUL指令类似,只是要求两操作数均为有符号数。指令例子:
IMULBL;(AX)←(AL)×(BL)IMULWORDPTR[SI];(DX,AX)←(AX)×([SI+1][SI])
(2)有符号数乘法指令IMUL注意:MUL/IMUL指令中
●AL(AX)为隐含的乘数寄存器;
●
AX(DX,AX)为隐含的乘积寄存器;
●
SRC不能为立即数;
●除CF和OF外,对其它标志位无定义。90第90页,课件共187页,创作于2023年2月乘法指令对CF/OF的影响:00乘积的高一半为零11否则MUL指令:CF/OF=00乘积的高一半是低一半的符号扩展11否则
IMUL指令:CF/OF=例:(AL)=A5H(-5B),(BL)=11H
(1)IMULBL;(AX)(AL)×(BL)
;A5×11-5B×11=-060BF9F5
;
(AX)=F9F5H
CF=OF=1(2)MULBL;(AX)(AL)×(BL)
;A5×11=0AF5
;
(AX)=0AF5H
CF=OF=1
91第91页,课件共187页,创作于2023年2月4.除法指令进行除法时:16位/8位→8位商
32位/16位→16位商对被除数、商及余数存放有如下规定:
被除数 商 余数字节除法AX AL AH字除法 DX:AX AX DX92第92页,课件共187页,创作于2023年2月格式:DIVsrc操作:字节操作(AL)(AX)/(SRC)的商
(AH)(AX)/(SRC)的余数字操作(AX)(DX,AX)/(SRC)的商
(DX)(DX,AX)/(SRC)的余数指令例子:
DIVCLDIVWORDPTR[BX]注:若除数为零或AL中商大于FFH(或AX中商大于FFFFH),则CPU产生一个类型0的内部中断。(1)无符号数除法指令DIV93第93页,课件共187页,创作于2023年2月(2)有符号数除法指令IDIV格式:IDIVsrc操作与DIV类似。商及余数均为有符号数,且余数符号总是与被除数符号相同。注意:
对于DIV/IDIV指令AX(DX,AX)为隐含的被除数寄存器。
AL(AX)为隐含的商寄存器。
AH(DX)为隐含的余数寄存器。
src不能为立即数。
对所有条件标志位均无定义。94第94页,课件共187页,创作于2023年2月除法运算要求被除数字长是除数字长的两倍,若不满足则需对被除数进行扩展,否则产生错误。对于无符号数除法扩展,只需将AH或DX清零即可。对有符号数而言,则是符号位的扩展。可使用前面介绍过的符号扩展指令CBW和CWD关于除法操作中的字长扩展问题95第95页,课件共187页,创作于2023年2月例:写出34H÷25H的程序段。
MOVAL,34HMOVBL,25HCBW;AL的符号扩展到AHIDIVBL;0034H÷25H,结果为
;(AH)=0FH,(AL)=01H96第96页,课件共187页,创作于2023年2月*5.BCD码运算的十进制调整指令专用于对BCD码运算的结果进行调整包括:AAA、DAA、AAS、DAS、AAM、AAD均为隐含寻址,隐含的操作数为AL和AH为何要对BCD码的运算结果进行调整?
BCD码本质上是十进制数,即应遵循逢十进一的规则。而计算机是按二进制(十六进制)进行运算,并未按十进制规则进行运算。97第97页,课件共187页,创作于2023年2月1)加法的十进制调整指令(1)非压缩BCD码加法调整AAA本指令对在AL中的由两个未组合的BCD码相加后的结果进行调正,得到一个正确的未组合的BCD码。AAA指令只影响AF和CF,其余标志无定义。AAA指令应紧跟在ADD或ADC指令之后。98第98页,课件共187页,创作于2023年2月如果AL的低4位>9∨AF=1,则:
①AL←(AL)+6,(AH)←(AH)+1,AF←1②AL←((AL)∧0FH)③CF←AF否则AL←(AL)∧0FHAAA指令的操作如下:99第99页,课件共187页,创作于2023年2月调整原理:先看一个例子计算8+9
00001000
见右式
+00001001
00010001=11
结果应为17,而计算机相加为11,原因在于运算过程中,如遇到低4位往高4位产生进位时(此时AF=1)是按逢十六进一的规则,但BCD码要求逢十进一,因此只要产生进位,个位就会少6,这就要进行加6调正。这个1代表了16,而实际上仅应为10,即多进了6。
100第100页,课件共187页,创作于2023年2月实际上当低4位的结果>9(即A~F之间)时,也应进行加6调正(原因是逢十没有进位,故用加6的方法强行产生进位)。如对上例的结果进行加6:0001000111
+00000110
60000011117
^00001111----------------------100001111101第101页,课件共187页,创作于2023年2月例2:有两个字符串形式的十进制数,2658和3619,求二者之和。即2658+3619=?
由题意知,被加数和加数的每一位都以ASCII码形式存放在内存中。假定二数在内存中均是低位在前,高位在后,另留出5个单元存放相加的结果。内存中数据存放形式见下页图。102第102页,课件共187页,创作于2023年2月36H32H39H31HSTRING1STRING238H35H36H33H被加数加数数据段‘8’‘5’‘6’‘2’‘9’‘1’‘6’‘3’SUM结果......103第103页,课件共187页,创作于2023年2月程序段为:
LEASI,STRING1;STRING1偏移地址送SILEADI,STRING2;STRING2偏移地址送DILEABX,SUM;SUM偏移地址送BXMOVCX,4;循环4次
CLC;清进位标志AGAIN:MOVAL,[SI]ADCAL,[DI];带进位加
AAA;未压缩BCD码调正
MOV[BX],AL;结果存入SUMINCSI;调整指针
INCDIINCBXDECCX;循环计数器减1
JNZAGAIN;若未处理完,则转AGAIN104第104页,课件共187页,创作于2023年2月思考题:1.根据程序写出结果SUM的值。2.若最高位有进位,程序如何修改?3.从此例不难看出,用AAA指令也可对字符串形式的十进制数加法进行调整,所以它又被称为加法的ASCII调正指令。为什么AAA指令既可对非压缩BCD码加法进行调整,也可对ASCII码形式的十进制数进行调整?(注意AAA指令的第②步)105第105页,课件共187页,创作于2023年2月(2)压缩BCD码加法调整DAA两个压缩BCD码相加结果在AL中,通过DAA调整得到一个正确的压缩BCD码.指令操作(调整方法):若AL的低4位>9∨AF=1
则(AL)←(AL)+6,AF←1
若AL的高4位>9∨CF=1
则(AL)←(AL)+60H,CF←1除OF外,DAA指令影响所有其它标志。DAA指令应紧跟在ADD或ADC指令之后。106第106页,课件共187页,创作于2023年2月例:
0100100048H
MOVAL,48H
+01110100
74H
MOVBL,74H10111100BCHADDAL,BL
+01100110
66H
DAA100100010122H
(进位) (进位)执行ADD后,(AL)=BCH,高4位低4位均大于9,故DAA指令执行加66H调整,最后结果为:(AL)=22H,CF=1,AF=1107第107页,课件共187页,创作于2023年2月(1)非压缩BCD码减法的十进制调正指令AAS对AL中由两个非压缩的BCD码相减的结果进行调整。调整操作为:若AL的低4位>9或AF=1,则:①AL←(AL)-6,AH←(AH)-1,AF←1②AL←(AL)∧0FH③CF←AF
否则:AL←(AL)∧0FH2)减法的十进制调整指令108第108页,课件共187页,创作于2023年2月举例:16-8=?
MOVAX,0106H0000011006MOVBL,08H-00001000
-08SUBAL,BL 11111110FEAAS-00000110
-0611111000F8
∧00001111
∧0F0000100008结果为:(AL)=08H,(AH)=0,CF=AF=1109第109页,课件共187页,创作于2023年2月(2)压缩BCD码减法的十进制调正指令DAS对AL中由两个压缩BCD码相减的结果进行调整。调整操作为:若AL的低4位>9∨AF=1,则:
AL←(AL)-6,且AF←1
若AL的高4位>9∨CF=1,则:
AL←(AL)-60H,且CF←1
DAS对OF无定义,但影响其余标志位。DAS指令要求跟在减法指令之后。110第110页,课件共187页,创作于2023年2月3)乘法的十进制调正指令AAM
对AX中由两个非压缩BCD码相乘的结果进行调整。调整操作为:(AL)/0AH,(AH)←商,(AL)←余数隐含的操作寄存器为AL和AH;AAM跟在MUL指令之后使用;影响标志位PF、SF、ZF,其它无定义;用AAM可实现≤99的二-十进制转换。111第111页,课件共187页,创作于2023年2月例1:按十进制乘法计算7×8=?程序段如下:
MOV AL,07H ;(AL)=07H MOV CL,08H ;(CL)=08H MUL CL ;(AX)=0038H AAM ;(AH)=05H,(AL)=06H
所得结果为非压缩的BCD码。例2:把3AH转换成等值的十进制数。
MOVAL,3AH;58AAM;(AH)=05H,(AL)=08H112第112页,课件共187页,创作于2023年2月4)除法的十进制调正指令AAD对非压缩BCD除法运算进行调整。调整操作为:(AL)←(AH)×0AH+(AL)
AH←0隐含的操作寄存器为AH,AL;AAD要在DIV指令之前使用;影响标志位PF、SF、ZF,其它无定义;用AAD可实现≤99的十-二进制转换。113第113页,课件共187页,创作于2023年2月例1:按十进制除法计算55÷7=?
程序段如下:
MOV AX,0505H ;(AX)=55BCD MOV CL,07H ;(CL)=7 AAD ;(AX)=0037H DIV CL ;(AH)=6,(AL)=7
所得结果为非压缩的BCD码(商7余6)。例2:把73转换成等值的二进制数。
MOVAX,0703H;(AX)=73BCDAAD;(AX)=0049H114第114页,课件共187页,创作于2023年2月3.3.3逻辑运算和移位指令逻辑运算指令●运算规则:按位操作,无进/借位
●对标志位的影响(除NOT指令外):
CFOFSFZFPFAF00***无定义
根据运算结果设置115第115页,课件共187页,创作于2023年2月(1)逻辑”与”AND对两个操作数进行按位逻辑“与”操作。格式:ANDdest,src用途:保留操作数的某几位,清零其他位。例1:保留AL中低4位,高4位清0。ANDAL,0FH例2:AL中有字符’a’~’z’,将其转换成大写。
ANDAL,01011111B116第116页,课件共187页,创作于2023年2月例3:测试AL的bit7,bit5,bit2是否都是1。
ANDAL,10100100B CMPAL,10100100B
JZYES;ifmatch,gotoYES……;ifnotmatch
…
…YES:……;goeshereifall‘1’
117第117页,课件共187页,创作于2023年2月对两个操作数进行按位逻辑”或”操作。格式:ORdest,src用途:对操作数的某几位置1;对两操作数进行组合。例1:把AL中的非压缩BCD码变成相应十进制数的ASCII码。
ORAL,30H(2)逻辑”或”OR118第118页,课件共187页,创作于2023年2月例2:把AH和AL中的非压缩BCD码组合成压缩的BCD码,放到AL中。
MOVCL,4SHLAH,CLORAL,AH例3:把AL的第5位置为1ORAL,00100000B119第119页,课件共187页,创作于2023年2月对操作数进行按位逻辑”非”操作。格式:NOTmem/reg例:NOTCX
NOTBYTEPTR[DI](3)逻辑“非”(取反)NOT120第120页,课件共187页,创作于2023年2月对两个操作数按位进行”异或”操作。格式:XORdest,src用途:对reg清零(自身异或)
把reg/mem的某几位变反(与’1’异或)例1:把AX寄存器清零。例2:把DH的bit4,3变反①MOVAX,0XORDH,18H②XORAX,AX③ANDAX,0④SUBAX,AX(4)逻辑”异或”XOR
121第121页,课件共187页,创作于2023年2月操作与AND指令类似,但不将”与”的结果送回,只影响标志位。TEST指令常用于位测试,与条件转移指令一起用。例:测试AL的内容是否为负数。TESTAL,80H;检查AL中D7=1?
JNZMINUS;是1(负数),转MINUS
…
…
;否则(正数)不转移MINUS:…
…
…
…(5)测试指令TEST122第122页,课件共187页,创作于2023年2月2.移位指令(1)非循环移位指令算术左移指令SAL(ShiftArithmeticLeft)算术右移指令SAR(ShiftArithmeticRight)逻辑左移指令SHL(ShiftLeft)逻辑右移指令SHR(ShiftRight)这4条指令的格式相同,以SAL为例: SALmem/reg,CL;移位位数大
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电话销售策略总结
- 旅游行业导游服务技巧总结
- 冷链物流保安工作总结
- 2023年广西壮族自治区河池市公开招聘警务辅助人员辅警笔试自考题2卷含答案
- 2021年吉林省白山市公开招聘警务辅助人员辅警笔试自考题2卷含答案
- 2022年辽宁省鞍山市公开招聘警务辅助人员辅警笔试自考题1卷含答案
- 2024年四川省绵阳市公开招聘警务辅助人员辅警笔试自考题1卷含答案
- 青海省果洛藏族自治州(2024年-2025年小学六年级语文)部编版阶段练习(下学期)试卷及答案
- 2024年楼梯配件项目资金申请报告代可行性研究报告
- 2025年梅毒诊断抗原项目申请报告
- GB/T 33859-2017环境管理水足迹原则、要求与指南
- GB/T 1927.4-2021无疵小试样木材物理力学性质试验方法第4部分:含水率测定
- GB/T 18838.5-2015涂覆涂料前钢材表面处理喷射清理用金属磨料的技术要求第5部分:钢丝切丸
- 时间轴公司发展历程企业大事记PPT模板
- 中国地图各省图标(可拆分着色)
- 消防水系统综合调试方案
- 《秦统一中国》教学反思
- 国家开放大学《企业集团财务管理》形考任务1-4参考答案
- 经鼻肠梗阻导管护理课件
- 动态变形模量Evd试验记录
- 年产90000吨聚丁二烯工厂聚合工段的物料衡算
评论
0/150
提交评论