《微机原理与接口技术》课件第3章 指令系统_第1页
《微机原理与接口技术》课件第3章 指令系统_第2页
《微机原理与接口技术》课件第3章 指令系统_第3页
《微机原理与接口技术》课件第3章 指令系统_第4页
《微机原理与接口技术》课件第3章 指令系统_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

第3章指令的基本格式8086/8088的寻址方式8086/8088指令系统3.13.23.3微机原理与接口技术3.1指令的基本格式1.操作码:表示计算机要执行的操作类型

如:MOV数据传送

IN数据输入2.操作数:指令执行所需的数

1)

大部分指令有2个操作数:目的操作数和源操作数

如:MOVAL,45H;逗号前面的AL是目的操作数,后面45H是源操作数

2)

少数指令只有一个操作数,可能是源操作数,也可能是目的操作数

如:INCBX;BX既是源操作数,又是目的操作数

PUSHAX;AX是源操作数POPAX;AX是目的操作数3)

少数指令没有操作数

如:DAA;加法的十进制调整指令,操作数隐含在AL中汇编指令由两部分组成:操作码操作数寻找操作数来源的方式,称为寻址方式,共6种。操作数的可能来源只有三个:(1)直接包含在指令中;立即寻址

(2)CPU的寄存器中;寄存器寻址

(3)存储器中。;4种寻址方式,具体是哪种方式,就看怎样表达存储器单元的地址

操作数来源不同,即寻址方式不同。3.1指令的基本格式3.1指令的基本格式3.1指令的基本格式3.28086/8088的寻址方式1、立即寻址

例:MOVAL,34H MOVAX,3000H

特点:操作数是立即数,直接放在指令中

注意:立即数只能做源操作数3.28086/8088的寻址方式2、寄存器寻址

例:MOVAL,BL;√

MOVDS,AX;√

特点:操作数包含在寄存器中

注意:寄存器位数要一致MOVAL,BX;×MOVAX,BL;×这两种寻址方式,数据都来源于CPU内部,无须访问总线,所以执行速度相对快。3.1指令的基本格式3.1指令的基本格式3.1指令的基本格式3.28086/8088的寻址方式后面4种寻址方式,操作数都来源于存储器。

表3-1存储单元的表示方法。不同的表示方法,表示不同的寻址方式。

3.直接寻址例:MOVAX,[2000H]

特点:操作数的偏移地址2000H直接在指令中物理地址PA的计算:默认PA=DS×16+偏移地址例如:MOVAL,[2000H];此时,PA=DS×16+2000H若有超越,则PA=超越到的段寄存器×16+偏移地址例如:MOVAX,ES:[4000H];此时,PA=ES×16+4000H执行结果:AX=1234H3.28086/8088的寻址方式4 .寄存器间接寻址 例:MOVBX,[SI]

注意:1)可间接寻址的寄存器只有四个:

BX、BP、SI、DI。其中存放操作数所在的偏移地址

2)以SI/DI/BX间接寻址时,默认DS段

3)

以BP间接寻址时,默认SS段PA=SS16+BP

4)允许段超越MOVBX,[SI]DS=1000H,SI=3000H结果:BX=2345H3.28086/8088的寻址方式MOVBX,SS:[SI]5.变址寻址寄存器间接寻址的基础上加一个8/16位的偏移量,注意事项同上

例:MOV

BX,[SI+4000H]

设:DS=3000H,SI=2000H,位移量为4000H,(36000H)=5678H

则:PA=DS×16+SI+COUNT

=30000H+2000H+4000H

=36000H

执行结果为BX=5678H。3.28086/8088的寻址方式6.基址加变址寻址 例:MOVAX,[BX+SI][+16位偏移量];红色部分加不加都可以有的教材会把加红色部分称作相对基址变址寻址

注意:

[BX][BP]不能共存,[SI][DI]不能共存

若用BX:默认操作数在数据段DS中 若用BP:默认操作数在堆栈段SS中

上例中:DS=3000H,BX=2000H,SI=5000H则:PA=DS×16+BX+SI=37000H指令执行后,AX=5577H该指令还可写成:MOVAX,[BX][SI]MOVAX,[BX+DI+偏移量]3.28086/8088的寻址方式寻址方式小结(看源操作数,不用看目的操作数):立即寻址:MOVAX,3000H寄存器寻址:MOVAX,BX直接寻址:MOVAX,[3000H]寄存器间接寻址:MOVAX,[BX]

变址寻址:MOVAX,[BX+800H]基址加变址寻址:MOVAX,【BX+SI+900H】

Intel8086/8088指令系统共有133条基本指令,可分成6个功能组:

①数据传送类指令②算术运算类指令③逻辑运算类指令④串操作类指令⑤控制转移类指令⑥处理器控制类指令3.38088/8086的指令系统六种格式:①通用寄存器之间传送(r/r),MOVBL,ALMOVDI,AX②通用寄存器和段寄存器之间传送(r/SEG),

MOVDS,AX

MOVAX,ES③通用寄存器和存储单元之间传送(r/M),

MOVAL,[2000H]

MOV[DI],AX④段寄存器和存储单元之间传送(seg/M),MOVDS,[2000H]MOV[BX][SI],SS;⑤立即数到通用寄存器(rImm),MOVBX,2000H;⑥立即数到存储单元(MImm),MOV[4000H],30H;3.3.1数据传送指令基本格式:MOVdst,src;将源操作数src传送到目的操作数dst;后面是注释,不参与编译;功能相当于复制src,粘贴到dst,即src不变,dst被覆盖①.位数一致MOVAL,

2000H;×

MOVAL,BX;×MOVAX,BL;×②.不允许存储单元间传送数据

MOV[2000H],[3000H];×

MOV[DI],[SI];×③.不能用CS和IP作目的操作数MOVCS,3000H;×

MOVIP,2000H;×3.3.1数据传送指令1.通用数据传送指令(1)MOV传送指令

2)注意事项④段寄存器之间不能直接传送数据。

MOVSS,DS;×⑤立即数不能作目的操作数。

MOV2000H,AX;×MOV34H,AL;×⑥不能向段寄存器送立即数MOVDS,4000H;×

应改为:

MOVAX,4000H;;MOVDS,AX(2).堆栈指令入栈:PUSHsrc;SP-2后,将src压入堆栈出栈:OPdst;当前栈顶2个数据弹出到dst,后SP+2堆栈:用SS:SP管理,其地址表示当前栈顶单元地址SP总是指向栈顶

SP初值决定了栈的深度,栈深度64kB。

原则:①操作数必须是16位寄存器/存储器PUSHAX;√

PUSHAL;×PUSH2345H;×不可以是立即数

②后进先出(LIFO)例:PUSHAXPUSHBX....POPBXPOPAX3.3.1数据传送指令(3)交换指令格式:XCHGdst,src;dst与src内容互换

是唯一的把源操作数也刷新了的汇编指令。

交换可以发生在:通用寄存器之间、通用寄存器与存储器

例:XCHGAL,BL;AL和BL数据互换

XCHGAL,[2000H];AL与[2000H];数据互换

3.3.1数据传送指令注意:①位数一致XCHGAL,CX;×②段寄存器和立即数不能作为一个操作数;XCHGDS,AX;×XCHGBX,2000H;×③.不能在存储器与存储器之间交换数据

XCHG[3000H],[2000H];×

3.地址目标传送指令LEA例如:LEABX,table;将table的地址送到BX功能等价于

MOVBX,offsettable比较下面三条指令:MOVBX,1700H;将1700H送到BXMOVBX,[1700H];

地址为1700H存储单元的内容送到BX,,执行完BX=1700H单元的内容LEABX,[1700H];

地址为1700H存储单元的地址1700H送到BX,执行完BX=1700H

3.3.1数据传送指令2.累加器专用传送指令⑴输入/输出指令(CPU与I/O口之间的数据传送)当I/O地址<=FFH时

INAL,n;AL←[n] INAX,n;AX←[n+1][n]当I/O地址>FFH时 INAL,DX;AL←[DX] INAX,DX;AX←[DX+1][DX]OUT同理如下

OUTn,AL;AL→[n]

OUTn,AX;AX→[n+1][n]

OUTDX,AL;AL→[DX]

OUTDX,AX;AX→[DX+1][DX]3.3.1数据传送指令例:INAL,86H;从86H端口读入一个字节到ALINAX,0F0H;F0H口的数据到AL,F1H口的到AHMOVDX,280H;INAL,DX;

端口280H读一个字节到ALOUT83H,AL;AL内容输出到端口83HMOVDX,281H;OUTDX,AX;AL到端口281H,AH到端口282H(2)换码指令XLAT

(表首地址);括号可有可无AL=[(DS)×16+(BX)+(AL)]条件: ①建立表格,有规律可查

②BX指向表首地址 ③AL存放待查的码执行XLAT后:转换后的结果存放在AL中。常用于无规律的代码转换3.3.1数据传送指令例3-3若十进制数字0~9的LED七段码(共阳极,小数点常亮)对照表如下表所示,试用XLAT指令求数字N(N=0~9)的七段码值。TABLEDB40H,79H,24H,30H,19H,12H,02H,78H,00H,18H………..MOVBX,OFFSETTABLE

;table的偏移地址

MOVAL,N

XLAT

若N=5,执行上述指令后AL=12H,若需输出,可采用OUTDX,AL,输出到LED显示数据传送类小结通用传送类:MOVdst,src;PUSHsrc;src压入堆栈POPdst;当前栈顶的内容弹出到dstXCHGdst,src;dst与src内容互换累加器专用指令INAL/AX,n/DXOUTn/DX,AL/AXXLAT(表首地址)3.3.1数据传送指令1.加法指令

ADDdst,src

;

dst←dst+src(2)ADCdst,src;dst←dst+src+CF(3)INCdst;dst←dst+1,不影响CF其中:dst:通用寄存器或存储器。src:通用寄存器、存储器或立即数dst与src不能同为存储器影响OF、SF、ZF、AF、PF、CF(INC不影响CF)例:MOVAL,0FFHADDAL,1;AL=00H,CF=1

OF=0

SF=0,ZF=1,AF=1,PF=1MOVAL,0FFH

INCAL;AL=00H,CF不变,

其他标志位同上3.3.2算术运算指令加法调整指令

(4)DAA;加法结果的十进制调整指令

(5)AAA;加法结果的ASCII调整

被调整的操作数隐含在AL中。

例3-8若AL=BCD28,BL=BCD47

ADDAL,BL;执行完AL=6FHDAA;执行完AL=75H

,即28+47

若DAA换成AAA,执行后AX=0705H

2.减法类指令(Subtract)以下指令与加法类似(1)

SUBdst,src;dst=dst-src

(2)SBBdst,src;dst=dst-src-CF

(3)DECdst;;dst=dst-1,不影响CF(4)

DAS(5)

AAS3.3.2算术运算指令比较指令是减法CMPdst,src;比较之后产生分支结构

dst与src做差,但不产生结果,影响标

志位,以判断被比较的两数大小

例:CMPAL,60

JCFAIL;CF=1,转到FAILJMPPASS;否则转到PASS算术运算类指令小结加法:ADD、ADC、INC、DAA、AAA减法:SUB、SBB、DEC、CMP3.3.2算术运算指令1.逻辑运算指令:按位操作(1)取反指令:NOT

dst;dst按位取反(2)与、或、异或指令

ANDdst,src;dst和src按位相与送dst;与0相与,可实现按位清零

ORdst,src;按位相或送dst;与1相或,可实现按位置1

XORdst,src;按位异或,结果送dst;与1相异或,实现按位取反

注意:dst可以是寄存器或存储器内容;src可以是寄存器、存储器或立即数。

但不能dst、src同为存储器3.3.3逻辑运算和移位指令例:若AL=56H=01010110B若执行NOTAL;AL=10101001B=A9H若执行ANDAL,0FHAL=06H,高4清零,低4不变若执行ORAL,

0F0HAL=F6H,高位置1,低位不变若执行XORAL,0FHAL=01011001B=59H(3)测试指令

TESTdst,src;

与运算,但不产生结果,影响标志位。实现按位测试,例3-18

AL中存报警标志。若D7=1,转到温度报警处理程序T–ALARM;D6=1,则转压力报警程序P–ALARM。TESTAL,80H;查AL的D7=1?JNZT–ALARM;是1(非零),则转温度报警程序TESTAL,40H;D7=0,D6=1?JNZP–ALARM;D6=1,转压力报警其中JNZ为条件转移指令,表示结果非0(ZF=0)则转移。

区别:TESTAL,80H;按位比较,与操作,测试AL的最高位CMPAL,80H;整体比较,差操作,比较AL与80H大小

二者共同点就是运算但不产生结果,但影响标志位,实现测试或比较3.3.3逻辑运算和移位指令1.逻辑运算指令:2.算术/逻辑移位指令:用来实现快速乘/除运算

算术左移:SALdst,n;dst左移1次,相当于乘2逻辑左移:SHLdst,n;算术右移:SARdst,n;dst右移1次,相当于除2逻辑右移:SHRdst,n功能:将dst移位n次。若移位位数>1,n应为CL。3.3.3逻辑运算和移位指令例3-20:Y=X*10=(X*2)+(X*8)

MOVAL,XSALAL,1;AL=X*2

MOVBL,AL;BL=X*2SALAL,1;AL=

X*4SALAL,1;AL=X*8

ADDAL,BL;L=(X*2)+(X*8)

MOV

Y,AL执行上述7条指令一共用30T(时钟周期),这比乘法指令执行时间短得多,见附录一。3.循环移位指令: 循环左/右移:每移一次就有一位去CF,可于实现逐位检测

ROLdst,n

;若移位位数>1,n应为CLRORdst,n;带进位的循环左/右移:可实现联合移位

RCLdst,n;

RCRdst,n3.3.3逻辑运算和移位指令例如:将通用寄存器DX和AX的32位数的联合左移(乘2)。使用的指令如下:

SALAX,1

RCLDX,1逻辑运算和移位类总结逻辑运算:NOT、AND、OR、XOR、TEST逻辑移位:SAL/SHL、SAR、SHR、

循环移位:ROL、ROR带进位的循环移位:RCL、RCR3.3.3逻辑运算和移位指令改变IP(和CS)值,实现分支、循环、子程序等结构。

3.3.5控制转移类指令1.无条件转移类

(1)无条件转移指令

JMP目的

(2)过程调用和返回指令

CALL过程名.......

RET;返回到CALL的下一条指令对于近调用,执行的操作是:SP←SP-2,IP入栈

对于远调用,执行的操作是:SP←SP-2,CS入栈SP←SP-2,IP入栈如果从近过程返回,IP出栈,同时SP←SP+2;如果从远过程返回,IP出栈,SP←SP+2;CS出栈,SP←SP+2。

2.条件转移指令:满足条件则转移,否则向下执行

(1)直接条件转移3.3.5控制转移类指令

ADDAL,BL;

JCNEXT;若有进位,转NEXT

MOVAH,0;无进位,AH清0

JMPEXIT;

NEXT:MOVAH,1;有进位,AH置1EXIT:…;例3-25求AL和BL的和,若有进位,则AH置1,否则AH清0。2.条件转移指令(2)间接标志转移指令:3.3.5控制转移类指令3.循环控制指令LOOP

标号;若CX-1≠0,转移到标号(即循环程序),否则退出循环

相当于以下两条指令:DECCX;JNZ标号3.3.5控制转移类指令4.中断指令(Interrupt)(1)INTn

;软件中断指令,n为中断类型号,n=0~255(2)IRET;中断返回指令

IP出栈,SP+2SPCS出栈,SP+2SPFR出栈,SP+2SPSP-2SP,FR入栈SP-2SP,CS入栈SP-2SP,IP入栈例3-27某温度控制系统,从温度传感器(地址520H)读入一个8位温度值。当低于25度时,打开加热器;否则关闭加热器。加热器(地址521H)的控制信号连到端口的最高有效位,当将这一位置0时,打开加热器,1时则关闭加热器。

GET_TEMP:MOVDX,320H;INAL,DX;读取温度值

CMPAL,100;100度比较

JAEHEAT_OFF;≥100度,转到HEAT_OFF(停止加热程序)MOVAL,00H

温馨提示

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

评论

0/150

提交评论