版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章8086指令系统3.1概述3.2指令格式3.38086的操作数的寻址方式3.3.1立即数寻址3.3.2寄存器寻址3.3.3存储器操作数寻址方式3.4IA-32通用指令3.4.1数据传送指令3.4.2算术运算指令3.4.3逻辑运算、移位3.4.4串操作指令3.4.5控制转移指令3.4.6处理器控制指令本章小节思考题10/8/2023第3章8086指令系统3.1概述10/8/20231本章重点基本数据类型8086/8088寻址8086的指令系统本章难点8086的指令系统应用10/8/2023本章重点10/8/202323.1概述80x86结构的基本数据类型字节:8位字:16位,2个字节双字:32位,4个字节四字:64位,8个字节(80486CPU引入)双四字:128位,16个字节(PentiumIII)数据在内存中的字节顺序80X86多字节数据的存放原则是低位字节在低端地址,高位字节在高端地址。而最低地址就是操作数的地址。
3.1概述10/8/20233.1概述80x86结构的基本数据类型3.1概述10/83例如,1B23H存放在2000H与2001H地址单元中,2000H即为该操作数的地址;10/8/2023例如,1B23H存放在2000H与2001H地址单元中,204
本讲要解决的问题:8086/8088寻址指令系统?指令格式?寻址概念?寻址方式?操作数寻址的方法?3.1概述10/8/2023
本讲要解决的问题:8086/8088寻址指令系统?3.153.2指令格式指令格式通用格式如下:操作码域:
存放指令的操作码,即指明计算机所要执行的操作。地址域:指出在指令执行过程中所需要的操作数或操作数所在的地址。操作码域操作数或操作数地址3.2IA-32的指令格式10/8/20233.2指令格式指令格式操作码域操作数或操6立即数位移量寄存器方式操作码1-2字节低字节1-2字节1字节(寻址方式)1字节高字节高字节低字节r/m3位reg3位mod2位opcode8086CPU指令格式3.2IA-32的指令格式10/8/2023立即数位移量寄存器方式操作码1-2字节低字节1-2字节1字节7机器指令:计算机能识别和执行的指令的二进制代码。如:1011000001100010汇编指令:用助记符表示机器指令的操作码和操作数,例如上面指令的汇编指令是MOVAL,62H3.1IA-32的指令格式10/8/2023机器指令:计算机能识别和执行的指令的二进制代码。如:10118指令执行时间指令执行时间:由时钟周期长短和执行指令所需要的时钟周期数决定。MOVAX,BX;执行时间最短MOVAX,[1000H]MOV[2000H],CX3.1IA-32的指令格式10/8/2023指令执行时间3.1IA-32的指令格式10/8/20293-38086的操作数的寻址方式寻址根据指令内容确定操作数地址的过程,称为寻址。有效地址根据寻址方式计算所得到的地址叫做有效地址EA,也就是段内偏移地址。有效地址还需要与相应的段基地址组合才是20位的物理地址,该工作由CPU完成。寻址方式在两种方式下被涉及:操作数的寻址方式和对调用或转移指令的寻址方式。本讲只介绍对操作数的寻址!!!3.38086的操作数的寻址方式10/8/20233-38086的操作数的寻址方式寻址3.3808610计算机中操作数数按存放的方法分为:立即数(指令中)寄存器数存储器数I/O端口操作数寻址方式立即数立即数寻址寄存器数寄存器寻址串操作寻址存储器数直接寻址寄存器间接寻址基址变址寻址变址寻址端口寻址直接寻址寄存器间接寻址3.38086的操作数的寻址方式10/8/2023计算机中操作数数按存放的方法分为:操作数寻址方式立即数立即数113.3.1立即数寻址操作数由指令提供.
例:MOVAL,80HMOVAX,1090HMOVCX,1003.3.2寄存器寻址操作数在寄存器中。MOVAH,BLMOVAX,BXMOVCX,AX1090HAHALAXBX3.38086的操作数的寻址方式10/8/20233.3.1立即数寻址1090HAHALAXBX3.3123.3.3存储器操作数寻址方式规定段寄存器3.38086的操作数的寻址方式10/8/20233.3.3存储器操作数寻址方式规定段寄存器3.313任何内存实际地址(PA)都由两部分组成:PA=段基址+段内偏移地址(此单元与段基址的距离)段内的偏移地址又称为有效地址(EA).
3.38086的操作数的寻址方式10/8/2023任何内存实际地址(PA)都由两部分组成:3.38086的操14A1H70H10H........代码段直接寻址
操作数在存储器中,其地址由指令提供。例:MOVAX,[1070H](DS)=2000H,物理地址为:PA=20000H+1070H=21070H
20H
30H
数据段2000:10702000:10712000:1072AHALAX3.38086的操作数的寻址方式10/8/2023A1H70H10H........代码段直接寻址20158086执行某种操作时,预先规定了采用的段和段寄存器,即有基本的段约定,如果要改变默认的段约定(即段超越),则需要在指令中明确指出来.
例如:MOVBX,ES:[3400H];将附加段ES段中偏移地址为3400H和3401H两单元的内容送BX中。若用DATA代替偏移地址3400H:MOVBX,ES:DATA10/8/20238086执行某种操作时,预先规定了采用的段和段寄存器,即有基16指令寄存器内存寄存器数据EA寄存器间接寻址
操作数在存储器中,寻址方式同直接寻址相似,但偏移地址由指针寄存器提供.3.38086的操作数的寻址方式10/8/2023指令寄存器内存寄存器17[BX][SI][BP][DI]EA=8或16位移量++EA=8或16位移量[BX]
[BP]
[SI]
[DI]+
8086CPU,有效地址EA计算:3.38086的操作数的寻址方式10/8/2023[BX][SI]EA=8或181、以BX寄存器进行间接寻址——数据段基址寻址例:
MOVAX,[BX]若(DS)=2000H,(BX)=1000H操作数物理地址PA:PA=2000H*16+1000H=21000H将21000H、21001H单元的内容送AX。执行结果:(AX)=5B40H
405B2000:1000H2000:1001H8BH07H........代码段数据段AHAL5B403.38086的操作数的寻址方式10/8/20231、以BX寄存器进行间接寻址——数据段基址寻址405192、以BP寄存器进行间接寻址——堆栈段基址寻址例:
MOVAX,[BP]若(SS)=5000H,(BP)=3000H,操作数物理地址:PA=5000H*16+3000H=53000H将53000H、53001H单元的内容送AX。执行结果:(AX)=4A56H3、以SI、DI寄存器进行间接寻址——变址寻址例:
MOVAX,[SI]
若(DS)=3000H,(SI)=4000H,
物理地址PA=34000H,执行结果:(AX)=201AH
34000H34001H1AH20H56H4AH53000H53001H3.38086的操作数的寻址方式10/8/20232、以BP寄存器进行间接寻址——堆栈段基址寻址34000H20寄存器相对寻址例:MOVAL,[BX+5];
若(DS)=6000H,(BX)=2000H,3.38086的操作数的寻址方式10/8/2023寄存器相对寻址3.38086的操作数的寻址方式10/8/221例如:MOVAL,COUNT[SI]或MOVAX,[COUNT+SI]设(DS)=6000H,(SI)=1000H,COUNT=05H有效地址EA=1000H+05H=1005H物理地址PA=6000H×16+1000H+05H=61005H10/8/2023例如:MOVAL,COUNT[SI]或MOVAX,22基址变址寻址方式
例:MOVAX,[BP][SI]
设(SS)=2000H,(SI)=1000H,(BP)=5000H,有效地址EA=1000H+5000H=6000H。
3.38086的操作数的寻址方式10/8/2023基址变址寻址方式
例:MOVAX,[BP][SI]
23相对基址变址寻址方式例:MOVAH,[BX+DI+1234H]3.38086的操作数的寻址方式10/8/2023相对基址变址寻址方式3.38086的操作数的寻址方式10/24例:设(BX)=1000H,(DI)=2000H,(DS)=3000H,位移量=0020HH。1)直接寻址:MOVAX,[2100H]有效地址EA=2100H物理地址PA=3000H*16+2100H=32100H2)寄存器间接寻址:MOVAX,[BX]EA=1000HPA=30000H+1000H=31000H3)BX寄存器相对间接寻址:MOVAX,[BX+0020H]EA=1000H+0020H=1020HPA=30000H+1020H=31020H3.38086的操作数的寻址方式10/8/2023例:设(BX)=1000H,(DI)=2000H,254)变址寻址:MOVAX,[DI]
EA=?PA=?5)DI寄存器相对变址寻址:MOVAX,[DI+1B57H]EA=?PA=?6)基址加变址的寻址:MOVAX,[BX+DI]
7)相对的基址加变址的寻址:MOVAX,[BX+DI+1B57H]3.38086的操作数的寻址方式思考题:10/8/20234)变址寻址:MOVAX,[DI]3.38086的操263.3.4I/O端口寻址寻址个数:最多可达216=65536个8位I/O端口(也可以定义16位或32位)直接寻址地址编号<256,可寻址I/O端口前256个;INAL,60H ;将60H端口中的数据输入到AL中。INAX,80H;将80H与81H相邻两个端口的16位数据输入到AX中。用DX寄存器寻址地址范围可达FFFFH,可寻址64KI/O端口。MOV DX,333H ;将端口地址送入DXOUT DX,AL ;将AL中的数据输出到DX所指的端口中MOV DX,330H ;将端口地址送入DXIN AL,DX ;将DX所指的端口中的数据输入到AL中3-38086的操作数的寻址方式10/8/20233.3.4I/O端口寻址寻址个数:最多可达216=273.4通用指令重点介绍8086的指令系统指令系统是一台计算机能识别和执行的全部指令的集合。8086汇编指令系统,分为6类:数据传送指令14条算术运算指令20逻辑运算、移位13串操作指令13控制转移指令28处理器控制指令123.4IA-32通用指令10/8/20233.4通用指令重点介绍8086的指令系统3.4283.4.1数据传送指令(14条)MOVLEAPUSHLDSPOPLESXCHGLAHFPUSHFXLATSAHFPOPFINOUT3.4IA-32通用指令10/8/20233.4.1数据传送指令(14条)MOV29数据传送指令:传送指令把数据从一个位置传送到另一个位置除标志寄存器传送指令外,均不影响标志位重点掌握MOVXCHGXLATPUSHPOPLEA10/8/2023数据传送指令:传送指令把数据从一个位置传送到另一个位置10/30MOV传送指令格式:MOVdst,src操作:dstsrc把一个字节或字的操作数从源地址传送至目的地址【例3.8】MOVCX,AX若(AX)=1A90H,执行该指令后,
(CX)=1A90H,(AX)=1A90H不变【例3.9】MOV DI,[BX+20H] 执行指令前,若(DS)=1000H,(BX)=2000H,则EA=2000H+20H=2020H,而(12020H)=56,(12021H)=78H
执行指令后,(DI)=7856H
(一).通用型传送指令3.4.1数据传送指令10/8/2023MOV传送指令(一).通用型传送指令3.4.1数据传送指令31注意: 1、源和目的操作数不能都是存储器数2、目的操作数不能是立即数,也不能是CS寄存器3、不允许两个段寄存器之间传送数据4、立即数不能直接送段寄存器5、不影响标志位(一).通用型传送指令3.4.1数据传送指令10/8/2023注意: 1、源和目的操作数不能都是存储器数(一).通用型传32例如:MOV指令-寄存器传送: MOVAL,BL ;(AL)←(BL) MOVCX,AX ;(CX)←(AX) MOVSP,AX ;(SP)←(AX)MOV指令-立即数传送: MOVCL,4 ;(CL)←4,字节传送 MOVDX,0FFH;(DX)←00FFH,字传送 MOVSI,200H ;(SI)←0200H,字传送3.4.1数据传送指令(一).通用型传送指令10/8/2023例如:3.4.1数据传送指令(一).通用型传送指令10/833例如:MOV指令-寄存器与存储器之间传送 MOV[DX],AX;((DX))AX
MOVAL,[BX] ;(AL)
DS:((BX))MOVDX,[BP+4] ;(DX)
SS:((BP+4))MOVAL,BUFFER;BUFFER是已定义的存储单元符号地址MOV指令-段寄存器传送 MOVSS,AX ;(SS)(AX) MOVDS,DAT[SI+BX]MOV[BP+DI],ES3.4.1数据传送指令(一).通用型传送指令10/8/2023例如:3.4.1数据传送指令(一).通用型传送指令10/834例题:判断下列指令是否正确:MOVDS,ES ;非法指令MOVDS,100H ;非法指令修正:movax,es movds,ax修正:movax,100hmovds,axMOVAX,BLMOV100H,DXMOV[DI],200修正:MOVAX,BX修正:MOV[0100H],DX修正:MOVBYTEPTR[DI],200BYTEPTR说明是字节操作3.4.1数据传送指令(一).通用型传送指令10/8/2023例题:判断下列指令是否正确:MOVDS,ES ;非法指令35MOVDAT[BX+DI],AXMOVAREA2,AREA1
;假设AREA和AREA是两个字变量修正:MOVAX,AREA2MOVAREA1,AX问题:如何在存储器中传送一个数据块?3.4.1数据传送指令10/8/2023MOVDAT[BX+DI],AX3.4.1数据传送指令362.交换指令格式:
XCHGDST,SRC注意:1、dst与src不能同时为内存单元;2、不能使用CS、IP作为操作数。3、不影响标志位例:XCHGAX,BXXCHGBX,[1000H]
例:读下列程序段,写出AX,BX的内容.MOVAX,1234HMOVBX,5678HPUSHAXPOPBXXCHGAX,BXHLT(一).通用型传送指令3.4.1数据传送指令10/8/20232.交换指令(一).通用型传送指令3.4.1数据传送指令1373.堆栈操作指令堆栈是一个“后进先出FILO”(或说“先进后出FILO”)的主存区域,位于堆栈段中;SS段寄存器记录其段地址堆栈只有一个出口,即当前栈顶;用堆栈指针寄存器SP指定堆栈只有两种基本操作:进栈和出栈两条指令PUSH和POP10/8/20233.堆栈操作指令堆栈是一个“后进先出FILO”(或说“先进后38(1)入栈指令PUSH指令格式:PUSHsrc执行操作:(1)(SP)←(SP)-2,(2)((SP))←(src)L,((SP+1))←(src)H标志位:不影响。【例3.11】PUSHAX指令执行前,若(SS)=2000H,(SP)=0008H, (AX)=12C3H。指令执行后:栈顶指针(SP)=(SP)-2=0008-2=0006H, 栈顶字单元为12C3H,(一).通用型传送指令指令3.4.1数据传送指令10/8/2023(1)入栈指令PUSH(一).通用型传送指令指令3.4.139(一).通用型传送指令3.4.1数据传送指令PUSHAX入栈操作过程示意图10/8/2023(一).通用型传送指令3.4.1数据传送指令PUSH40(2)出栈指令POP指令格式:POPdst执行操作:(dst)L←((SP)),(dst)H←((SP+1)),(SP)←(SP)+2标志位:不影响。POPmem16/reg16/segreg【例3.14】POPBX指令执行前,若(SS)=2000H,(SP)=0006H,栈顶内容为1278H,即:(20006H)=78H,(20007H)=12H。指令执行后:(BX)=1278H栈顶指针(SP)=(SP)+2=2008H
10/8/2023(2)出栈指令POP10/8/202341POPBX出栈操作过程示意图10/8/2023POPBX出栈操作过程示意图10/8/202342例:设(SS)=2000H,(SP)=00C0H,执行下述指令后,SP的值=?物理地址PA=?1)PUSHAX;SP=SP-2=00C0-2=00BEH,PA=200BEH2)PUSHBX;SP=00BE-2=00BCH,PA=200BCH3)POP;SP=00BC+2=00BEH,PA=200BCH(一).通用型传送指令3.4.1数据传送指令10/8/2023例:设(SS)=2000H,(SP)=00C0H,执行下述指431.换码指令:格式:XLAT操作:(AL)((AL+BX))例:读下列程序段,写出AL,BX的内容
MOVBX,1000HMOVAL,3XLATHLT30313239…1000H1001H1009HTABLE(二)累加器专用传送指令3.4.1数据传送指令10/8/20231.换码指令:30313239…1000H1001H100944XLAT指令的功能10/8/2023XLAT指令的功能10/8/2023452.输入输出指令1)、直接寻址:寻址空间为:0~255字节格式:INAL,nOUTn,ALINAX,NOUTN,AX2)、间接寻址:寻址空间为:0000H~FFFFH
格式:INAL,DXOUTDX,ALINAX,DXOUTDX,AX注:1、只能用累加器作为执行输入/输出过程的机构。2、用直接输入/输出指令时,寻址范围为1~255。
3.4.1数据传送指令(二)累加器专用传送指令10/8/20232.输入输出指令3.4.1数据传送指令(二)累加器专用461.取有效地址
格式:LEAreg16,mem
【例3.18】设(BX)=1000H,(BP)=6000H,(SI)=3500H,DAT的偏移地址为20H,指出分别执行下列指令后的结果。LEA BX,[BX+50H];执行指令后,(BX)=1050HLEA DI,DAT[BP][SI] ;执行指令后,(DI)=6000H+3500H+20H=9520HLEA BP,[3456H];执行指令后(BP)=3456HLEA BX,DAT ;执行指令后(BX)=0020H10/8/20231.取有效地址
格式:LEAreg16,mem
【472.传送指针到ES格式:LESreg16,mem32reg(EA),ES(EA+2)3.传送指针到DS格式:LDSreg16,mem32reg(EA),DS(EA+2)(三)目标地址传送指令3.4.1数据传送指令10/8/20232.传送指针到ES(三)目标地址传送指令3.4.1数据传48例题:LDS
DI,[2000H](DS)=1000H12000H12001H12002H12003H5AH34H00H30H(DI)=345AH(DS)=B521H(三)目标地址传送指令3.4.1数据传送指令10/8/2023例题:LDSDI,[2000H]12000H5AH(491读标志:LAHF
2.设置标志:SAHF3.标志寄存器入栈:
PUSHF把标志推入堆栈。
SP
SP-2,PSW(FLAGH)入栈4.标志寄存器出栈:
POPFPSW(FLAG)
[SP+1],[SP]
SP
SP+2D7D6D5D4D3D2D1D0SFZFAFPFCFFLAG(四)标志传送3.4.1数据传送指令10/8/20231读标志:LAHFD7D6D5D450例:下面这些指令哪些是正确的?哪些是错误的?如是错误的,请说明原因。1)MOVDS,AX ()
2)MOV [BX],[1000] ()
3)PUSH CS()
4)POPCS ()
5)IN BX,DX ()
6)MOV1000H,AX()
7)MOVAX,BL()
8)OUT300H,AX()
9)OUT20H,AL()
3.4.1数据传送指令10/8/2023例:下面这些指令哪些是正确的?哪些是错误的?如是错误的,请说51例:说明下面程序执行后,AX,CX,DI的内容是什么?
MOVDI,3500H MOVCX,0010H MOVAX,0000H PUSHDIPOPCXXCHGAX,CX
(AX)=3500H,(CX)=0000H,(DI)=3500H3.4.1数据传送指令10/8/2023例:说明下面程序执行后,AX,CX,DI的内容是什么523.4.2算术运算指令
加法:ADD、ADC、INC减法:SUB、SBB、DEC、DAS乘法:MUL、IMUL、AAM除法:DIV、IDIV、AAMAAA、DAA、AAS、DAS、AAM、AAD3.4.2算术运算指令10/8/20233.4.2算术运算指令
加法:ADD、ADC、IN531.不带进位位的加法格式:ADDDST,SRC;DST
DST+SRC例:ADDAL,50H;(AL)
AL)+50H ADD[BX+DI],AX2.带进位位的加法格式:ADCDST,SRC;DST
DST+SRC+CF例:ADCAX,SI;(AX)
(AX)+(SI)+CF ADCDX,[SI]注意:指令影响标志AF、OF、PF、SF、ZF,CF。
(一)加法指令3.4.2算术运算指令10/8/20231.不带进位位的加法(一)加法指令3.4.2算术运算指令543.加一指令格式:INCsrc;src
src+1将操作数内容加一,再回送操作数。例:INCAX;(AX)
(AX)+1INCBL;(BL)
(BL)+1注意:INC指令影响标志AF、OF、PF、SF、ZF,但不影响进位标志CF。例:读程序: MOVAL,1 MOVBL,0FFH ADDAL,BL执行指令序列后,(AL)=00H),CF=1,OF=0。3.4.2算术运算指令(一)加法指令10/8/20233.加一指令3.4.2算术运算指令(一)加法指令10/8554.非组合BCD码十进制校正AAA操作:执行AAA,若AL低4位的值大于9或AF=1,则在低4位加6,同时置CF=1,AH+1。注意:AAA指令影响标志AF、CF.例:8+7=15MOVAL,8HMOVBL,7HADDAL,BL;(AL)=0FH,AF=0AAA;(AL)=15H,AF=1,CF=1
AF1,CFAF00001000(8)+00000111(7)00001111(FH)+0000011000010101(一)加法指令3.4.2算术运算指令10/8/20234.非组合BCD码十进制校正AAA00565.组合BCD码十进制校正DAA操作:执行DAA,若AL的低4位的值大于9或AF=1,则加06H;若AL的高4位的值大于9,则加60H。注意:DAA指令影响标志AF、CF、PF、SF、ZF。例:
89+75=164
MOVAL,89HMOVBL,75HADDAL,BL;(AL)=0FEH,AF=0,CF=0DAA
;(AL)=64H,CF=1
3.4.2算术运算指令(一)加法指令10001001(89)+01110101(75)11111110(FEH)+0110011010110010010/8/20235.组合BCD码十进制校正DAA3.4.2算术运算指令(一)57例3-1:两个十进制数2964,4758放在BCD1和BCD2开始的单元,低位在前,高位在后,结果放在BCD3中.
BCD1DB64H,29HBCD2DB58H,47H
BCD3DB?,?MOVAL,BCD1ADDAL,BCD2;(AL)=0BCHDAA;(AL)=22H,MOVBCD3,ALMOVAL,BCD1+1
ADCAL,BCD2+1DAAMOVAL,BCD3+12964+475877223.4.2算术运算指令(一)加法指令10/8/2023例3-1:两个十进制数2964,4758放在BCD1和BCD581.不带借位的减法格式:SUBDST,SRC;DST
DST-SRC例:
SUBBX,CX;(BX)(BX)-(CX)SUBWORDPTR[DI],1000H2.带借位的减法格式:SBBDST,SRC
DST
DST
SRC
CF
例:
SBBAX,2030H;执行:(AX)
(AX)
2030H
CFSBBDX,[BX+20H]
3.4.2算术运算指令(二)减法指令10/8/20231.不带借位的减法3.4.2算术运算指令(二)减法指令10/593.减量指令
格式:DECDST;DST
DST
14.求补指令格式:NEGDST;对DST求补,0-DST例如:MOVAL,1 NEGAL;(AL)=0FFH,CF=1,OF=0,SF=15.比较指令格式:CMPDST,SRC;DST-SRC注意:CMP指令执行相减,但不回送结果,结果只影响标志位CF、OF、SF、ZF。3.4.2算术运算指令(二)减法指令10/8/20233.减量指令3.4.2算术运算指令(二)减法指令1606.非组合BCD码减法十进制校正AAS操作:执行AAA,若AL的低4位的值大于9或AF=1,则在AL的低4位减6,同时置CF=1。结果只影响标志位CF、AF。7.组合BCD码减法十进制校正DAS与AAS相似10/8/20236.非组合BCD码减法十进制校正AAS10/8/202361
例3-2:假设AL=13H,BL=09H,读下列指令,分析单独执行这些指令后的结果.程序片段:1)INCAL;(AL)=14H2)ADDAL,BL;(AL)=1CH3)SUBAL,BL;(AL)=0AH4)DECBL;(BL)=08H5)ADDAL,BL;(AL)=1CHDAA;(AL)=22H3.4.2算术运算指令(二)减法指令10/8/2023例3-2:假设AL=13H,BL=09H,读下列指令,分析62(三)乘法指令
二进制乘法特点:
两个8位数相乘,结果为16位数。两个16位数相乘,结果为32位数。
8086乘法指令特点:
一个乘数总是放在AL(8位)或AX(16位)中;
将DX看成是AX的扩展3.4.2算术运算指令(三)乘法指令10/8/2023(三)乘法指令二进制乘法特点:3.4.2算术运算指令(三)63乘法指令分:无符号数MUL
有符号数IMUL例:3×(-2)=-63×14=42(2AH)3的补码:0011,-2的补码:111014的补码:11101)直接相乘:对无符号数,结果正确。0011(3)
×1110(-2或14)00101010(2A)
3.4.2算术运算指令(三)乘法指令10/8/2023乘法指令分:无符号数MUL
642)有符号相乘:负数复原为原码,并去掉符号位,相乘后,结果添上符号位,再取补码。
0011(3)
×0010(2)00000110(6)
结果添上负号,1
0000110,再取补码:11111001+1=11111010=FAH=-63×(-2)=-6,结果正确对于3×14,结果错误。3.4.2算术运算指令(三)乘法指令10/8/20232)有符号相乘:负数复原为原码,并去掉符号位,相乘后,结果添651、无符号数乘法
格式:MULsrc;(AX)(AL)×src,字节;(DX,AX)(AX)×src,字
8位乘法
16位乘法
AX操作数DXAX(16位)(16位)(32位)AL操作数AHAL(8位)(8位)(16位)
3.4.2算术运算指令(三)乘法指令10/8/20231、无符号数乘法AX操作数DXAX(16位662、带符号数的乘法
格式:IMULsrc字节乘:(AX)
(AL)*src,字乘:(DX,AX)
(AX)*src,字乘例:IMULBL;AL的内容乘以BL的内容,结果送AX
IMULDI;AX的内容乘以DI的内容,结果送DX.AX
IMULBYTEPTR[DI];
AL的内容乘以DI所指单元的内容,结果送AX
3.4.2算术运算指令(三)乘法指令10/8/20232、带符号数的乘法3.4.2算术运算指令(三)乘法指令10/67例:4902H×403AH,结果送0510H~0513H单元.
MOVAX,4902HMOVBX,403AHMULBXMOV[0510H],AXMOV[0512H],DX
3.4.2算术运算指令(三)乘法指令10/8/20233.4.2算术运算指令(三)乘法指令10/8/202368(四)除法指令
1、无符号数除法格式:
DIVsrc:字节除:(AX)
src,(AL)
商,(AH)
余数字除:(DX.AX)
src,(AX)
商,(DX)
余数注意:被除数在累加器中,且必须是除数的两倍字长。
3.4.2算术运算指令(四)除法指令10/8/2023(四)除法指令
1、无符号数除法3.4.2算术运算指令(698位除法:
被除数(16位)除数(8位)
余数(8位)商(8位)AHAL操作数AHAL3.4.2算术运算指令(四)除法指令10/8/20238位除法:AH70DXAX操作数DXAX16位除法:
被除数(32)除数(16)
余数(16)商(16)3.4.2算术运算指令(四)除法指令10/8/2023DXAX操作数DXAX712、有符号数除法格式:IDIVsrc
字节除:(AL)
AX
src(商),(AH)
余数,字除:(AX)
(DXAX)
src(商)(DX)
余数3、扩展字节为字CBW
将AL寄存器的符号位扩展到AH中。(AL)<80H,执行CBW后,(AH)=00H。(AL)>=80H,执行CBW后,(AH)=FFH。3.4.2算术运算指令(四)除法指令10/8/20232、有符号数除法3.4.2算术运算指令(四)除法指令10/8724、扩展字为双字CWD
(DX,AX)(AX)将AX寄存器的符号位扩展到DX中。(AX)<8000H,执行CWD后,(DX)=0000H。(AL)>=8000H,执行CWD后,(DX)=FFFFH。10/8/20234、扩展字为双字CWD10/8/202373例3-3:设AL=-2,BL=-1,编程求-2/-1=?,将商存DL单元。 MOVAL,-2;(AL)=0FEH MOVBL,-1;(BL)=0FFH CBW;(AX)=0FFFEH IDIVBL;(AL)=2,(AH)=0 MOVDL,AL HLT3.4.2算术运算指令(四)除法指令10/8/2023例3-3:设AL=-2,BL=-1,编程求-2/-1=?,将74例3-4:试计算(X*Y+Z)/X,X,Y,Z都是16位无符号数,结果存在S开始的单元.XDW304YDW10ZDW200SDW?,?
MOVAX,XMULYADDAX,ZADCDX,0DIVXMOVS,AXMOVS+2,DX
304100BE0DXAX2000CA83.4.2算术运算指令(四)除法指令10/8/2023例3-4:试计算(X*Y+Z)/X,X,Y,Z都是16位无符755.非组合BCD码的乘法校正
要求乘数和被乘数用非组合的BCD码表示。
AAM;(AH)
(AL)/(0AH)(商);(AL)
余数注意:AAM指令紧跟MUL之后。6.非组合BCD码除法校正
AAD (AL)
10*(AH)+(AL),(AH)
0
被除数为二位的非压缩BCD码,存AX中,除数为一位的非压缩BCD码。注意:AAD指令应该在除法指令之前。3.4.2算术运算指令(四)除法指令10/8/20235.非组合BCD码的乘法校正3.4.2算术运算指令(四)除763.4.3逻辑运算指令、移位指令逻辑指令非循环移位指令循环移位指令3.4.3逻辑运算指令、移位指令10/8/20233.4.3逻辑运算指令、移位指令逻辑指令3.4.3逻辑运77(一)、逻辑指令ANDdst,srcORdst,srcXORdst,srcNOTdstTESTdst,src例:ANDAX,BXANDAH,0FHORAL,0F0H;TESTAL,01;测试AL的D0=1?XORAX,AX;将AX清零3.4.3逻辑运算指令、移位指令(一)逻辑指令10/8/2023(一)、逻辑指令ANDdst,src78例3-7:设AH=10011101,对AH的高四位置零,低四位保持不变。ANDAH,0FH
10011101AND0000111100001101例3-8:ORAH,00001101BORAH,0F0H00001101OR11110000
111111013.4.3逻辑运算指令、移位指令(一)逻辑指令10/8/2023例3-7:设AH=10011101,对AH的高四位置零,低四79例3-9:使AL中的数,第0、1位取反。MOVAL,01010001B;送操作数XORAL,03H;送特征数00000011HLT;暂停
01010001(AL)
XOR00000011010100103.4.3逻辑运算指令、移位指令(一)逻辑指令10/8/2023例3-9:使AL中的数,第0、1位取反。80例3-10:测试AL中的第0、1、2位是否为零。MOVAL,48HTESTAL,07H;测AL的0、1、2位HLT
01001000AND00000111000000003.4.3逻辑运算指令、移位指令(一)逻辑指令10/8/2023例3-10:测试AL中的第0、1、2位是否为零。81(二)、非循环移位指令SHLdst,count;逻辑左移SHRdst,count;逻辑右移SALdst,count;算数左移SARdst,count;算数右移CML00MLCCML0MLC3.4.3逻辑运算指令、移位指令(二)非循环移位指令10/8/2023(二)、非循环移位指令CM82注意:移位指令影响标志位CF、OF、PF、SF和ZF。如果只移一位,指令中用1指出移位的位数,如果超过1位,必须用CL预先指明移位的位数。例:SALDX,1;DX中的数左移1位MOVCL,4SALAX,CL;AX中的数左移4位SHLAL,CL;SHRAL,CL;AL中的数右移4位3.4.3逻辑运算指令、移位指令(二)循环移位指令10/8/2023注意:移位指令影响标志位CF、OF、PF、SF和ZF。3.483例3-11A:X乘以10的例子。 MOVAL,X SHLAL,1 ;X*2 MOVBL,AL SHLAL,1 ;X*4 SHLAL,1 ;X*8 ADDAL,BL ;X*8+X*23.4.3逻辑运算指令、移位指令10/8/2023例3-11A:X乘以10的例子。3.4.3逻辑运算84(三)、循环移位指令ROLdst,count;左小循环RORdst,count;右小循环RCLdst,count;左大循环RCRdst,count;右大循环例:ROLAL,1操作:AL:1001000100100011;CF=1例:MOVCL,2ROLBH,CL操作:BH:10101111 ;CF=0
101111103.4.3逻辑运算指令、移位指令(二)循环移位指令10/8/2023(三)、循环移位指令ROLdst,count;左小循环例85SHL和SAL指令的功能10/8/2023SHL和SAL指令的功能10/8/202386SHR指令的功能10/8/2023SHR指令的功能10/8/202387SAR指令的功能10/8/2023SAR指令的功能10/8/202388ROL指令的功能10/8/2023ROL指令的功能10/8/202389ROR指令的功能10/8/2023ROR指令的功能10/8/202390RCL指令的功能10/8/2023RCL指令的功能10/8/202391RCR指令的功能10/8/2023RCR指令的功能10/8/202392第四讲串操作指令控制转移指令系统功能调用简单程序调试10/8/2023第四讲串操作指令10/8/2023933.4.4串操作指令(A)、串操作的特点1)、SI寻址源操作数,段地址在DS,DI寻址目的操作数,段地址在ES;2)、每次操作后,SI、DI自动修改:DF=0,SI和DI加1或(+2),DF=1,SI、DI减一或减二。3)、若源字串和目的字串在同一段中,则把DS和ES设成相同数字。4)、通过重复前缀实现串操作3.4.4串操作指令特点10/8/20233.4.4串操作指令(A)、串操作的特点3.4.494(B)、重复前缀:1、REP(1).若(CX)=0,退出重复操作;(2).(CX)≠0,执行串操作一次,(CX)
(CX)-1,
根据指令修改SI、DI,转(1)。2、相等重复前缀REPZ(REPE)(1).若(CX)=0,或ZF=0,退出重复操作;(2).(CX)≠0,执行串操作一次,(CX)
(CX)-1,根据指令修改SI、DI,转(1)。用途:用于比较两个字串,找出不同的字。3.4.4重复前缀10/8/2023(B)、重复前缀:1、REP3.4.4重复前缀10/8953、不相等重复前缀REPNZ(REPNE)(1).若(CX)=0,或ZF=1,退出重复操作;(2).(CX)≠0,执行串操作指令一次,(CX)
(CX)-1,根据指令修改SI、DI。用途:1)在一个字串中,找到需要的字。2)用于比较两个字串,找出相同的字串。3.4.4重复前缀10/8/20233、不相等重复前缀REPNZ(REPNE)3.4.496(一).串传送指令:MOVSB/MOVSW
字节操作:MOVSB字操作:MOVSW1).SI指向源串(数据段DS),DI指向目的(附加段ES);2).CX置入传送的字串数;3).CLD清DF=0:对字节操作:(SI)←(SI)+1;(DI)←(DI)+1);
对字操作:(SI)←(SI)+2;(DI)←(DI)+2;STD置DF=1:字节操作:(SI)←(SI)-1,(DI)←(DI)-1;对字操作:(SI)←(SI)-2;(DI)←(DI)-2;4).REPMOVSB,重复前缀,每传送一次,CX中的值减一。((ES:DI))←((DS:SI))标志位:不影响标志位10/8/2023(一).串传送指令:MOVSB/MOVSW字节操作:97例3-12:
将100个字节,从地址为AR1单元传送到地址为AR2单元区.LEASI,AR1;SI指向源串地址LEADI,AR2;DI指向目的串地址MOVCX,100;置计数器CLD;清方向标志REPMOVSB;将源地址的100个字节传送到目的地址单元HLT3.4.4串传送指令10/8/20233.4.4串传送指令10/8/202398(二)串比较指令CMPS执行的操作:源串-目的串:((SI))-((DI)) DF=0: (DI)
(DI)+1(字操作+2) (SI)(SI)+1(字操作+2) DF=1: (DI)
(DI)-1(字操作-2) (SI)(SI)-1(字操作-2)标志位:A、C、O、P、S,z在CMPSW/CMPSB前使用重复前缀:用REPZ/REPE,表示两个字串比较相等时继续下次比较,若不相等则退出比较。用途:用于比较两个字串,找出第一个不相等的字符。3.4.3串比较指令CMPS10/8/2023(二)串比较指令CMPS执行的操作:3.4.3串比较指令99
【例3-13】检验一段被送过的数据是否与原串完全相同.若相同,在RESULT置0,否则置0FFH。STR1DB1,2,3,4,5,6,7,7,8,0STR2DB1,2,3,4,5,6,7,8,9,0RESULTDB?
MOVSI,OFFSETSTR1 MOVDI,OFFSETSTR2 MOVCX,10 CLD REPZCMPSB JNZNOEQU;串不相等转 MOVAL,0 JMPOUTPUTNOEQU: MOVAL,0FFHOUTPT: MOVRESULT,ALSTOP: JMPSTOP3.4.3串比较指令CMPS10/8/2023 【例3-13】检验一段被送过的数据是否与原串完全相同.若相100(三)字串检索指令:
SCASB/SCASW
操作:AL(AX)—((DI))(DI)
(DI)±1(字操作:±2)用AL或AX中的一个字串和位于ES段由DI指出的内存单元的字节或字比较。
功能:从一个字串中查找一个与AL或AX中不同的字符,或寻找一个相同的字符.3.4.3字串检索指令10/8/2023(三)字串检索指令:
SCASB/101(四)取字串指令:
LODSB/LODSW执行的操作:(AL)或(AX)((SI))(SI)
(SI)±1(或±2)将位于DS段由SI指出的内存单元的字节或字的内容取到AL或AX中。注意:因为取来的字或字节放在AX或AL中,LODSB/LODSW前面不能加前缀。(五)存储指令:
STOSB/STOSW
执行的操作:((DI))
(AL)(或AX)(DI)
(DI)±1(或±2)3.4.3取字串指令存储指令10/8/2023(四)取字串指令:
LODSB/LOD102例3:将0404H单元开始的256单元清零。
CLD
;清方向标志
LEADI,0404H
;DI指向字串地址
MOVCX,256;共256个字节
XORAX,AX;AX清零REPSTOSBHLT
10/8/2023例3:将0404H单元开始的256单元清零。10103例3-14:
从地址为BLOCK开始单元,存放100个字节的字符串,找出第一个字符$(ASCII码24H),将$的第一个地址存入BX中,否则将BX清零.
1)分析:要求找指定字符$,可以用指令SCASB;重复前缀用REPNZ,表示表示两个字串比较不相等时继续,否则退出循环$的地址应为多少?
1031332445DIDI1000H1001H1002H1003H….3.4.3字串处理例题10/8/2023例3-14:从地址为BLOCK开始单元,存放100个字节的1042).程序段: MOVDI,1000H;送目标串首地址 MOVCX,256 CLD;清方向标志 MOVAL,‘$’
REPNZSCANB;AL-[DI] JZFOUND;找到$,转 MOVBX,0 JMPSTOPFOUND: DECDI;退回到$所在地址 MOVBX,DI;$所在地址送BX JMPSTOPSTOP: HLT3.4.3字串处理例题10/8/20232).程序段:3.4.3字串处理例题10/8/2023105例3-15:P84:统计数据块中正数与负数的个数.并将正数与负数分别送到两个缓冲区。BLOCK DB-1,-3,5,6,-2,0,20,10PLUS_D DB8DUP(?);正数缓冲区MINUS_D DB8DUP(?);负数缓冲区PLUS DB0MINUS DB0MOVSI,OFFSETBLOCKMOVDI,OFFSETPLUS_DMOVBX,OFFSETMINUS_DMOVCX,8
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公交车驾驶员安全培训
- 术后预防静脉血栓护理
- 麻醉机的安全使用
- 2025年梅花灯笼元素元旦喜庆模板
- 大班戴口罩课件
- 2020-2021学年人教部编版语文六年级上册-《丁香结》教案
- 成人黄疸护理诊断和措施
- 信息资源的重要性
- 北师大版2024-2025学年北京丰台第二中学初中数学九年级第一学期末模拟测试(解析版)
- 环境有机化学(山东联盟)知到智慧树章节测试课后答案2024年秋潍坊学院
- 职业暴露针刺伤应急预案演练脚本-
- 横河涡街流量计DY说明书
- 分数概念表述和分数除法运算的比较研究及其对教学的启示
- 《果实和种子》PPT课件【精编版】
- DB51-T 3039-2023大熊猫国家公园保护站点网格化管理建设规范
- 儿童戏剧文学与儿童影视文学
- 统编版高中历史《挽救民族危亡的斗争》教学设计
- GB 5749-2022生活饮用水卫生标准
- 住宅小区业委会考核细则
- GB 19592-2004车用汽油清净剂
- FZ/T 14039-2017棉氨纶印染弹力灯芯绒
评论
0/150
提交评论