计算机硬件技术-第3章 微处理器指令系统_第1页
计算机硬件技术-第3章 微处理器指令系统_第2页
计算机硬件技术-第3章 微处理器指令系统_第3页
计算机硬件技术-第3章 微处理器指令系统_第4页
计算机硬件技术-第3章 微处理器指令系统_第5页
已阅读5页,还剩143页未读 继续免费阅读

下载本文档

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

文档简介

JUST《计算机硬件技术基础》

凌青华

江苏科技大学计算机科学与工程学院电子信箱:lingee_2000@163.com联系电话于作业微型机硬件系统包括哪些主要部件?冯诺依曼型计算机体系的基本思想是什么?存储程序+执行程序十进制数转换为二进制数:整数部分注意逆序取余,小数不要丢掉小数点16位负数的补码表示:+65=01000001,-65=10110000补码的运算注意仅有二进制数才有补码的概念JUST复习计算逻辑地址1234H:ABCDH对应的物理地址。8086内部的寄存器有哪些?什么是指令?指令的格式一般是什么?指令MOVAX,DS:[1234H]的含义?JUST第3章微处理器的指令系统8086的寻址方式数据传送类指令算术运算类指令逻辑运算和移位循环类指令串操作类指令程序控制类指令处理器控制类指令CPU指令集JUST3.18086/8088的寻址方式8086/8088的寻址方式分为两种不同的类型:数据寻址方式和程序存储器寻址方式。前者是寻址操作数地址,后者是寻址程序地址(在代码段中)在8086指令系统中,数据寻址方式可分为8种:

①立即寻址⑤寄存器相对寻址

②直接寻址⑥基址-变址寻址

③寄存器寻址⑦相对的基址-变址寻址

④寄存器间接寻址⑧隐含寻址JUST一.立即寻址操作数直接由指令给出——立即数立即寻址只能用于源操作数例:

MOVAX,1C8FHMOVBYTEPTR[2A00H],8FH

MOV2A00H,AX;错误!

JUST立即数操作码低8位高8位代码段立即寻址指令在存储器中的存放形式存储器MOV操作码02H31HAHAL代码段AX例3-1MOVAX,3102H

执行后,AH=31H,AL=02HJUST二.直接寻址指令中直接给出操作数的16位偏移地址偏移地址也称为有效地址(EA,EffectiveAddress)默认的段寄存器为DS,但也可以显式地指定其他段寄存器——称为段超越前缀偏移地址也可用符号地址来表示,如ADDR

例:

MOVAX,[2A00H]MOVDX,ES:[2A00H]MOVSI,TABLE_PTRJUST例3-2MOVAX,[3102H]AL(3102H),AH(3103H)如果DS=2000H则操作数的物理地址为:

20000H+3102H=23102H指令执行后:AX=MOV操作码02H31HAHAL23102HCDHABH存储器代码段数据段..ABCDHJUST字长不同寄存器与段无关三.寄存器寻址操作数在寄存器中源操作数与目的操作数字长要相同寄存器寻址与段地址无关例:

MOVAX,BXMOV[3F00H],AXMOVCL,ALMOVAX,BLMOVES:AX,DX××JUSTAXSI2233H2233H例3-4MOVSI,AX;SIAX

指令执行前:AX=2233H

指令执行后:AX=2233H,SI=2233H2233HJUST四.寄存器间接寻址操作数的偏移地址(EA)放在间址寄存器中

只有SI、DI、BX和BP可作间址寄存器物理地址=DS左移四位+BX或SI物理地址=ES左移四位+DI物理地址=SS左移四位+BP

例:MOVAX,[BX]MOVCL,CS:[DI]; MOVCX,CS:[DI]MOVAX,[DX]MOVCL,[AX]EA=

BXBPSIDI××默认可以被超越至其他段,用:表示JUST例3-5MOVAX,[SI]若DS=6000H,

SI=1200H则指令执行后,AX=44H33H60001200DSSI6000061200

61200HAX存储器数据段

+)

120044H33H3344HJUST

EA=间址寄存器的内容加上一个8/16位的位移量寄存器相对寻址常用于存取表格或一维数组中的元素——把表格的起始地址作为位移量,元素的下标值放在间址寄存器中EA=BXBPSIDI+8位16位位移量(相对值)

五.寄存器相对寻址JUST物理地址=DS左移四位+BX或SI+位移量物理地址=SS左移四位+BP+位移量物理地址=ES左移四位+DI+位移量基本格式:MOVAX,[BX]XYZMOVAX,XYZ[BX]MOVAX,[BX+XYZ]

例:MOVAX,[SI]40HMOVAX,40H[SI]MOVAX,[SI+40H]五.寄存器相对寻址JUST例3-7MOVAX,DATA[BX]若DS=6000H,BX=1000H,DATA=2A00H,

若(63A00H)=66H,(63A01H)=55H

物理地址

=60000H+1000H+2A00H=63A00H指令执行后:AX=5566HJUST六.基址-变址寻址

若操作数的偏移地址:由基址寄存器(BX或BP)给出——基址寻址方式由变址寄存器(SI或DI)给出——变址寻址方式由一个基址寄存器的内容和一个变址寄存器的内容相加而形成操作数的偏移地址,称为基址-变址寻址。EA=BXBP+SIDI注意:同一组内的寄存器不能同时出现。JUST若基址寄存器用BX,则段寄存器用DS物理地址=DS左移四位+BX+SI或DI若基址寄存器用BP,则段寄存器用SS物理地址=SS左移四位+BP+SI或DIJUST例:

MOVAX,[BX][SI]MOVAX,[BX+SI]MOVAX,DS:[BP][DI]

MOVAX,[BX][BP]

MOVAX,[DI][SI]××JUST例3-9MOVAX,[BX][SI]假定:DS=8000H,BX=2000H,SI=1000H则物理地址=指令执行后:AL=AH=80000H+2000H+1000H=83000H(83000H)(83001H)

83000操作码DS

8000BX

2000

+SI

100083000HAHALAX代码段数据段.........YYXXJUST七.相对的基址-变址寻址

在基址-变址寻址的基础上再加上一个相对位移量EA=BXBP+SIDI+8位16位位移量

例:MOVAX,BASE[SI][BX]MOVAX,[BX+BASE][SI]MOVAX,[BX+SI+BASE]MOVAX,[BX]BASE[SI]MOVAX,[BX+SI]BASEJUST例3-10MOVAX,DATA[DI][BX]若DS=8000H,BX=2000H,DI=1000H,DATA=200H则指令执行后AH=(83201H),AL=(83200H)8320083200HAHALAX+

DATA0200操作码代码段数据段.........YYXXDS

8000BX

2000

DI

1000JUST使用相对的基址-变址寻址方式可以很方便地访问二维数组。基址寄存器数组首地址变址寄存器数组元素行址位移量数组元素列址(偏移地址)JUST八.隐含寻址指令中的操作数是隐含的例:MULBL

指令隐含了被乘数AL及乘积AX类似的指令还有:DIV、CBW、MOVS等AL×BL→AX3.18086/8088的寻址方式在8086指令系统中,数据寻址方式可分为8种:

①立即寻址⑤寄存器相对寻址

②直接寻址⑥基址-变址寻址

③寄存器寻址⑦相对的基址-变址寻址

④寄存器间接寻址⑧隐含寻址思考:操作数可从哪儿寻得?即操作数的“家”可能在哪儿?分别对应哪些寻址方式?程序存储器寻址方式堆栈存储器寻址方式串操作指令寻址方式I/O端口寻址方式第3章微处理器的指令系统8086的寻址方式数据传送类指令算术运算类指令逻辑运算和移位循环类指令串操作类指令程序控制类指令处理器控制类指令CPU指令集JUST3.2数据传送类指令通用传送指令:(MOV;XCHG;PUSH;POP)地址传送指令:(LEA;LDS;LES)标志传送指令:(LAHF;SAHF;PUSHF;POPF)累加器专用传送指令:(IN;OUT)JUSTJUST3.2.1通用数据传送指令1、基本传送指令(MOV)指令格式:MOVDST,SRC;操作:将SRC内容赋给DST。所有通用传送指令都不影响标志位。JUST立即数段寄存器

存储器

(各种寻址)

通用寄存器12345566??JUST注意:不能用MOV指令实现以下传送1、存储器操作数之间不能直接传送

MOV[1000H],[DI]错应改为

MOVAX,[DI]MOV[1000H],AX2、立即数不能直接传送段寄存器

MOVDS,2000H错应改为

MOVAX,2000HMOVDS,AXJUST3、段寄存器之间不能直接传送

MOVES,DS;错应改为

MOVBX,DSMOVES,BX4、CS只可以作为源操作数例:MOVCS,AX;错

MOVAX,CS;对5、源操作数和目的操作数的宽度必须相同3.2数据传送类指令通用传送指令:(MOV;PUSH;POP;XCHG)地址传送指令:(LEA;LDS;LES)标志传送指令:(LAHF;SAHF;PUSHF;POPF)累加器专用传送指令:(IN;OUT)JUSTJUST2、堆栈指令(PUSH、POP)堆栈(STACK)的概念数据的存储按后进先出(LastInFirstOut——LIFO)原则组织的一段内存区域。JUST堆栈用途存放寄存器或存储器中暂时不使用的数据,在使用这些数据时可方便地将其弹出;调用子程序或发生中断时要保护断点信息(入栈),子程序或中断返回时恢复断点信息(出栈)。JUST断点信息:程序断点地址、标志寄存器及其它能被子程序使用和改变的寄存器。堆栈用途如下图JUST入栈指令(PUSH):格式:PUSHsrc

操作过程分两步完成:(SP)

(SP)-2((SP)+1,(SP))

(src)

功能:把一个字压入由SP指向的堆栈区。 如:PUSHAXJUST例1:PUSH[BX];(设DS:[BX]字单元数据为55AAH)xxHxxHxxHAAH55HxxHSS:[SP]指令执行前指令执行后SS:[SP]高位地址低位地址JUST出栈指令(POP) 格式:POPdst ;

操作:

(dst)

((SP)+1,(SP)) (SP)

(SP)+2

功能:把SP所指向的堆栈顶部的一个字送入目的地址,同时进行修改堆栈指针。 如:POPBXPOPAX

JUST例2:POPBX;设接在例1后执行。AAH55HxxHSS:[SP]指令执行前AAH55HxxHSS:[SP]指令执行后55AAHBX思考SP的初值为1000H,SS=2000H,AX=3040H,BX=5060H,试问:(1)该堆栈段的首地址是多少?末地址是多少?(2)执行指令PUSHAX后,SP的值为多少?(3)再执行PUSHBX及POPAX后,SP、AX、BX的值为多少?(4)此时,SP所指内存空间的数据为多少?(读出一个字)JUSTJUST应注意的问题

堆栈操作都按字操作,“PUSHAL”为错误指令;

PUSH,POP指令的操作数可以是寄存器或存储单元;PUSHCS合法,POPCS非法;执行PUSH指令,(SP)-2

(SP),低字节放在低地址,高字节放在高地址;SP总是指向栈顶;堆栈最大容量即为SP的初值;堆栈中的数据弹出后,数据并没有在堆栈中消失,除非压入新数据,画图时注意;使用堆栈指令保护和恢复现场时,要注意指令的排列顺序,如:PUSHAXPUSHBXPUSHDS......POPDSPOPBXPOPAX3.2数据传送类指令通用传送指令:(MOV;PUSH;POP;XCHG)地址传送指令:(LEA;LDS;LES)标志传送指令:(LAHF;SAHF;PUSHF;POPF)累加器专用传送指令:(IN;OUT)JUSTJUST3、交换指令(XCHG)格式:XCHGdst,src ;(dst)

(src)可以实现:寄存器之间 寄存器和存储器之间注意:存储器之间不能直接交换;段寄存器不能作为操作数;允许字或字节操作。熟悉!!3、交换指令(XCHG)【例3.16】设当前CS=1000H,IP=0064H,DS=2000H,SI=3000H,AX=1234H,(23400H)=CDH,(23401H)=ABH。则执行指令XCHGAX,[SI+0400H]的功能为什么?AX=ABCDH;(23400H)=34H,(23401H)=12HJUST3.2数据传送类指令通用传送指令:(MOV;PUSH;POP;XCHG)地址传送指令:(LEA;LDS;LES)标志传送指令:(LAHF;SAHF;PUSHF;POPF)累加器专用传送指令:(IN;OUT)JUSTJUST专用于传送地址码的指令,可传送存储器的逻辑地址(即存储器操作数的段地址或偏移地址)至指定寄存器中,共包含3条指令:

LEALDSLES3.2.2目标地址传送指令JUST1)LEA(LoadEffectiveAddress)格式:LEAreg16,memReg16—16位通用寄存器;mem—存储单元;功能:将源操作数的偏移地址传送到目的操作数;

注意:源操作数必须以直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址、相对基址变址寻址等方式表示的存储器操作数;目的操作数为一个16位的通用寄存器。JUST例:LEAAX,[DI]设(DI)=1005H执行结果:(AX)=1005H例:LEABX,[BX+SI+0F62H]设(BX)=0400H,(SI)=003CH执行指令后:源操作数偏移地址为:(BX)+(SI)+0F62H=0400H+003CH+0F62H=139EH则(BX)=139EH注意:LEA指令和MOV指令不同【例3.18】LEABX,[SI]指令是将SI指示的偏移地址(SI的内容)装入BX。而MOVBX,[SI]指令则是将由SI寻址的存储单元中的数据装入BX。【例3.19】LEASP,[3768H]该指令是使堆栈指针SP为3768H。复习MOVBX,[SI]LEABX,[SI]已知SI=1000H,DS=2000H,ES=1000H,BX=3456H,SS=3000H

(21000H)=0CDH,(21001H)=23H,(11000H)=23H,(11001H)=0CDH,则执行两条指令后,BX的内容分别是什么?JUSTJUST2)LDS(LoadpointerusingDS)(了解)格式:LDSreg16,mem ;功能:把源操作数指定的4个相继字节的数据分别送指令指定的寄存器及DS寄存器中。(reg16)←(mem) (DS)←((mem)+2)JUST3)LES(LoadpointerusingES)(了解)格式:LESreg16,mem;功能:把源操作数指定的4个相继字节的数据分别送指令指定的寄存器及ES寄存器中。

(reg16)←(mem)(ES)←((mem)+2)JUST例:设

(DS)=0C000H指令LDSSI,[0010H]执行指令后:(SI)=0180H(DS)=2000H

80H01H00H20HC000H:0010H(DS)C0011HC0012HC0013H......存储器C0010HJUST例:设(DS)=B000H(BX)=080AH指令LESDI,[BX]执行指令后: (DI)=05A2H (ES)=4000HA2H05H00H40HB000H:080AH(DS)B080BHB080CHB080DH......存储器(BX)B080AH3.2数据传送类指令通用传送指令:(MOV;PUSH;POP;XCHG)地址传送指令:(LEA;LDS;LES)标志传送指令:(LAHF;SAHF;PUSHF;POPF)累加器专用传送指令:(IN;OUT)JUST3.2数据传送类指令通用传送指令:(MOV;PUSH;POP;XCHG)地址传送指令:(LEA;LDS;LES)标志传送指令:(LAHF;SAHF;PUSHF;POPF)累加器专用传送指令:(IN;OUT)JUSTJUST3.2.3标志传送指令

8086有四条标志传送操作指令:

1)LAHF(LoadAHfromflags)(了解)格式:LAHF;功能:标志寄存器低八位传送给AH

(AH)←(PSW的低字节)JUST2)SAHF(StoreAHintoFlags)(了解)格式:SAHF

功能:AH内容传送给标志寄存器低八位。(PSW的低字节)←(AH)JUST3)PUSHF(PushFlags) 格式:PUSHF ; 功能:标志进栈。(SP)←(SP)-2

((SP)+1,(SP))←(PSW)4)POPF(PopFlags)

格式:POPF; 功能:标志出栈。(PSW)←((SP)+1,(SP))(SP)←(SP)+23.2数据传送类指令通用传送指令;(MOV;PUSH;POP;XCHG)地址传送指令;(LEA;LDS;LES)标志传送指令;(LAHF;SAHF;PUSHF;POPF)I/O数据传送指令;(IN;OUT)JUSTJUST3.2.4I/O数据传送指令

1)输入指令(IN)功能:用于CPU从外设端口接收数据。具体形式有四种:

INAL,data8;从8位端口地址输入一个字节

INAX,data8;从8位端口地址输入一个字

INAL,DX;从16位端口地址输入一个字节

INAX,DX;从16位端口地址输入一个字JUST例1:

INAX,80H;

从地址为80H的端口读入一个字节;例2:

MOVDX,1020H;

将16位端口地址赋给DXINAL,DX;

从(DX)为地址的端口读入16位数据JUST

注意:1)CPU对各个外部设备接口也采用地址编码。8086CPU连接外部设备的地址可以是8位或16位。存储器I/O接口输入设备I/O接口数据总线DB控制总线CB地址总线AB输出设备CPU20位8位或16位JUST

注意:2)8086CPU访问存储器和访问外部设备采用不同的指令形式,外设地址与存储器地址可以重叠。思考:从数据段偏移地址为1234H的内存以及端口地址为1234H的IO接口,分别读一个字至BX和CX。另外:CPU的IO/M’引脚控制存储器或外设被选通,当访问存储器时IO/M’引脚输出低电平,当访问外设时IO/M’引脚输出高电平。JUST

MOVBX,[1234H];从存储器的[1234H]单元读数据,放

入BX。CPU执行该指令使IO/M’=0

MOVDX,1234H

;立即数赋给DX

INAX,DX;从地址为[1234H]的外设读数据,

CPU执行该指令使IO/M’=1存储器I/O接口输入设备I/O接口数据总线DB控制总线CB地址总线AB输出设备CPUIO/M’JUST

2)输出指令(OUT)

功能:用于CPU向外设端口发送数据四种形式:

OUTdata8,AL;向8位地址端口输出一个字节

OUTdata8,AX;向8位地址端口输出一个字

OUTDX,AL;向16位地址端口输出一个字节

OUTDX,AX;向16位地址端口输出一个字注意:IO输入时一定是端口送数据至累加器,输出时一定是累加器向端口送数据JUST3.2数据传送类指令通用传送指令;(MOV;XCHG;PUSH;POP)地址传送指令;(LEA;LDS;LES)标志传送指令;(LAHF;SAHF;PUSHF;POPF)I/O数据传送指令;(IN;OUT)【累加器专用传送指令】3.3算术运算类指令包括:加法指令、减法指令、乘法指令、除法指令3.3.1加法指令ADD(Addition)加法指令ADC(AddwithCarry)带进位加法指令INC(Increment)加1指令AAA(ASCIIadjustforaddition)ASCII加法调整指令(了解)DAA(Decimaladjustforaddition)十进制加法调整指令(了解)JUSTJUST1)不含进位的加法指令ADD指令格式:ADDdest,src;功能:(dest)

(dest)+(src) Src:立即数,通用寄存器,存储器

dest:通用寄存器,存储器例:

ADDCL,10 ADDDX,SI ADDAX,[2F00H] ADD100H[BX],AL ADDBYTEPTR[DI],30H JUST特点:可进行8位或16位的无符号数或有符号数加法运算;

源操作数和目标操作数不能同时为存储器,不能为段寄存器;指令影响标志位8位(有符号)数相加,和超出范围(-128~+127),或16位(有符号)数相加,和超出范围(-32768~+32767),则O=18位(无符号)数相加,和超过255,或16位(无符号)数相加,和超过65535,则C=1,其他标志(S,A,P,Z)由运算结果按定义确定。3.3算术运算类指令【例3.25】寄存器加法。若将AX、BX、CX和DX的内容累加,再将所得的16位的和数存入AX,则加法程序段如下:ADDAX,BX ;AX←AX+BXADDAX,CX ;AX←AX+BX+CXADDAX,DX ;AX←AX+BX+CX+DX3.3算术运算类指令【例3.26】MOVDL,12HADDDL,34H程序执行后,标志寄存器的结果是什么?OF=0(没有溢出),SF=0(结果为正),ZF=0(结果不是0),PF=0(奇偶性为奇),CF=0(没有进位)。JUST2)含进位加法指令ADC(Addwithcarry)格式:ADCdest,src;功能:(dest)←(dest)+(src)+C

C:进位标志C的当前值特点:与ADD同。类型举例:

ADCCX,300 ADCAL,BL ADCDX,[SI]

JUST

用途:ADC指令主要用于多字节运算中。

如:求两个32位数12345678H与0ABCDEFABH之和MOVAX,1234HMOVBX,5678HADDBX,0EFABHADCAX,0ABCDHJUST3)加1指令INC(Incrementby1)格式:INC dest ;功能:(dest)←(dest)+1 dest:通用寄存器、存储器;用途:用于在循环程序中修改循环次数或地址指针。JUST例:

INCDL ;8位寄存器+1

INCSI

;16位寄存器+1而

INC[2100]

;错误,应写成

INCWORDPTR[2100]

存储器内容+1(字操作)又如

INCBYTEPTR[BX][SI]

;字节操作

JUST3.3.2减法指令(Subtraction)

8086有7条减法指令:SUB(Subtraction)不含借位减法指令SBB(SubtractionwithBorrow)含借位减法指令DEC(Decrementby1)减1指令CMP(Compare)比较指令

NEG(Negate) 求补指令(熟悉)AAS(ASCIIAdjustforSubtraction)减法ASCII调整指令(了解)DAS(DecimalAdjustforSubtraction)减法十进制调整指令(了解)JUST1)不含借位减法指令SUB(Subtraction)

格式:SUB:dest,src;功能:(dest)←(dest)-(src)

Src:立即数,通用寄存器,存储器。

Dest:通用寄存器,存储器。例: SUBAL,37H SUBBX,DX

3.3.2减法指令【例3.30】SUBAX,[BX]设当前CS=1000H,IP=60C0H,DS=2000H,BX=970EH。JUST2)含借位减法指令SBB(Subtractionwithborrow)

格式:SBBdest,src;功能:(dest)←(dest)-(src)-C Src: 立即数,通用寄存器,存储器

dest:通用寄存器,存储器例:SBBBX,100H SBBCX,DX SBBWORDPTR100H[BP],100

JUST3)减1指令DEC(Decrementby1)

格式:DECdest

功能:(dest)←(dest)-1dest:通用寄存器、存储器。不能是段寄存器。用途:用于在循环程序中修改地址指针和循环次数。JUST4)求补指令NEG(Negate)

格式:NEGdest;

功能:(dest)←0-(dest)dest:通用寄存器、存储器。操作:把操作数按位求反后末位+1。若AL=00000100=+4,执行NEGAL指令后AL=?AL=11111100=[-4]补;若AL=11101110=[-18]补,执行NEGAL指令后将变成00010010=+18。JUST5)比较指令CMP(Compare)格式:CMPdest,src ;(dest)-(src) 结果不保留,只是用来影响标志位。影响标志:A、C、O、P、S、Z。

src:立即数,通用寄存器,存储器。

dest:通用寄存器,存储器。例:CMPAL,0AH ;寄存器与立即数比较

CMPCX,DI ;寄存器与寄存器比较

CMPAX,[1000H] ;寄存器与存储器比较

CMP[BX+5],SI;存储器与寄存器比较JUST用途:用比较指令来比较两个数之间的关系

(1)根据Z标志,判断两者是否相等;(2)根据C标志,判断两个无符号数的大小;(3)用S、O标志,判断两个带符号数的大小OF=0,若SF=0,则A>B,否则A<BOF=1,若SF=1,则A>B,否则A<B复习判断下列指令书写是否正确MOVAL,BXMOVAL,CLINC[BX]MOV5,ALMOV[BX],[SI]MOVBL,0F5HMOVDX,2000HPOPCSPUSHCSINBX,DXJUST复习编程实现200减去AL中的内容,结果存在DS数据段,偏移地址为DI的内存单元中。JUSTJUST3.3.3乘法指令1)无符号乘法(MUL)格式:MULSRC

操作:

字节操作数:AX←(AL)*(SRC)

字操作数:DX:AX←(AX)*(SRC)2)带符号乘法(IMUL)格式:IMULSRC操作:同MUL,但操作数和乘积均带符号;按有符号数的规则相乘;JUST举例:

MULBL;AX←(AL)*(BL)MULBX;

AX←(AX)*(BX)的低16位DX←(AX)*(BX)的高16位JUST3.3.4除法指令1)无符号除法(DIV)格式:DIVSRC操作:字节除数:AL←(AX)/(SRC)之商

AH←(AX)/(SRC)之余数字除数:AX←(DX:AX)/(SRC)之商

DX←(DX:AX)/(SRC)之余数JUST2)带符号除法(IDIV)格式:IDIVSRC操作:同DIV指令JUST3)字节扩展指令(CBW)(了解)格式:CBW;ConvertBytetoWord

功能:将AL字节扩展成字,符号位及高字节在AH中;4)字扩展指令(CWD)(了解)格式:

CWD;ConvertWordtoDoubleWord

功能:AX扩展成双字,符号位及高字在DX中;注意:这两条指令的作用是为IDIV指令设置的符号扩展指令,用于对被除数AL或AX进行扩展JUST3.3.5十进制调整指令(了解)共六条DAA压缩BCD码的加法十进制调整DAS压缩BCD码的减法十进制调整AAA非压缩BCD码的加法十进制调整AAS非压缩BCD码的减法十进制调整AAM乘法的十进制调整AAD除法的十进制调整3.3算术运算指令加法指令ADD,ADC,INC减法指令SUB,SBB,DEC,NEG,CMP乘法指令MUL,IMUL除法指令DIV,IDIV,CBW,CWD十进制调整指令DAA,DAS,AAA,AAS,AAM,AADJUST3.4逻辑运算和移位循环类指令3.4.1逻辑运算指令AND:逻辑“与”指令TEST:测试指令OR:逻辑“或”指令XOR:(eXclusiveOR)逻辑“异或”指令NOT:逻辑“非”指令JUSTJUST1)“与”指令AND

格式:ANDdest,src;功能:(dest)

(dest)∧(src)

src:立即数、通用寄存器、存储器。

dest:通用寄存器、存储器。

两操作数不能同为存储器操作数操作类型举例:ANDAL,0FH ANDCX,DI ANDSI,[2456H]JUST2)测试指令TEST

格式:TESTdest,src;(dest)∧(src)

src、dest的规则同“AND”

操作:操作数相与,结果不保存,用来改变标志位。操作类型举例:

TESTBH,7 TESTSI,BP TESTDI,1030H[BX] JUST3)“或”指令OR

格式:ORdest,src;

dest:寄存器、存储器。

src:立即数、寄存器、存储器。

不能同时为存储器操作数JUST4)“异或”指令XOR

格式:XORdest,src dest:寄存器、存储器。

src:立即数、寄存器、存储器

按位比较,不相同则为1,相同则为0;

不能同时为存储器操作数JUST5)“非”指令NOT

格式:NOTdest;操作:按位求反操作数:寄存器、存储器,不能是立即数。

JUST逻辑运算指令的应用①屏蔽若干位。(常用指令)

ANDAL,01H;ANDAL,0FH;②使若干位置1(常用指令)

ORBL,0F0H;③清除CF、OF

ANDAL,AL(ANDAL,0FFH;ORBL,BL;……)定义:逻辑运算指令执行后CF,OF为0,AF未定义,其他标志位根据结果确定屏蔽AL的D7~D1,保留D0屏蔽AL高4位,保留低4位使BL高4位置1,低4位不变JUST④求反NOTAL/NOTWORDPTR[BX+DI]⑤对指定位求反

XORAL,0FH;AL高4位不变,低4位求反

XORCL,55H;⑥清除寄存器及CF(常用指令)

XORAX,AX/XORBX,BXXORBYTEPTR[BX],BYTEPTR[BX]×X⊕0=XX⊕1=X逻辑运算指令的应用CL偶数位求反,奇数位不变JUST⑦不改变操作数,测试操作数或操作数的指定位TESTAL,0FFH;由ZF标志判断AL是否为零;也可以用CMP指令。TESTAL,01;由ZF标志判断AL的D0是否为零,;ZF=1,则AL.D0=0

;ZF=0,则AL.D0=1ANDAL,01;也可完成上述功能,但是改变了目的操作数逻辑运算指令的应用JUST3.4.2移位指令共有以下8条SAL(ShiftArithmeticLeft)

算术左移SAR(Shiftarithmeticright)

算术右移SHL(Shiftlogicalleft)逻辑左移SHR(Shiftlogicalright)

逻辑右移ROL(Rotateleft)

循环左移ROR(Rotateright)

循环右移RCL(Rotateleftwithcarry)

带进位循环左移RCR(Rotaterightwithcarry)

带进位循环右移JUST

移位指令的格式

操作码reg/mem,CountCount=1或CL,指定移位次数移1位或移位次数在CL中

SHLAH,1SALSI,CLSALWORDPTR[BX+5],1ROLBH,1ROLDX,CL

字节或字操作,通用寄存器或存储器操作数JUST1)逻辑左移/算术左移指令SHL/SAL

这两条指令实现相同的操作操作示意图如下图,相当于无符号数×2

例:

MOVAH,3FH;

SALAH,1;

MOVCL,2SALAH,CL;0C操作数(AH)=00111111B(63D)(AH)=01111110=7EH(126D)(AH)=11111000=0F8H(248D)JUST2)逻辑右移指令SHR

操作示意图如下:

指令格式举例:

SHRBL,1 SHRAX,CL SHRBYTEPTR[DI+BP],1

相当于无符号数除以2 操作数C0JUST3)算术右移指令SAR

指令操作示意图如下图所示

举例:

MOVAL,88HMOVCL,2SARAL,CL 操作数C执行结果AL=11100010JUST4)不含进位标志循环左移指令ROL

操作示意图如下C操作数

指令格式举例:

ROLBH,1 ROLDX,CL ROLWORDPTR12H[DI],1

JUST5)不含C的循环右移指令ROR

操作示意图如下C操作数JUST6)含C循环左移指令RCL

操作示意图如下 C操作数

指令格式举例:

RCLBX,1 RCLDL,CL

JUST7)含C循环右移指令RCR

操作示意图如下C操作数

指令格式举例:

RCRDI,1 RCRSI,CL JUST注意:标志设置

AF:对AF无定义;

CF:按移入的值或为0或为1;根据移位后的结果设置SF、ZF、PF;

OF:当移动1位时,移位后如果符号位发生变化,则OF=1,符号位不发生变化,则OF=0,移位次数大于1时,OF不定。3.4逻辑运算和移位循环类指令逻辑运算指令AND,TEST,OR,XOR,NOT移位指令SHL,SHR,SAL,SAR循环移位指令ROL,ROR,RCL,RCRJUST3.5串操作指令串操作类指令是唯一能在存储器内的源与目标之间进行操作的指令。为缩短指令长度,串操作指令均采用隐含寻址方式源数据串一般在当前数据段中,即由DS段寄存器提供段地址,其偏移地址必须由源变址寄存器SI提供;目标串必须在附加段中,即由ES段寄存器提供段地址,其偏移地址必须由目标变址寄存器DI提供。JUST3.5串操作指令8086有5种基本串操作:MOVS(Movestring)串传送指令CMPS(Comparestring)串比较指令SCAS(Scanstring)串扫描指令LODS(Loadfromstring)取串指令STOS(Storeintostring)存串指令JUSTJUST串传送指令MOVS

串传送有2种格式:

(1)MOVSB字节传送;把数据段中SI寻址的数据传送到附加段中DI寻址的存储区域中;然后修改SI、DI。

(ES:DI)←(DS:SI);(SI)←(SI)±1;(DI)←(DI)±1

当方向标志D=0时用“+”,D=1时用“-”JUST2000H:1000H附加段(ES)21001H21002H21003H......存储器21000H80H01H9AH20H1000H:0010H数据段(DS)10011H10012H10013H......存储器10010HJUSTMOVAX,1000HMOVDS,AX;数据段地址赋值

MOVAX,2000HMOVES,AX;附加段地址赋值

MOVSI,0013H;源数据块首地址

MOVDI,1003H;目的数据块首地址

MOVCX,4;数据块长度赋计数器

STD//设置方向标志LP:MOVSB;完成一个字节数据传送

DECCX;计数器减一

JNZLP;结果不为0,重复传送

HLTJUSTMOVAX,1000HMOVDS,AX;数据段地址赋值

MOVAX,2000HMOVES,AX;附加段地址赋值

MOVSI,0013H;源数据块首地址(最高位地址)

MOVDI,1003H;目的数据块首地址(最高位地址)

MOVCX,4;数据块长度赋计数器

STDLP:MOVAL,[SI]MOV[DI],ALDECSIDECDIDECCXJNZLPHLTJUST(2)MOVSW

操作:字传送;(ES:DI)←(DS:SI);(SI)←(SI)±2;(DI)←(DI)±2

当方向标志D=0时用“+”,D=1时用“-”可见,该类指令可以实现从存储器到存储器的数据传送;而且传送非常简便JUSTREP重复前缀指令重复串操作执行过程:(1)当(CX)≠0,

(CX)(CX)-1

,执行REP后的串指令。

(2)当(CX)=0

,结束REP,执行下一条指令。REP执行流程图注意:重复前缀不能单独使用,只能附加在串操作指令前面,使串操作重复执行JUST

如上例可用REP操作如下

MOVAX,1000HMOVDS,AXMOVAX,2000HMOVES,AXMOVSI,0010HMOVDI,1000HMOVCX,4;数据块长度赋计数器

CLDREPMOVSB;重复完成字节数据传送

HLT3.5串操作指令8086有5种基本串操作:

MOVS(Movestring)串传送指令

CMPS(Comparestring)串比较指令

SCAS(Scanstring)串扫描指令

LODS(Loadfromstring)取串指令

STOS(Storeintostring)存串指令JUST3.6程序控制类指令控制传送指令包括四种:转移指令(条件转移、无条件转移3.6.1,3.6.2)循环控制指令(3.6.3)过程调用指令(3.6.1P.114)中断指令(3.6.4)JUSTJUST(一)转移指令

转移指令控制程序从一处转换到另一处执行。在CPU内部,转移是通过将目标地址传送给IP来实现的。转移指令包括两种:无条件转移指令、条件转移指令

1、无条件转移指令JMP(Jump)

格式:JMP语句标号

JMPLP;3.6.2条件转移指令JUST2、条件转移指令

1)根据单个条件标志转移①

Z标志

JZ/JNZ

JE/JNE

JumponZero;JumponEqual

②C标志

JC/JNC

③P标志

JP/JNP;JPE/JPO

JumponParity;JumponEven;JumponOddJUST④S标志

JS/JNS⑤O标志

JO/JNO

2)根据两个无符号数大小关系转移(高于、低于)

JB、JNAE;JA、JNBEJBE、JNA;JAE、JNBJZ(或JE)/JNZ(或JNE)JB:JumponBelow;JAE:JumponAboveorEqual

JUST3)根据两个带符号数比较结果转移(大于,小于)

JL(JNGE)

JLE(JNG)JG(JNLE)JGE(JNL)

L—Less;G—Greater;E—Equal注意:所有条件转移指令都是段内(-128~+127)范围内转移。JUST标志转移指令举例计算X-Y的绝对值,X和Y为16位操作数,结果存入result

MOVAX,X;

SUBAX,Y;

JNSNO_NEG;//(X-Y)如为正数,不求绝对值

NEGAX;//求绝对值

NO_NEG:MOVresult,AX;//保存结果JUST根据无符号数大小关系转移举例AX和BX为无符号数,比较大小,将较大的数放入AX中。

CMPAX,BX;

JNBNEXT

;如AX≥BX,不处理

MOVAX,BX;AX<BX,BX送入AX中NEXT:……JUST根据有符号数大小关系转移举例AX和BX为有符号数,比较大小,将较大的数放入AX中。

CMPAX,BX;

JNLNEXT

;如AX≥BX,不处理

MOVAX,BX;AX<BX,BX送入AX中NEXT:……JUST3、过程(子程序)调用指令子程序—程序中具有独立功能的部分编写成独立程序模块。主程序中调用子程序

CALL

子过程名子程序返回指令RET(return)在子程序的结尾,用来返回主程序JUST3.6.3循环控制指令

1、无条件循环

LOOP

语句标号

执行操作:①(CX)←(CX)-1②若(CX)≠0,继续循环;

否则退出循环,执行LOOP指令之后的指令。JUSTMOVAX,0000HMOVBX,0001HMOVCX,000AHLP:ADDAX,BX LOOPLP……JUST

2、条件循环

1)LOOPZ/LOOPE

语句标号

执行操作:①(CX)←(CX)-1②若CX≠0且Z=1,转向目标地址去执行;

否则执行LOOP指令之后的指令。

JUST2)LOOPNZ/LOOPNE

语句标号

执行操作:①(CX)←(CX)-1②若CX≠0且Z=0,转向目标地址去

温馨提示

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

评论

0/150

提交评论