专升本微机原理-清华版-第五章(一)_第1页
专升本微机原理-清华版-第五章(一)_第2页
专升本微机原理-清华版-第五章(一)_第3页
专升本微机原理-清华版-第五章(一)_第4页
专升本微机原理-清华版-第五章(一)_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

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

文档简介

第五章86系列微型计算机指令系统概述5.1指令格式与寻址方式5.2数据传送指令5.3数据操作类指令5.4串操作指令5.5控制类指令概述指令(instruction)是微处理器执行某种操作的命令,微处理器全部指令的集合称为指令系统。指令有两种书写格式:机器指令和符号指令(也叫助记符)。符号指令是用规定的助记符和规定的书写格式书写的指令。符号指令的书写格式为:操作码操作数

MOVAL,1;(1011000000000001)汇编语言、机器语言和汇编程序

assemblylanguageassembler

用助记符编写的程序称为汇编语言程序使计算机执行操作的二进制码称为机器指令(machinecode)汇编语言指令与机器指令是一一对应的用机器指令编写的程序称为机器语言程序,CPU只能执行机器语言程序;将汇编语言指令翻译成机器语言指令称为汇编,此翻译程序称为汇编程序(assembler)Masm.exe:汇编程序一.

汇编语言指令格式[标号:]操作码操作数1,操作数2[;注释]换行表示一条指令结束。

例:

LL:

MOVAX,1090H;取参数1.标号:指令的符号地址2.操作码:指明指令功能。3.操作数(operand):指令操作对象数据、寄存器名、地址及约定符号。4.注释行:说明指令在程序中的作用。

操作码和操作数是指令主体。MOV__move传送XCHG__exchange交换AND__andlogic与逻辑运算XOR__exclusiveor异或MUL__Multiply乘法ROR__rotateright右循环JMP__jump跳转RET__return子程序返回5.1.1指令格式二.机器语言指令格式 操作码[操作数1][操作数2] 有单字节、双字节和三字节指令。汇编语言指令中操作码和操作数是指令主体,称为指令可执行部分,指令表中可查出对应指令代码。举例:

汇编语言:

机器语言:

MOVAX,1000H B80010H MOVDS,AX 8ED8H MOVCX,0008H B90800H101110000000000000010000寻址方式:寻找指令中操作数的方式(在不特别说明的情况下,一般指源操作数)操作数有三种可能的存放方式:直接包含在指令中,例MOVAX,1000H

(B80010H)

立即数称为立即数寻址包含在某个寄存器中,例MOVDS,AX

(8ED8H)

寄存器操作数称为寄存器寻址在内存中存储器操作数(内存操作数)称为存储器寻址(直接寻址、寄存器间接寻址、寄存器相对寻址、基址加变址寻址和相对的基址加变址寻址)5.1.2寻址方式(AddressingModes)

1.立即数寻址操作数作为立即数直接存在指令中,可为字节、字;字;机器语言指令MOV AL,80H;B080HMOV AX,1090H;B89010H

低地址高地址

DS段操作码90H10HAX10H90HAHAL注意:(1)立即数只能是整数。

(2)立即数只能作为源操作数。2.寄存器寻址操作数包含在指令规定的8位或16位寄存器中例,MOVCX,DX(源操作数与目的操作数要匹配)34H12HCX34H12HDX寄存器寻址由于无需从存储器中取操作数,故执行速度快注意:对于16位操作数来说,寄存器可以为AX,BX,CX,DX,SI,DI,SP,BP。对于8位寄存器可以为AH,AL,BH,BL,CH,CL,DH,DL3操作数在内存单元中(直接寻址,寄存器间接寻址)直接寻址

MOVAX,[1070H]

将DS段的1070H和1071H两单元的内容取到AX中寄存器间接寻址操作数在内存中,内存的有效地址由寄存器指出。这些寄存器可以为BX,BP,SI和DI。MOVAX,[BX]:数据段基址寻址用BX寄存器进行间接寻址,默认的段寄存器为DS。寄存器间接寻址(2)MOVBX,[BP]:堆栈段基址寻址用BP寄存器进行间接寻址,默认的段寄存器为SS。(3)MOVAX,[SI]:变址寻址默认的段寄存器为DS。(4)MOVAX,[BX+SI]:基址变址寻址默认的段寄存器为DS。(5)MOVAX,[BX+SI+0050]:相对基址变址寻址默认的段寄存器为DS。3操作数在内存单元中(直接寻址,寄存器间接寻址)内存中的数据:内存实际地址由两部分组成:存储单元所在段的基地址、段内偏移地址(偏移量)MOV

ES:

[3000H],AL

;(ES)*16+3000HES:MOV[3000H],AL段内偏移地址可以由如下三个部分组成(称为偏移地址三元素):基址寄存器的内容(BX、BP)变址寄存器的内容(DI、SI)位移量(0、16位或8位的具体数据)BXDI

++位移量BPSI3操作数在内存单元中(直接寻址,寄存器间接寻址)注意:括号中的内容为内存偏移地址,括号中使用的寄存器只能是BX、BP、DI、SI及其规定的组合。BXDI

++位移量BPSI直接寻址,基址,变址,相对基址,基址变址,相对基址变址由三元素可组合出存储器寻址方式:MOV AX,[基址+变址+位移量]1.MOV AX,[位移量];直接寻址寄存器间接寻址的进一步细分:2.MOV AX,[变址];寄存器间接寻址3.MOV AX,[基址];寄存器间接寻址4.MOV AX,[变址+位移量];寄存器相对寻址5.MOV AX,[基址+位移量];寄存器相对寻址6.MOV AX,[基址+变址];基址加变址寻址7.MOV AX,[基址+变址+位移量];相对的基址加变址寻址由于有两个是相同的,所以实际上相对于内存操作数的寻址方式有5种,即直接寻址和寄存器间接寻址(包含4种)方括号内的值是内存的有效地址,方括号内仅为数值时为直接寻址;方括号内有寄存器BX、BP、SI、DI时为间接寻址。3.直接寻址(1)指令中的操作数部分直接给出操作数的有效地址EA,操作数16位整数,操作数默认在DS段中MOVAX,[3000H];MOV BX,[0020H];MOVAL,[3000H]低地址高地址CS段操作码00H30H34H12H34H12HAXDS段5000053000DS50000300053000+目标寄存器为8位时取一个字节3.直接寻址(2)如果操作数在DS以外的其他段(CS,

SS,

ES)中,指令中必须指明段寄存器MOVAX,ES:[3000H]

26A10030ES:MOVAX,[3000H]低地址高地址CS段操作码00H30H34H12H34H12HAXES段2000023000ES20000300023000+4.寄存器间接寻址(1)操作数地址的偏移量(有效地址EA)存放在基址寄存器BX、BP或变址寄存器SI、DI中;以SI,

DI,BX间接寻址,默认操作数在DS段中MOVAX,[SI]括号中只要出现BP则默认操作数在SS段中,例如:MOVAX,[BP]MOVAL,[BP+SI]MOV BX,[BP+DI+1500H]低地址高地址CS段操作码34H12H34H12HAXSS段7000073000SS70000300073000+MOVAX,[BP]BP4.寄存器间接寻址(2)5寄存器相对寻址(1)数据段基址EA=(基址寄存器)+位移量(8位或16位)BX为基址寄存器DS为默认段寄存器MOVAX,[BX+24H]MOVDX,[BX+1500H]BX中的数值加位移量(2)堆栈段基址EA=(基址寄存器)+位移量(8位或16位)

BP为基址寄存器SS为默认段寄存器MOVBX,[BP]MOVDX,[BP+1500H]BP中的数值加位移量低地址高地址CS段操作码00H15H34H12H34H12HAXDS段7000073500BX150073500+MOVDX,[BX+1500H]DS700002000(3)变址寄存器EA=[变址寄存器+位移量]SI,DI为变址寄存器,DS为默认段寄存器MOVAH,[SI+5]MOVAX,[DI+1500H]变址寻址适用于对一维数组的元素进行操作。6基址加变址寻址EA=[基址寄存器]+[变址寄存器]

MOVAX,[BX+SI]MOVAX,[BX+DI]MOVAX,[BP+SI]MOVAX,[BP+DI]只要用上BP,那么默认的段寄存器就是SS,其他情况下默认DS基址加变址寻址主要用于二维数组操作和二重循环7相对的基址加变址寻址EA=[基址寄存器]+[变址寄存器]+位移量

MOVAL,[BX+SI+50]MOVAL,[BX+DI+1500H]MOVAL,[BP+SI+50]MOVAL,[BP+DI+1500H]主要用于二维数组操作,位移量为数组起始地址例5.1

1.

MOVAL,[1B57H]2.

MOVAX,[BX]3.

MOVAX,[BX+1B57H]4.MOVAX,[DI]5.MOVAX,[DI+1B57H]6.

MOVAX,[BX+DI]7.MOVAX,[BX+SI+100H]另外:

8. MOVAX,1234H9.

MOVAX,BX直接寻址寄存器间接寻址BX寄存器相对间接寻址变址寻址

DI寄存器相对变址寻址基址加变址寻址相对的基址加变址寻址立即数寻址寄存器寻址5.2传送类指令

1.通用数据传送指令

(1)基本传送指令(执行后不影响标志位,源操作数不变)例如,MOVBL,40HMOVAL,BLMOVES,DXMOVAX,[BX]MOV[DI],AXMOVCX,[1000H]MOVDX,5040HMOVWORDPTR[SI],70HMOVBYTEPTR[BX],10HMOVWORDPTR[BX],10H目的操作数源操作数寄存器寄存器立即数内存内存有关操作数的规定1)目标操作数不允许为立即数;×MOV100H,AX;源、目不能同时为内存操作数;×

MOV[0100H],[BX];3)源、目操作数类型必须匹配;×MOVAX,BL;×

MOVAL,1234H;√MOVBYTEPTR[BX],12H4)不能向段寄存器写立即数,需要传送数据给段寄存器时可通过通用寄存器转送;例,

√MOVAX,2000MOVDS,AX

5)以CS为目标的一切指令都是非法的

×MOVCS,AX;6)两操作数不能同时为段寄存器。×

MOVDS,ES;7)使用间接寻址方式时,方括号内的寄存器只能是BX、BP、SI、DI。也不能出现两个以上的同类偏移地址元素。例如,[BX+BP],[DI+SI]是错误的;8)运算类指令不能以段寄存器为操作数×ADDDS,AX;9)一切以存储器为目标的操作数,而以立即数为源操作数的指令必须用前缀指明目的操作数的大小。例,

MOVBYTEPTR[BX],12HMOVWORDPTR[2000H],1234HADDBYTEPTR[BX+SI],56H其它要加前缀的情况举例:1、INCBYTEPTR[BX];DEC WORDPTR[1234H]2、NEGWORDPTR[SI];3、SUBWORDPTR[SI],12H;CMPBYTEPTR[DI],12H4、NOTWORDPTR[SI];ANDWORDPTR[SI],12H;5、SHLWORDPTR[SI],CL;RCLWORDPTR[SI],1;不用加前缀的情况:MOV[BX],AX;MOV[2000H],CX;ADD[BX+SI],DX8086可以进行16位操作,也可以进行8位操作,对内存操作数进行操作时在某些情况下,如果不加前缀CPU无法确定是16位操作还是8位操作。习题(P135)5.1、5.2、5.3、5.4说明:5.1(2)MOVCX,DATA[SI](6)PUSHF5.3写出以下指令中内存操作数所在的物理地址(此题主要测试寄存器所默认的段)例如,MOVAL,[BX+5]答案为:DS*10H+(BX)+55.4(7)MOVDS,2000H5.4题书上有几个答案是错的(2)堆栈操作指令

PUSH源操作数(寄存器、存储器)把字压入堆栈,首先栈指针SP自动减2,再把一个字源操作数进栈PUSHAX、PUSH[BX]、PUSH[1234H]POP目标操作数(寄存器、存储器)把字弹出堆栈,先将栈顶2字节送目标操作数,然后堆栈指针SP自动加2POPAX、POP[BX]、POP[1234H]原栈顶SS段首地址存储器FAH12HFA12CXSP2006H2007HSS2000H新栈顶2008H0200H0008H+-2X16PUSHCX指令操作过程示意SP先减2,然后将CL送入SP,CH送入SP+1对应的单元中新栈顶SS段首地址存储器FAH12HFA12CXSP2006H2007HSS2000H原栈顶2008H0200H0006H++2X16POPCX指令操作过程示意将SP、SP+1对应单元中的内容分别送入CL、CH中,然后SP加2(3)交换操作指令

XCHG目标,源(a)交换字节或字:XCHGAL,BLXCHGAX,BX(b)

寄存器之间,寄存器与内存之间,内存之间(×)(c)XCHG[2530H],CX字交换(d)直接寻址默认数据段DS。(e)不影响标志位七段数码管:abcdefgVccabcdefg发光二极管共阳极显示的十进制数字

gfedcba16进制

00100000040H10111100179H200100100 24H300110000 30H80000000000H(4)换码指令XLAT:查表/译码低地址高地址19H40H24H30H02H78H执行上面指令后AL:30H(只能送到AL中,字节翻译)DS段72000H72003HBX72000+DS70000200079H12H00HXLAT指令隐含的数据段为DS,使用前要先给BX送表的首地址,将偏移量送AL,执行XLAT后,AL的值为偏移量对应表中的值,例如

MOV BX,2000HMOV AL,3XLAT (4)换码指令XLAT:查表/译码指令执行过程:2.目标地址传送指令

LEA:取有效地址指令

(1)LEA目标寄存器,源操作数有效地址传送指令,源操作数为内存操作数,将内存单元的有效地址(而不是内容)传送到16位的通用寄存器LEAAX,[2728H](指令执行后,AX中为2728)MOVAX,[2728H]MOVAX,2728HLEABX,[BP+SI]LEASP,[0482H],常用于传送符号地址(LEABX,TABLE)LEAAL,[2728H];(×)LEAAX,1234H;(×)(2)LDS/LES

:将地址指针装到DS/ES和另一个寄存器LDS/LES目标寄存器,源操作数4个字节的地址指针(段、偏移地址)传送到两个目的寄存器,例如:LDSDI,[2130H],前两字节的内容送DI,后两字节的内容送DS。LESSI,[BX],前两字节的内容送SI,后两字节的内容送ES。显然这两条指令的源操作数不能为立即数LDSDI,5678H;(×)LESSI,386AH;从P115的备注中也可以看出来。(×)3.标志传送指令

LAHF把FR标志寄存器低字节装入AH书p119图

SAHF把AH装入FR标志寄存器低字节

PUSHFPOPFFR标志寄存器进栈/出栈指令4.I/O数据传送指令完成累加器AX、AL和I/O端口之间的数据传送IN累加器,端口号OUT端口号,累加器(1)I/O指令的目的操作数和源操作数是固定搭配;寄存器只用AL、AX、DX(2)端口号为8位时,可直接写端口地址,最多可访问256个端口,端口地址为16位时,端口地址必须放在DX寄存器中,最多可访问65536个端口

INAL,80HINAL,DXINAX,80HINAX,DXOUT80H,ALOUTDX,ALOUT80H,AXOUTDX,AX(3)与AX传送数据时,由两个端口各自传送,

INAX,70H70H端口的内容进AL,71H端口的内容进AH(4)源操作数,目的操作数顺序,IN/OUTIN累加器,端口号

OUT端口号,累加器(5)I/O指令的寻址方式:直接寻址、寄存器寻址5.3数据操作类指令5.3.1算术运算类指令加、减、乘、除运算指令,处理8/16位二进制有符号/无符号整数,以及BCD码影响标志位1.加法指令ADD目标操作数,

源操作数源操作数+目标操作数——>目标操作数ADDAL,50H;ADDDI,SI;ADC目标操作数,源操作数源操作数+目标操作数+CF——>目标操作数ADC[BX+DI],AX;ADCAX,[BX+2000H]影响AF,CF,OF,PF,SF,ZF6个状态标志位INC目标操作数目标操作数+1——>目标操作数影响AF,OF,PF,SF,ZF5个标志位,不影响CF2.减法指令SUB目标操作数,源操作数目标操作数-源操作数——>目标操作数SBB目标操作数,源操作数目标操作数-源操作数-CF——>目标操作数DEC目标操作数目标操作数-1——>目标操作数NEG目标操作数(求补指令)0-目标操作数——>目标操作数CF=1影响AF,CF,OF,PF,SF,ZF6个标志位CMP目标操作数,源操作数比较指令,执行两数相减,但不回送相减结果,只影响标志位例:CMPAX,2000H;CMPAL,50H;CMPAX,[BX+DI+100H];CMPDX,DI;CMPBYTEPTR[BX],78H;CMPWORDPTR[SI],1234H 表5-4CMP指令执行后标志位的状况目标操作数与源操作数的关系CFZFSFOF

等于0100带符号位小于-010的操作数目的操作数小于源操作数-001

大于-000

大于-011不带符号位等于0100的操作数目标操作数低于源操作数10--

高于00--结论:(有符号数)SFOF=1(小于);

SFF=0(大于)表5-4(带符号位的操作数,以8位二进制数为例)负数-负数负绝对值大–负绝对值小,(-3)-(-2)小于SF=1,OF=0SFOF=1正小数–正大数2–3小于,SF=1,OF=0SFOF=1负数–正数:小于;(-2)-(+127)=-129,OF=1,SF=0(

SFOF=1)(-3)-(+2)=-5,OF=0,SF=1(

SFOF=1)正数–正数表5-4(带符号位的操作数,以8位二进制数为例)负数-负数负绝对值小–负绝对值大,(-2)-(-3)大于SF=0,OF=0SFOF=0

正数–正数正大数–正小数3-2大于SF=0,OF=0,SFOF=0正数-负数大于;(+127)-(-2)=+129OF=1,SF=1(SFOF=0)(+3)-(-2)=+5,OF=0,SF=0(SFOF=0)

2:00000010-2:11111110+127:01111111+3:00000011,-3:11111101

127-(-2)3-(-2)(-2)-127(-3)-2=+129

=+5=-129=-5大于大于小于小于

0111111100000011111111101111110111111110

-11111110

-01111111

-00000010

10000001000001010000000111111011OF=1OF=0OF=1OF=0SF=1SF=0SF=0SF=1表5-4结论:1、无符号数的减运算不可能出现溢出,目的操作数大于源操作数时CF=0,反之CF=1;

2、有符号数的减运算当目的操作数大于源操作数时

OFSF=0

,小于时OFSF=1。(参考133页)3.乘法指令MUL乘数(无符号乘法),单操作数指令,隐含被乘数AL,AX,运算结果存入AX或DXAX例,MULCL;AL*CLAX;

MULDX;AX*DXDXAXMULBYTEPTR[SI];AL*[SI]AX;MULWORDPTR[BX];AX*[BX+1][BX]DXAXIMUL乘数(有符号乘法)情况与上面相同,运算结果按有符号数给出。例:MOV AL,81H;(129)MOV BL,2MULBL结果AX=0102H;(258)MOV AL,81H;(-127)MOV BL,2IMULBL结果AX=FF02H;(-254)4.除法指令DIV除数(无符号除法),单操作数指令,隐含被除数AX,DXAX,运算结果存入AL(商)+AH(余)

或AX(商)+DX(余)例,DIVBL;AX/BLAL(商)+AH(余)DIVBX;DXAX/BXAX(商)+DX(余)DIVBYTEPTR[BX];AX/[BX]AL(商)+AH(余)DIVWORDPTR[BX];DXAX/([BX+1][BX])AX(商)+DX(余)IDIV除数(有符号除法)情况与上面相同,运算结果按有符号数给出。乘、除指令格式:操作码源操作数(单操作数,隐含另一个操作数和目的操作数);源操作数:通用寄存器、存储器显然,

MUL10MULBL,54.除法指令表5-5带符号数除法的商和余数被除数除数商余数

92419-2-41-92-4-1-9-24-1余数与被除数同号,商往0靠拢。被除数除数商余数

925-19-2-5-1-92-51-9-251CBW(字节转换成字指令)指令将AL中的单字节数的符号扩展到AH中,例如CWD(字转换成双字指令)指令将AX中的单字数的符号扩展到DX中,例如原AX=XXXXXXXX01111111B(007FH),执行CBW命令后AX=0000000001111111B(007FH),如果原AX=XXXXXXXX10000001B(0081H),执行CBW命令后AX=11111111

10000001B(FF81H)对于无操作数指令,一定要注意其隐含的源、目操作数原AX=0111111111111111B(7FFFH),执行CWD命令后DX=0000000000000000B(0000H),AX不变;如果原AX=1000000000000001B(8001H),执行CWD命令后DX=11111111

11111111B(FF81H),AX不变5.十进制调整指令AAA加法的非压缩BCD码调整指令DAS减法的压缩BCD码调整指令AAS减法的非压缩BCD码调整指令AAM乘法的非压缩BCD码调整指令DAA加法的压缩BCD码调整指令(1)压缩BCD码调整指令(2)非压缩BCD码调整指令AAD除法的非压缩BCD码调整指令①DAA(decimaladjustforaddition)加法的压缩BCD码调整指令DAA指令把AL中的和调整为压缩的BCD格式。目的操作数为AL寄存器;

DAA指令对OF标志无定义,但影响其它标志位。②DAS(decimaladjustforsubtraction)减法的压缩BCD码调整指令DAS指令把AL中的差调整为压缩的BCD格式。目的操作数为AL寄存器;

DAS指令对OF标志无定义,但影响其它标志位。一个字节代表一个BCD码称为非压缩BCD码例,05H,09H一个字节代表两个BCD码称为压缩BCD码例,15H,36H,50HDAA、DAS指令根据CF,AF或者运算结果某位是否大于9来进行BCD码调整,现以ADD与DAA为例

43+55=9839+49=8863+54=11787+86=11301000011001110010110001110000111+01010101

+01001001

+01010100

+10000110

10011000100000101011011100001101CF=0CF=0CF=0CF=1AF=0AF=1AF=0

温馨提示

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

评论

0/150

提交评论