微机第三章第三讲_第1页
微机第三章第三讲_第2页
微机第三章第三讲_第3页
微机第三章第三讲_第4页
微机第三章第三讲_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

一.概述

8086/8088的指令系统中共有133条基本指令。可以分成6个功能组:数据传送(Datatransfer)

算术运算(Arithmetic)逻辑运算和移位指令(Logic&Shift)

串操作(Stringmanipulation)

控制转移(ControlTransfer)处理器控制(ProcessorControl)第四节8086/8088的指令系统11.指令助记符表232.学习指令的要点从以下几个方面来掌握一条指令:

指令的助记符

指令的格式:操作数的个数、类型(B,W,DW)

执行的操作:指令执行后的结果包括:哪些寄存器、内存单元的值发生了变化对标志位有无影响,哪些受影响

特点及注意事项

43.指令中操作数的表示符号表示内容data立即数操作数reg通用寄存器操作数8位:AH、AL、BH、BL、CH、CL、DH、DL16位:AX、BX、CX、DX、BP、SP、SI、DISegreg或seg段寄存器CS、DS、SS、ESmem或[]存储器操作数(5种寻址方式)src源操作数dst目的操作数

(

)注释时表示寄存器、存储器、端口的内容oprd1oprd2两操作数54.书写指令注意事项:不区分字母的大小写。下列写法表示同一条指令:MOVAX,1ABDHmov

ax,1abdh注意操作数的范围对字节操作指令0~FFH0~255对字操作指令0~FFFFH0~65535

对无操作数指令,不添加操作数。

STCAL

对单操作数指令,操作数不能是立即数。IMUL66

对双操作数指令①不能两个同为存储器操作数

MOV[DI],[SI]

②目的操作数不能是立即数

ADD3,AL

两个操作数的类型应相同

SUBAX,BL

若value定义为字类型存储器变量:

MOVCL,value[BX]7

内存操作数的属性应明确。

MOV[BX],0MOVbyteptr[BX],0MOVwordptr[BX],0MOV[BX],ALMOV[BX],AX

A、B、C、D、E、F开头的十六进制数前面加0,与H结尾的标识符区别。如寄存器名:AH、BH、CH、

DH

变量名:abcdH

等例

movAL,0AH

movAL,AH

movBX,0abcdH8

CS和IP的值只在控制转移指令中修改。对非控制转移指令,取完指令后IP值自动+1,指向下条指令。段寄存器CS的值,只在MOV、PUSH中可作操作数,且这两条指令执行结果不改变CS值。MOVAX,CSPUSHCSIP、PSW两个寄存器不能作为操作数在指令中出现。movIP,1234HmovPSW,0F0FHPSW状态寄存器的值由指令执行后确定,不同的指令对各标志的影响不同。9二.数据传送指令地址总线AB存储器I/O接口输入设备I/O接口数据总线DB控制总线CB输出设备CPU寄存器,存储器,I/O端口10

按传送内容,可分为四类:1.通用数据传送MOV,PUSH,POP,XCHG2.

累加器专用传送

IN,OUT,XLAT3.

地址传送LEA,LDS,LES4.

标志传送PUSHF,POPF,LAHF,SAHF

特点:

1.除POPF、SAHF外,其他传送指令对标志位均无影响

2.唯一允许以段寄存器做操作数的指令且只有MOV、PUSH、POP这三条允许11reg/mem/segreg←regreg/segreg

memreg/mem

segregreg/mem

←data

可实现(1)MOV传送指令格式

MOVdst,src执行

(dst)←(src)12MOV指令特点及注意事项:

双操作数指令(注意双操作指令的特点)可进行字节或字传送不允许存储器传送到存储器MOV[BX],[value]MOV[DI],[SI]MOVAX,valueMOV[BX],AXMOVAL,[SI]MOV[DI],AL13

可对DS、ES、SS赋值但不允许立即数直接传送给段寄存器MOVDS,AXMOVES,[BX]MOVDS,1000HMOVAX,1000HMOVDS,AX

CS不能做目的操作数,不能通过传送指令改变CS的值

MOVCS,AXMOVAX,CS

不允许段寄存器传送到段寄存器

MOVES,DS14例编程将CL寄存器的内容传送到200:100H单元中。MOVAX,200HMOVDS,AX;(DS)=200HMOV[100H

],CL;(02100H)=(CL)编程1:MOVAX,200HMOVDS,AX;(DS)=200HMOVDI,100H;(DI)=100HMOV[DI

],CL;(02100H)=(CL)编程2:MOV[200:100H],CL15

MOV指令应用例:实现将AREA1开始的100个数据传送到AREA2开始的单元。……AREA1:AREA2:100个数据16分析题意:

①可以用200条MOV指令来完成100个数据传送,指令操作重复,每个数据传送后的地址是变化的。

②可以利用循环, 但每循环一次要修改地址(源地址和目的地址),必须把地址放在寄存器当中,用寄存器间接寻址来寻找操作数.17得到如下程序:

MOVSI,OFFSETAREA1 MOVDI,OFFSETAREA2 MOVCX,100AGAIN: MOVAL,[SI] MOV[DI],AL

INCSI

;修改地址指针

INCDI ;修改地址指针

DECCX ;修改个数

JNZAGAIN

…18

PUSH(Pushwordontostack)POP(Popwordoffstack)

这是两条堆栈操作指令。先介绍一下什么是堆栈,为什么需要堆栈?堆栈是按照先进后出原则组织的一段内存区域。通常用于存放一些重要数据,

如:程序的地址、或是需要恢复的数据。为方便数据的存放和恢复,设置专门的指针,指向堆栈中要操作的单元。段值由SS给出,偏移地址由SP给出

SS→堆栈段寄存器(stacksegment)SP→堆栈指针寄存器(stackpoint)SS:SP

特点:下推式的(规定堆栈设置在堆栈段内)改变SP的内容,随着推入堆栈内容增加,SP的值减少。先进后出工作原则(LastInFirstOut简称LIFO)19堆栈在内存中的情况:

可以用一条立即数传送指令给SP赋值,确定SP在SS段中的初始位置。例:设:(SS)=9000H,堆栈段为64KBMOVSP,0E200H ;(SP)=0E200H则:

整个堆栈段的物理地址范围为:

90000H~9FFFFH

栈顶的物理地址为

9E200H

堆栈在内存中的情况20(2)堆栈操作指令

(堆栈操作指令有两条):

入栈指令格式:PUSHsrc ;(SP)

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

(src)

把一个字从源操作数(src)

由SP指向堆栈顶部。

出栈指令格式:POPdest ;(dest)

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

(SP)+2把现行SP所指向堆栈顶部的一个字

指定的目的操作数(dest),同时进行修改堆栈指针的操作。SS:SP

SS:SP

(src)SS:SP

SS:SP

(dst)21

PUSH入栈操作格式

PUSHsrc

执行(SP)←(SP)-2

(SS:SP)←(src)特点:

单操作数指令操作数为16位,可以是reg/segreg/mem,不可以是datareg:AX,BX,CX,DX,SI,DI,BP,BXsegreg:CS,DS,ES,SSmem:字类型SS:SP

SS:SP

(src)22例:

PUSHAX若执行前:

(SS)=2000H(SP)=1002H(SS:SP)=

2010H

(AX)=1234H3B2A10低高20地址SS:SP2000:1002指令执行前(AX)=1234h则执行PUSHAX后:

(SS)=2000H(SP)=1000H(SS:SP)=1234H(AX)=1234H123410低高20地址SS:SP2000:1000指令执行后(AX)=1234h不变减2变不变

23特点:单操作数指令操作数为16位,可以是reg/segreg/mem,不可以是datareg:AX,BX,CX,DX,SI,DI,BP,BXsegreg:DS,ES,SS,不允许是CSmem:字类型

POP出栈操作SS:SP

SS:SP

(dst)格式

POPdst

执行(dst)←(SS:SP)(SP)←(SP)+224若执行前:

(SS)=2000H(SP)=1000H(SS:SP)=1234H

(BX)=5678H123410低高20SS:SP2000:1000指令执行前地址(BX)=5678h例:

POPBX123410低高20SS:SP2000:1002指令执行后地址(BX)=1234h则执行POPBX后:

(SS)=2000H(SP)=1002H

(SS:SP)=2010H(BX)=1234H

不变加2变

25堆栈使用的场合用堆栈保存恢复信息

子程序的调用、返回以及中断调用、返回

用堆栈传送数据(程序设计中介绍)26注意事项

堆栈是一重要数据结构,使用堆栈应有明确目的。不乱用堆栈操作,不乱修改堆栈内容。PUSH、POP、PUSHF、POPF、CALL、RET、INT、IRET

乱修改SS和SP的内容包括乱用BP参与的存储器操作数

乱用指令27

PUSH和POP指令只能对字操作。

PUSHALPOPBYTEPTR[BX]

可以对段寄存器操作但POP不能对CS操作

PUSHDSPUSHCSPOPES

POPCS28(3)XCHG交换指令

格式

XCHGoprd1,oprd2执行

(oprd1)(oprd2)reg

regreg

memmem

reg

可实现29例

XCHGAX,BX字操作执行前(AX)=1122H(BX)=3344H

执行后(AX)=3344H(BX)=1122H

XCHGAH,BL字节操作执行前(AX)=1122H(BX)=3344H

执行后(AX)=4422H(BX)=3311H30XCHGoprd1,oprd2注意事项:

双操作数指令可进行字或字节操作,不影响标志位。不允许对立即数、段寄存器做操作数

XCHGAX,4

XCHGBX,DS

存储器之间不能交换,两个操作数中必须有一个在寄存器中;

XCHG[BX],[DI] (错)31输入输出指令(InputandOutput)

输入输出指令共两种:

(1)、IN

(Inputbyteorword)(2)、OUT(Outputbyteorword)

输入指令用于CPU从外设端口接受数据,

输出指令用于CPU向外设端口发送数据。无论接收还是发送数据,必须通过累加器AX(字)或AL(字节),又称累加器专用传送指令。

输入、输出指令不影响标志位。32每个外设要占几个端口:数据口,状态口和控制口。33

CPU与I/O设备进行信息交换要通过端口:

在IBMPC机里,可以配接许多外部设备,每个外设与CPU之间交换数据,状态信息和控制命令,每一种信息交换都要通过一个端口来进行。端口数:外部设备最多有65536个I/O端口。由A0~A15译码形成。端口号:端口号(即外设端口地址)为0000H~FFFFH。

PC机端口数:仅使用A0~A9译码形成I/O口地址即1024H个口地址

PC机端口号:0000H~03FFH

其中:A9=1,表示扩充槽上的口地址。34(1)、IN(Inputbyteorword)输入指令格式:INacc,port;(acc)

(port)具体形式有四种:直接寻址方式:I/O端口地址用8位立即数表示

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

INAX,data8;端口地址8位,输入一个字间接寻址:将16位地址号送入DX,再对[DX]进行I/O操作

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

INAX,DX ;端口地址16位,输入一个字必须通过累加器AX(字)或AL(节)输入数据。35(2)、OUT(Outputbyteorword)输出指令格式:OUTport,acc ;(port)

(acc)具体形式有四种:直接寻址方式:

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

OUTdata8,AX;端口地址8位,输出一个字间接寻址方式:

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

OUTDX,AX;端口地址16位,输出一个字必须通过累加器AX(字)或AL(节)输出数据。36例1:实现(29H)(28H)→(DATA_WORD)

INAX,28H;对端口号28H、29H的内容进行访问

MOVDATA_WORD,AX例2:从端口3FCH送一个字到AX寄存器

MOVDX,3FCH;通过DX进行间址访问

INAX,DX;例3:实现将(AL)→(05H) OUT5,AL;(05H)←(AL);将(AL)的内容送入端口05H372、XLAT(Translate)字节转换指令(换码指令):

该指令不影响标志位。格式:XLATstr_table

;(AL)←((BX)+(AL))

或XLAT

str_table——表格符号地址(首地址),只是为了提高可读性而设置,汇编时仍用BX。

38XLAT指令使用方法:先建立一个字节表格;表格首偏移地址存入BX;需要转换代码的序号(相对于表格首地址位移量)存入AL;

(表中第一个元素的序号为0)执行XLAT指令后,表中指定序号的元素存于AL中。

(AL)为转换的代码。39XLAT指令应用:若把字符的扫描码转换成ASCII码;或数字0~9转换成7段数码所需要的相应代码(字形码)等就要用XLAT指令。例:内存的数据段中有一张十六进制数字的ASCII码表。

首地址为:Hex_table,欲查出表中第10个元素(‘A’)40执行指令序列:MOVBX,OFFSETHex_tableMOVAL,0AHXLATHex_table假设:(DS)=F000H,

Hex_table=0040H

(AL)=0AH执行XLAT以后:(AL)=41H=(F004AH),

即“A”的ASCII码。30H31H32H...39H41H42H...46H...Hex_tableHex_table+1Hex_table+2Hex_table+0AHHex_table+0BHHex_table+0FH'F''B''A''9''1''2''0'16进制数的ASCII码表413.目的地址传送指令(Address-objecttransfer)8086/8088提供三条:

地址指针写入指定寄存器或寄存器对指令。(1) LEA(LoadEffectiveAddress)(2) LDS(LoadpointerusingDS)(3) LES(LoadpointerusingES)42(1)LEA有效地址传送格式

LEAreg,mem执行(reg)←mem的EA

即寄存器←存储器操作数的偏移地址

43执行后

(BX)=1000H注意:

OFFSET是汇编程序提供的一个操作符,不是CPU的指令.LEABX,buffer例

buffer是一个符号地址表示的内存操作数(变量)。…...12h34h56h…...buffer内存DS:1000h若变量buffer的偏移地址=1000H等价于

MOVBX,OFFSETbuffer44buffer

1A2B3C4D、、、、、、例

将buffer为首的4个字节内存内容相加,存放在AL中。

MOVAX,SEGbufferMOVDS,AX

LEABX,bufferMOVCX,4MOVAL,0exit:ADDAL,[BX]INCBXDECCX;(cx)=(cx)-1JNZexit;ZF≠0,转至exit说明:1)

操作符SEG的作用是取变量的段地址。执行完前两条指令后,(DS)=buffer的段值

2)

操作符OFFSET的作用是取变量的偏移地址执行完LEA

BX,buffer,(BX)为buffer的偏移地址,

3)操作数[BX]是以DS为段值,BX为偏移值的内存单元45

LEAreg,mem特点及注意事项:目的操作数reg应是16位通用寄存器

LEAES,[BX]LEAAL,bufferLEA6,[BX+SI]LEA[DI],buffer

源操作数应是存储器操作数

LEABX,AX

传送的是内存单元的有效地址,与其内容无关。…...12h34h56h…...buffer内存46(2)

LDS(LoadpointerusingDS)格式:LDSreg16,mem32 ;(reg16)←(EA) (DS)←((EA)+2))功能:把源操作数指定的4个相继字节送指令指定的寄存器及DS寄存器中。

前两个单元内容(16位偏移量)装入指定通用寄存器,后两个单元内容(段地址)装入到DS段寄存器。用于写远地址指针。47例:假设:

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

80H01H00H20HC000H:0010H(DS)C0011HC0012HC0013H......存储器48(3)

LES(LoadpointerusingES)格式:LESreg16,mem32 ;(reg16)←(EA) (ES)←((EA)+2))功能:把源操作数指定的4个相继字节送指令指定的寄存器及ES寄存器中。前两个单元内容(16位偏移量)装入指定通用寄存器,

温馨提示

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

评论

0/150

提交评论