《微机原理与应用寻址方式与指令系统构.pptx》由会员分享,可在线阅读,更多相关《微机原理与应用寻址方式与指令系统构.pptx(209页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、基本概念基本概念n指令系统微处理器能执行的各种指令的集合。微处理器能执行的各种指令的集合。n寻址方式(Addressing Mode)指令中关于如何求出存放操作数有效地址的方法。指令中关于如何求出存放操作数有效地址的方法。n有效地址EA(Effective Address)根据寻址方式计算得到的地址。根据寻址方式计算得到的地址。第1页/共209页3.13.1 指令码的格式:指令码的格式:n指令码是一字节或多字节的二进制编码,CPU可以直接执行n多字节编码分成操作码和操作数两个字段部分n操作码指示该指令执行的操作n操作数字段指示操作数的类型和操作数的寻址方式操作码操作数操作数操作码字段操作数字段
2、第2页/共209页n操作码说明计算机要执行哪种操作,如传送、运算、移位、跳转等操作,它是指令中不可缺少的组成部分n操作数是指令执行的参与者,即各种操作的对象n有些指令不需要操作数,通常的指令都有一个或两个操作数,也有个别指令有3个甚至4个操作数3.13.1 指令码的格式:指令码的格式:第3页/共209页3.3.2 2 8086/8088 8086/8088系统的寻址方式系统的寻址方式n8086/8088指令系统操作数的种类分为两大类:操作数的种类操作数的种类数据操作数转移地址操作数第4页/共209页操作数的种类(续)操作数的种类(续)n数据操作数具体数值,也称具体数值,也称立即数立即数 (im
3、)(im):操作数据在指令中。:操作数据在指令中。寄存器寄存器(reg)(reg):操作数存放在寄存器中。:操作数存放在寄存器中。存储器存储器(mem)(mem):操作数存放在指定的存储单元中。:操作数存放在指定的存储单元中。I/OI/O端口端口:操作数来自或送到:操作数来自或送到I/OI/O端口。端口。n转移地址操作数指令操作的对象不是数据,而是要转移的目标地址。指令操作的对象不是数据,而是要转移的目标地址。要要转转移移的的目目标标地地址址可可以以直直接接在在指指令令中中给给出出,也也可可由由指指定定的寄存器或内存单元给出。的寄存器或内存单元给出。第5页/共209页寻址方式寻址方式(Addr
4、essing Mode)Addressing Mode)n操作数直接包含在指令中,紧跟在操作码之后,作为指令的一部分,这种操作数称为立即数(im)n立即数可以是8位(00HFFH),也可以是16位(0000HFFFFH)n立即数寻址方式只能作为源操作数,主要用于给寄存器或存储单元赋值。1.立即数寻址方式(Immediate addressing)第6页/共209页1.立即数寻址方式(续)例例3.1 3.1 MOV BL MOV BL ,80H80HMOV AX MOV AX ,0102H0102H指令执行后的结果为:指令执行后的结果为:BL =BL =80H80H ;AX=AX=0102H01
5、02H演示演示第7页/共209页n操作数存放在指令指定的寄存器(reg)中n指定的寄存器(reg)可以是8位寄存器(reg8):AH、AL、BH、BL、CH、CL、DH、DLn也可以是16位寄存器(reg16):AX、BX、CX、DX、SI、DI、SP、BP、CS、DS、SS、ESn用寄存器名表示其内容(操作数)2.寄存器寻址方式(Register addressing)第8页/共209页例例3.23.2MOV MOV CL ,DLCL ,DLMOV MOV AX ,BXAX ,BX如果如果DL=50H,BX=1234H,DL=50H,BX=1234H,则执行结果为则执行结果为:CL=50H,
6、AX=1234HCL=50H,AX=1234H演示演示2.寄存器寻址方式(续)第9页/共209页3.存储器寻址方式n操作数在主存储器中,用主存地址表示n程序设计时,8088采用逻辑地址表示主存地址段地址在默认的或用段地址在默认的或用段超越前缀段超越前缀指定的段寄存器中指定的段寄存器中指令中只需给出操作数的偏移地址(指令中只需给出操作数的偏移地址(有效地址有效地址EAEA)n存储器寻址方式又分为直接寻址方式直接寻址方式寄存器间接寻址方式寄存器间接寻址方式寄存器相对寻址方式寄存器相对寻址方式基址变址寻址方式基址变址寻址方式相对基址变址寻址方式相对基址变址寻址方式第10页/共209页u直接寻址方式(
7、Direct addressing)操作数的有效地址(EA)直接在指令中给出,用中括号包含有效地址,表达存储单元的内容直接寻址方式的操作数默认在存储器的数据段,即默认的段寄存器是DS允许使用段超越前缀改变段寄存器。在操作数的前面写上段寄存器名,再加上冒号“:”。第11页/共209页例例 3.3 3.3 MOV AX,MOV AX,2000H2000HEAEA2000H2000H如果如果 DS=1492HDS=1492H,则操作数存储单元的物理地址为:则操作数存储单元的物理地址为:14920H14920H2000H=16920H2000H=16920H若若 1692016920=9078H=90
8、78H执行结果为执行结果为:AX=AX=9078H9078H 演示演示段超越前缀的写法段超越前缀的写法MOV AX,ES:2000HMOV AX,ES:2000H;AXES:2000HAXES:2000Hu直接寻址方式(续)第12页/共209页u直接寻址方式(续)例如:例如:MOVMOVALAL ,VALUE VALUE 或或MOVMOVALAL ,VALUEVALUE在用汇编语言编程时,常用符号地址代替数值地址。VALUEVALUE也称为为存放操作数单元的符号地址也称为为存放操作数单元的符号地址第13页/共209页u寄存器间接寻址方式 (Register indirect addressin
9、g)有效地址在指令中指定的寄存器SI、DI、BX 或BP中,操作数本身在存储器中。若指定的寄存器为:SI、DI、BX,默认的段寄存器是DS若指定的寄存器是BP,默认的段寄存器是SS书写指令时,用作间址的寄存器必须加上方括弧,以免与寄存器寻址方式混淆允许使用段超越前缀改变段寄存器第14页/共209页例例3.43.4:MOVMOVAX,SIAX,SI如果如果 DS=3000H DS=3000H,SI=2000HSI=2000H物理地址物理地址=30000=30000H+2000H=32000HH+2000H=32000H若若 32000H=4050H32000H=4050H执行结果为:执行结果为:
10、AX=4050HAX=4050Hu寄存器间接寻址方式(续)又:又:MOV BP ,ALMOV BP ,AL如果如果 SS=5000H,BP=1000H SS=5000H,BP=1000H 物理地址物理地址=50000=50000H+1000H=51000HH+1000H=51000H执行结果为:执行结果为:51000H=50H51000H=50H演示演示段超越前缀的情况段超越前缀的情况MOV AX,ES:BXMOV AX,ES:BX;AXES:BXAXES:BX第15页/共209页段超越之例:MOVMOVES:DI,AXES:DI,AXMOVMOVDX,DS:BPDX,DS:BPADDADDA
11、L,ES:BXAL,ES:BXSUBSUBCS:SI,AXCS:SI,AXu寄存器间接寻址方式(续)第16页/共209页u寄存器相对寻址方式 (Register relative addressing)有效地址EA是由指令中指定的8位或16位位移量disp(displacement)与基址或变址寄存器的内容之和,即EA =SIDIBXBP+disp 8disp 16第17页/共209页若指令中指定的寄存器是SI,DI,BX,则存放操作数的段寄存器默认为DS若指令中指定BP寄存器,则默认的段寄存器应SS允许段超越前缀改变默认段寄存器位移量常用符号表示u寄存器相对寻址方式(续)第18页/共209页
12、例例3.53.5:如果:如果DS=3000HDS=3000H ,BX=1000HBX=1000H COUNT=1050HCOUNT=1050H对于指令:对于指令:MOVMOVCX,BX+COUNTCX,BX+COUNT物理地址物理地址=30000H+1000H+1050H=32050H=30000H+1000H+1050H=32050H若若32050H=4030H32050H=4030H执行后:执行后:CX=4030HCX=4030Hu寄存器相对寻址方式(续)第19页/共209页以下三种指令的形式皆允许,它们完全等价:MOVMOVAL,BP+TABLEAL,BP+TABLEMOVMOVAL,B
13、P+TABLEAL,BP+TABLE MOVMOVAL,TABLEBPAL,TABLEBP演示演示MOV AX,SI+06HMOV AX,SI+06H;AXDS:SI+06HAXDS:SI+06HMOV AX,06HSIMOV AX,06HSI;AXDS:SI+06HAXDS:SI+06Hu寄存器相对寻址方式(续)第20页/共209页u基址变址寻址方式 (Based indexed addressing)有效地址是由指令指定的一个基址寄存器BX或BP和一个变址寄存器SI或DI的内容之和。即:SIDIBXBPEA=+第21页/共209页若基址寄存器为BX,默认的段寄存器为DS 若基址寄存器为BP
14、,默认的段寄存器为SS允许段跨越演示演示MOV AX,BX+SIMOV AX,BX+SI;AXDS:BX+SIAXDS:BX+SIMOV AX,BXSIMOV AX,BXSI;AXDS:BX+SIAXDS:BX+SIu基址变址寻址方式(续)第22页/共209页例例3.6:3.6:MOVMOV BX+DI,AXBX+DI,AX若若DS=3000H,BX=1000H,DI=1100HDS=3000H,BX=1000H,DI=1100H则则EA=1000H+1100H=2100HEA=1000H+1100H=2100H物理地址物理地址=30000=30000H+2100H=32100HH+2100H
15、=32100H若若AX=0050HAX=0050H,则执行结果为,则执行结果为:32100H=0050H 32100H=0050H。u基址变址寻址方式(续)又指令又指令:MOV AH ,BPSIMOV AH ,BPSI如果如果BP=2000H,SI=1200H,BP=2000H,SI=1200H,SS=4000HSS=4000H物理地址物理地址=40000=40000H+2000H+1200H=43200HH+2000H+1200H=43200H若若43200H=56H43200H=56H,则执行结果为,则执行结果为:AH=56HAH=56H第23页/共209页u基址变址相对寻址方式(Rela
16、tive indexed addressing)有效地址是指令中指定的8位或16位位移量(disp)与一个基址寄存器和一个变址寄存器的内容之和。即:SI DI BX BP EA=+disp8disp16第24页/共209页当基址寄存器为BX时,默认为DS段寄存器当基址寄存器为BP时,默认为SS段寄存器。允许段超越。演示演示MOV AX,BX+DI+6MOV AX,BX+DI+6;AXDS:BX+DI+6AXDS:BX+DI+6MOV AX,6BX+DIMOV AX,6BX+DIMOV AX,6BXDIMOV AX,6BXDIu基址变址相对寻址方式(续)第25页/共209页 MOV MOVAX
17、,BX+SI+COUNTAX ,BX+SI+COUNT MOV MOVAX ,COUNTBXSIAX ,COUNTBXSI MOV MOVAX ,BX+COUNTSIAX ,BX+COUNTSI MOV MOVAX ,BXCOUNTSIAX ,BXCOUNTSI MOV MOVAX ,BX+SICOUNTAX ,BX+SICOUNT MOV MOVAX ,COUNTSIBXAX ,COUNTSIBX基址加变址相对寻址方式的不同的书写形式:u基址变址相对寻址方式(续)第26页/共209页例例3.73.7MOV AX ,MASKBXSIMOV AX ,MASKBXSI如果如果 DS=3000H,B
18、X=2000H,DS=3000H,BX=2000H,SI=1000H,MASK=0520HSI=1000H,MASK=0520H 物理地址物理地址=30000=30000H+2000H+1000H+0520H=33520HH+2000H+1000H+0520H=33520H若若 33520=1234H33520=1234H执行结果为执行结果为 AX=1234H AX=1234H u基址变址相对寻址方式(续)第27页/共209页3.3.3 3 8086 8086的汇编指令系统的汇编指令系统u数据传送指令u位操作指令u程序控制指令n8086的指令系统包括100多条指令,可分为以下六种类型:u算术运
19、算指令u串操作指令u处理器控制指令第28页/共209页1.数据传送指令MOV(Move)格式:MOV DST,SRC操作:dst srcdstdst表示目的操作数,表示目的操作数,srcsrc表示源操作数。表示源操作数。MOV MOV 指令允许字节(指令允许字节(8 8位)操作或字(位)操作或字(1616位)操作位)操作数据传送指令数据传送指令演示演示例:例:MOV AXMOV AX ,05H ,05H ;字操作字操作MOV BLMOV BL ,A A ;字节操作字节操作第29页/共209页dst,dst,srcsrc的具体形式为的具体形式为:dst src说明说明reg1reg2reg1不能
20、是不能是IP与与CSregimreg不能是不能是CS,DS,ES,SS和和IP mimregmemreg不能是不能是CS与与IPmreg 表中表中:regreg为寄存器操作数为寄存器操作数,memmem代表存储器操作数代表存储器操作数,imim代表立即数代表立即数nMOV指令操作数的形式第30页/共209页nMOV指令操作数的形式(续)不允许不允许dstdst与与srcsrc同时皆为内存操作数同时皆为内存操作数memmem目的操作数目的操作数dstdst不允许是立即数不允许是立即数imim 、段寄存段寄存器器CSCS和和IPIP不允许将立即数直接传送给段寄存器不允许将立即数直接传送给段寄存器M
21、OVMOV指令不影响标志位指令不影响标志位。第31页/共209页例:合法指令例:合法指令MOV BX ,AXMOV BX ,AXMOV AX ,DATA_SEGMOV AX ,DATA_SEGMOV DS ,AXMOV DS ,AXMOV AX ,COUNTBXSIMOV AX ,COUNTBXSIMOV AL ,EMOV AL ,EMOV SI,DSMOV SI,DSMOV AX,DSMOV AX,DS;AXDSAXDSMOV ES,AXMOV ES,AX;ESAXDSESAXDS 对段寄存器的操作不灵活对段寄存器的操作不灵活nMOV指令(续)第32页/共209页uMOV指令立即数传送mov
22、 cl,mov cl,4 4;cl4cl4,字节传送,字节传送mov dx,mov dx,0ffh0ffh;dx00ffhdx00ffh,字传送,字传送mov si,mov si,200h200h;si0200hsi0200h,字传送,字传送mov mov bvarbvar,0ah0ah;字节传送;字节传送;假设;假设bvarbvar是一个字节变量,定义如下是一个字节变量,定义如下:bvar db 0bvar db 0mov mov wvarwvar,0bh0bh;字传送;字传送;假设;假设wvarwvar是一个字变量,定义如下:是一个字变量,定义如下:wvar dw 0wvar dw 0明确
23、指令是字节操作还是字操作明确指令是字节操作还是字操作以字母开头的常数要有前导以字母开头的常数要有前导“0 0”第33页/共209页uMOV指令寄存器传送mov ah,almov ah,al;ahalahal,字节传送,字节传送mov mov bvarbvar,ch,ch;bvarch bvarch,字节传送,字节传送mov ax,bxmov ax,bx;axbxaxbx,字传送,字传送mov ds,axmov ds,ax;dsaxdsax,字传送,字传送mov bx,almov bx,al;bxalbxal,字节传送,字节传送 寄存器具有明确的字节和字类型寄存器具有明确的字节和字类型第34页/
24、共209页uMOV指令存储器传送mov al,bxmov al,bx;alds:bxalds:bxmov dx,bpmov dx,bp;dxss:bp+0dxss:bp+0mov dx,bp+4mov dx,bp+4;dxss:bp+4dxss:bp+4mov es,simov es,si;esds:siesds:si 不存在存储器向存储器的传送指令不存在存储器向存储器的传送指令第35页/共209页uMOV指令段寄存器传送mov si,dsmov si,ds;ds:si ds ds:si dsmov ax,dsmov ax,ds;axdsaxdsmov es,axmov es,ax;esaxd
25、sesaxds 对段寄存器的操作不灵活对段寄存器的操作不灵活第36页/共209页nMOV指令的非法形式两个操作数的类型不一致两个操作数的类型不一致无法确定是字节量还是字量操作无法确定是字节量还是字量操作两个操作数都是存储器两个操作数都是存储器段寄存器的操作有一些限制段寄存器的操作有一些限制第37页/共209页u非法指令两个操作数类型不一致非法指令:非法指令:movmoval,050ahal,050ah修正:修正:movmovax,050ahax,050ah非法指令:非法指令:movmovsi,dl si,dl 修正:修正:movmovdh,0dh,0movmovsi,dxsi,dx在绝大多数双
26、操作数指令中,目的操作数和源操作数必须在绝大多数双操作数指令中,目的操作数和源操作数必须具有一致的数据类型,或者同为字量,或者同为字节量,具有一致的数据类型,或者同为字量,或者同为字节量,否则为非法指令否则为非法指令第38页/共209页u非法指令无法确定是字节量还是字量操作非法指令:非法指令:mov bx+si,255mov bx+si,255修正:修正:mov byte ptr bx+si,255mov byte ptr bx+si,255 ;byte ptrbyte ptr 说明是字节操作说明是字节操作 ;mov word ptr bx+si,255mov word ptr bx+si,2
27、55 ;word ptrword ptr 说明是字操作说明是字操作当无法通过任一个操作数确定是操作类型时,需要利用汇当无法通过任一个操作数确定是操作类型时,需要利用汇编语言的操作符显式指明编语言的操作符显式指明第39页/共209页u非法指令两个操作数都是存储器非法指令:非法指令:mov buf2,buf1mov buf2,buf1修正:假设修正:假设buf2buf2和和buf1buf1是两个字变量;是两个字变量;mov ax,buf1mov ax,buf1mov buf2,axmov buf2,ax假设假设buf2buf2和和buf1buf1是两个字节变量是两个字节变量mov al,buf1m
28、ov al,buf1mov buf2,almov buf2,al80888088指令系统除串操作指令外,不允许两个操作数都是存储指令系统除串操作指令外,不允许两个操作数都是存储单元(存储器操作数)单元(存储器操作数)第40页/共209页u非法指令段寄存器的操作有一些限制非法指令:非法指令:mov ds,esmov ds,es修正:修正:mov ax,esmov ax,esmov ds,axmov ds,ax非法指令:非法指令:mov ds,100hmov ds,100h修正:修正:mov ax,100hmov ax,100hmov ds,axmov ds,ax非法指令:非法指令:mov cs,
29、simov cs,si80888088指令系统中,能直接对段寄存器操作的指令只有指令系统中,能直接对段寄存器操作的指令只有MOVMOV等个别传送指令,并且不灵活等个别传送指令,并且不灵活第41页/共209页2.进栈指令PUSH(Push onto the stack)格式:PUSH src操作:SP SP 2 SS:SP 1,SP srcu指令说明PUSHPUSH指令只允许是字(指令只允许是字(1616位)操作位)操作srcsrc可以是可以是r reg16eg16 、mem,mem,但不能是但不能是imim第42页/共209页例:合法指令例:合法指令 PUSHPUSHAX AX PUSHPUS
30、HDSDS PUSHPUSHBXBX例:非法指令例:非法指令 PUSHPUSHALAL;不允许字节操作;不允许字节操作 PUSHPUSH0FFA2H0FFA2H;srcsrc不允许是不允许是imim演示2.进栈指令PUSH(Push onto the stack)第43页/共209页3.出栈指令POP(Pop from stack)格式:POP dst操作:dst SP 1,SP SP SP 2指令说明POPPOP指令只能字指令只能字(16(16位位)操作操作dstdst可以是可以是memmem,reg16reg16,但不能是但不能是CSCS、IPIP、imimPUSHPUSH,POPPOP指
31、令不影响标志位指令不影响标志位第44页/共209页例:合法指令例:合法指令pop axpop axpop wvarpop wvar例:非法指令例:非法指令pop alpop al;al;al为为reg8reg8pop bvarpop bvar;bvar;bvar 为为8 8位内存操作数位内存操作数pop dspop ds;dst;dst为段寄存器为段寄存器演示3.出栈指令POP(Pop from stack)第45页/共209页3.数据交换指令XCHG(Exchange)格式:XCHG OPR1,OPR2操作:OPR1 OPR2u指令说明允许字或字节操作允许字或字节操作OPR1OPR1、OPR
32、2OPR2是两个操作数。它们可以是是两个操作数。它们可以是regreg或或memmem,但二者中必有一个是寄存器,但二者中必有一个是寄存器不允许使用段寄存器和不允许使用段寄存器和IPIP不影响标志位不影响标志位演示第46页/共209页uXCHG指令(举例)例例3.8 3.8 XCHG BX ,BP+SIXCHG BX ,BP+SI如指令执行前:如指令执行前:BX=6F30H,BP=0200H,SI=0046H,BX=6F30H,BP=0200H,SI=0046H,SS=2F00H,2F246H=4154HSS=2F00H,2F246H=4154H。OPR2OPR2的物理地址的物理地址=2=2F
33、000H+0200H+0046H=2F246HF000H+0200H+0046H=2F246H则指令执行后:则指令执行后:BX=4154H,2F246H=6F30HBX=4154H,2F246H=6F30H第47页/共209页4.换码指令XLAT(Translate)格式:XLAT src_table 或 XLAT操作:AL BX+AL u指令说明指令说明src_tablesrc_table是表格首地址是表格首地址(符号地址符号地址)转换前,预先要构造一个字节表格,表格的内容是所转换前,预先要构造一个字节表格,表格的内容是所要换取的代码要换取的代码表格的首地址提前存入表格的首地址提前存入BXB
34、X寄存器寄存器需要转换的代码应该是相对表格首地址的位移量需要转换的代码应该是相对表格首地址的位移量,要提要提前存入前存入ALAL寄存器中寄存器中该指令执行后可在该指令执行后可在ALAL中得到转换后的代码。中得到转换后的代码。演示第48页/共209页指令指令XALTXALT把把 F0000+0040+0F=F004FHF0000+0040+0F=F004FH单元的内容送单元的内容送ALAL寄存器寄存器执行执行XALTXALT后后AL=2CHAL=2CH例例3.9:3.9:BX=0040H,AL=0FH,DS=F000H,BX=0040H,AL=0FH,DS=F000H,所建表格如下图:所建表格如
35、下图:2C存储器存储器F0040HF004FH(BX)(AL)=0FHuXLAT指令(举例)00第49页/共209页例例3.10 3.10 内内存存数数据据段段有有一一1616进进制制数数的的ASCIIASCII码码表表,首首地地址址为为hex_tablehex_table,如如图图所所示示,欲欲查查出出第第1010个个元元素素(元元素素序序号号从从0 0开始),即开始),即AA的的ASCIIASCII码。指令序列为:码。指令序列为:mov bx ,0ffset hex_table mov bx ,0ffset hex_table ;(bx);(bx)表首址表首址mov al ,0ah mov
36、 al ,0ah ;(al);(al)序号(位移量)序号(位移量)xalt xalt hex_tablehex_table ;查表转换查表转换执行后执行后,al=41hal=41h (A A的的ASCIIASCII码码)uXLAT指令(举例)第50页/共209页指令指令:XLAT Hex_tableXLAT Hex_table执执行行结结果果把把AA的的ASCIIASCII码码送送入入在在ALAL中中,即即AL=41HAL=41H存储器30H(0)31H(1)39H(9)41H(A)46H(F)Hex-tableHex-table+10Hex-table+9Hex-table+1Hex-tab
37、le+15例3.10图示 16进制数的ASCII码表第51页/共209页n直接寻址方式格式:IN AL ,PORTIN AL ,PORT;(;(字节操作)IN AX ,PORTIN AX ,PORT;(;(字操作)操作:AL AL PORTPORT;(;(字节操作)AX AX PORT+1,PORTPORT+1,PORT;(;(字操作)PORTPORT是是I/OI/O端口地址端口地址(0255)(0255)5.输入指令IN(Input)第52页/共209页n间接寻址方式格式:INAL ,DX;(字节)INAX ,DX;(字)操作:AL DX;(字节)AX DX+1,DX;(字)DXDX内容是内
38、容是I/OI/O端口地址端口地址(0(065535)65535)5.输入指令IN(Input)第53页/共209页5.输出指令OUT(Output)n直接寻址方式格式:OUT PORT ,AL;(字节)OUT PORT ,AX;(字)操作:PORT AL;(字节)PORT+1,PORT AX;(字)PORTPORT是是I/OI/O端口地址端口地址(0255)(0255)第54页/共209页n间接寻址方式格式:OUT DX ,AL;(字节操作)OUT DX ,AX ;(字操作)操作:DX AL;(字节操作)DX+1,DX AX;(字操作)DXDX内容是内容是I/OI/O端口地址端口地址(0(06
39、5535)65535)5.输出指令OUT(Output)第55页/共209页u指令说明ININ和和OUTOUT(输入输出输入输出)指令专用于指令专用于 CPUCPU与外设与外设(I/OI/O端端口口)之间传送信息。之间传送信息。数据必须经由累加器数据必须经由累加器(AXAX或或AL)AL)传送。传送。直接寻址方式的指令只能寻址直接寻址方式的指令只能寻址256256个个I/OI/O端口端口(端口端口号号:0 0255255或或0 0FFHFFH)。间接接寻址方式的指令可以寻址间接接寻址方式的指令可以寻址6464K K个个I/OI/O端口端口(端端口号口号:0 06553565535或或0 0FF
40、FFHFFFFH)。ININ和和OUTOUT指令提供了字与字节两种使用方式指令提供了字与字节两种使用方式,选用选用哪一种哪一种,取决于外设端口的宽度。取决于外设端口的宽度。第56页/共209页例例3.113.11in ax ,28hin ax ,28h mov data_word ,axmov data_word ,ax(把端口(把端口2828h h的内容经的内容经axax传送到存储单元传送到存储单元data_worddata_word)例例3.123.12 mov dx ,3fchmov dx ,3fch in ax ,dxin ax ,dx(从端口(从端口0303fchfch取一个字送到取
41、一个字送到axax寄存器)寄存器)例例3.133.13 out 5 ,alout 5 ,al(从(从alal寄存器输出一个字节到端口寄存器输出一个字节到端口5 5)u输入、输出指令举例第57页/共209页6.目的地址传送指令n取有效地址指令LEA(Load effective address)格式:LEA reg16 ,mem操作:把源操作数的EA,传送到目标寄存器reg16 中u指令说明源操作数源操作数memmem必须是内存操作数必须是内存操作数reg16reg16必须是一个必须是一个1616位的通用寄存器位的通用寄存器第58页/共209页例例3.143.14LEA BX,BUFFERLEA
42、 BX,BUFFERMOV BX,BUFFERMOV BX,BUFFER 前者是把前者是把BUFFERBUFFER的有效地址的有效地址EAEA传送给传送给BX,BX,后者把后者把存储单元存储单元BUFFEERBUFFEER的内容传送给的内容传送给BXBX。例例3.153.15LEA BX,MAXBXSILEA BX,MAXBXSI若执行前若执行前:BX=0400H,SI=003CH,MAX=0F62HBX=0400H,SI=003CH,MAX=0F62H则则EAEA=0400+003C+0F62=0400+003C+0F62=139EH139EH指令执行后:指令执行后:BX=139EHBX=1
43、39EHuLEA指令举例第59页/共209页n指针送ES指令LES(Load ES with pointer)格式:LES reg16,mem32操作:reg16 mem32,ES mem32+2n指针送DS指令LDS(Load DS with pointer)格式:LDS reg16,mem32操作:reg16 mem32,DS mem32+26.目的地址传送指令(续)第60页/共209页u指令说明源操作数源操作数mem32mem32是是3232位的内存操作数。位的内存操作数。目的操作数目的操作数reg16reg16是是1616位的通用寄存器。位的通用寄存器。指指令令将将源源操操作作数数指指
44、定定的的存存储储器器中中的的连连续续4 4字字节节传传送送给给指指定定的的reg16reg16和和DSDS,低低2 2位位字字节节给给reg16,reg16,高高2 2位位字字节节给给DSDS。LEALEA、LDSLDS、LESLES三条指令不影响标志位。三条指令不影响标志位。第61页/共209页例例3.173.17:LES DI,BXLES DI,BX执行前执行前 DS=B000H,BX=O80AH,DS=B000H,BX=O80AH,B080AH=05AEH,B080CH=4000H B080AH=05AEH,B080CH=4000H 执行后执行后 DI=05AEHDI=05AEH,ES=
45、4000HES=4000H例例3.163.16LDS SI,10HLDS SI,10H执行前执行前DS=C000H,SI=0010H,DS=C000H,SI=0010H,C0010H=0180H,C0012H=2000HC0010H=0180H,C0012H=2000H执行后执行后 SI=0180H,DS=2000HSI=0180H,DS=2000H 。uLEA指令举例第62页/共209页7.标志传送指令n标志送AH指令LAHF(Load AH with flags)格式:LAHF操作:AH FLAG的低字节位只传送了SF、ZF、AF、PF、CF五个标志位nAH送标志寄存器SAHF(Store
46、 AH into flags)格式:SAHF操作:FLAG的低字节 AH 第63页/共209页n标志进栈指令PUSHF(Push the flags)格式:PUSHF操作:SP SP 2,SP+1,SP FLAGS格式:POPF操作:FLAGSP+1,SP,SP SP+2n标志出栈指令POPF(Pop the flags)LAHFLAHF和和PUSHFPUSHF不影响标志位不影响标志位SAHFSAHF和和POPFPOPF由装入的值来确定标志位由装入的值来确定标志位第64页/共209页算术指令算术指令1.1.加法指令加法指令n加法指令ADD(add)u格式:ADD dst,srcu操作:dst
47、src+dstn带进位加法指令ADC(add with carry)u格式:ADC dst ,srcu操作:dst src+dst+CF 第65页/共209页n加1指令INC(increment)u格式:INC dstu操作:dst dst+1u指令说明dstdst为寄存器或存储器操作数。为寄存器或存储器操作数。srcsrc是寄存器、存储器操作数或立即数是寄存器、存储器操作数或立即数srcsrc和和dstdst不能同为存储器操作数不能同为存储器操作数不允许段寄存器参与运算。不允许段寄存器参与运算。允许字节操作或字操作。允许字节操作或字操作。上述指令对条件标志位产生影响,但上述指令对条件标志位产
48、生影响,但INCINC指令对指令对CFCF位无位无影响。影响。1.1.加法指令加法指令第66页/共209页例如:例如:add cl,10add cl,10adc dxadc dx ,si,siadd ax,mem add ax,mem adc alphadi,30hadc alphadi,30hinc siinc si以上指令皆合法。以上指令皆合法。例例3.18:3.18:mov al,7eh mov al,7eh mov bl,5bhmov bl,5bhadd al,bladd al,bl执行后,执行后,al=7eh+5bh=d9hal=7eh+5bh=d9h各状态标志位为:各状态标志位为:
49、SF=1,ZF=0,AF=1SF=1,ZF=0,AF=1,PF=0,CF=0,OF=1PF=0,CF=0,OF=11.1.加法指令(举例)加法指令(举例)第67页/共209页例例3.193.19:要求计算两个多字节的:要求计算两个多字节的1616进制数之和:进制数之和:3 3B74AC60F8H+20D59E36C1H=?B74AC60F8H+20D59E36C1H=?式式中中被被加加数数和和加加数数均均有有五五个个字字节节,假假设设它它们们已已分分别别存存入入从从DATA1DATA1和和DATA2DATA2开开始始的的两两个个内内存存区区,且且均均为为低低位位字字节节在在前前,高高位位字字节
50、节在在后后,如如图图3.83.8所所示示。要要求求相相加加所所得得结结果果仍仍存存回回以以DATA1DATA1为首址的内存区。为首址的内存区。本例可用循环程序来实现。运算程序流程图见本例可用循环程序来实现。运算程序流程图见图图3.83.8。1.1.加法指令(举例)加法指令(举例)第68页/共209页存储器F8H60HACH74H3BHC1H36H9EHD5H20HDATA1DATA2被加数加数数据段取一个字节加数初始化:置循环次数,清SI,清进位标志CF开始与一个被加数字节相加,结果送内存区(SI)+1 循环次数1循环次数=0?结束NY例3.19的流程图例3.19中的存储区图 3.8 例3.1