天津大学微机原理复习 电信版Word文档格式.docx

上传人:b****2 文档编号:4491485 上传时间:2023-05-03 格式:DOCX 页数:59 大小:867.02KB
下载 相关 举报
天津大学微机原理复习 电信版Word文档格式.docx_第1页
第1页 / 共59页
天津大学微机原理复习 电信版Word文档格式.docx_第2页
第2页 / 共59页
天津大学微机原理复习 电信版Word文档格式.docx_第3页
第3页 / 共59页
天津大学微机原理复习 电信版Word文档格式.docx_第4页
第4页 / 共59页
天津大学微机原理复习 电信版Word文档格式.docx_第5页
第5页 / 共59页
天津大学微机原理复习 电信版Word文档格式.docx_第6页
第6页 / 共59页
天津大学微机原理复习 电信版Word文档格式.docx_第7页
第7页 / 共59页
天津大学微机原理复习 电信版Word文档格式.docx_第8页
第8页 / 共59页
天津大学微机原理复习 电信版Word文档格式.docx_第9页
第9页 / 共59页
天津大学微机原理复习 电信版Word文档格式.docx_第10页
第10页 / 共59页
天津大学微机原理复习 电信版Word文档格式.docx_第11页
第11页 / 共59页
天津大学微机原理复习 电信版Word文档格式.docx_第12页
第12页 / 共59页
天津大学微机原理复习 电信版Word文档格式.docx_第13页
第13页 / 共59页
天津大学微机原理复习 电信版Word文档格式.docx_第14页
第14页 / 共59页
天津大学微机原理复习 电信版Word文档格式.docx_第15页
第15页 / 共59页
天津大学微机原理复习 电信版Word文档格式.docx_第16页
第16页 / 共59页
天津大学微机原理复习 电信版Word文档格式.docx_第17页
第17页 / 共59页
天津大学微机原理复习 电信版Word文档格式.docx_第18页
第18页 / 共59页
天津大学微机原理复习 电信版Word文档格式.docx_第19页
第19页 / 共59页
天津大学微机原理复习 电信版Word文档格式.docx_第20页
第20页 / 共59页
亲,该文档总共59页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

天津大学微机原理复习 电信版Word文档格式.docx

《天津大学微机原理复习 电信版Word文档格式.docx》由会员分享,可在线阅读,更多相关《天津大学微机原理复习 电信版Word文档格式.docx(59页珍藏版)》请在冰点文库上搜索。

天津大学微机原理复习 电信版Word文档格式.docx

SI:

指向源操作数

DI:

指向目的操作数

指令指针寄存器IP

是一个16位的专用寄存器。

当BIU从内存中取出一条指令,自动修改IP,始终指向下一条将要执行的指令在现行代码段中的偏移量。

8086/8088中的某些指令执行后会改变IP的内容,但用户不能编写指令直接改变IP的内容。

IP是指令地址在代码段内的偏移量(又称偏移地址),IP要与CS配合共同构成物理地址。

状态标志寄存器F

F是一个16位的专用寄存器,其中6位状态位用于存放运算结果的特征,3位控制位用于控制CPU的操作。

状态位

SF位:

符号位(SF=1负数;

SF=0正数)

ZF位:

零标志位(ZF=1运算结果为0;

ZF=0运算结果不为0)

CF位:

进位标志位(CF=1最高位有进位/借位;

CF=0最高位无进位/借位)

AF位:

辅助进位(AF=1有进位;

AF=0无进位;

辅助位表示低4位有无进位或借位)

PF位:

奇偶标志位(PF=1运算结果1的个数为偶数;

PF=0运算结果1的个数为奇数)

OF位:

溢出位(OF=1有溢出;

OF=0无溢出)主要对带符号数运算数值过大,侵占了符号位

三个控制位

DF:

方向标志-控制数据串操作指令的步进方向

DF=1减址方式(STD)

DF=0增址方式(CLD)

IF:

中断允许标志-对可屏蔽中断

IF=1开中断(STI)

IF=0关中断(CLI)

TF:

陷阱标志-程序调试

TF=1单步执行

TF=0连续正常执行

总线周期

CPU完成对存储器或I/O端口的一次访问所需的时间;

8086一个基本的总线周期一般由4个时钟周期组成。

读写周期时序

读周期:

T1:

输出地址;

T2:

总线浮空、缓冲;

T3-T4:

从总线输入数据传送数据

写周期:

T2-T4:

把输出数据送到总线上。

若存储器或外设速度慢,则向CPU发送READY无效信号,可在T3后插入一个或多个等待周期TW;

就绪后,发READY有效信号,CPU自动脱离TW而进入T4状态。

若一个总线周期后不执行下一个总线周期,即总线上无数据传输操作,系统总线处于空闲状态,此时执行空闲周期。

8086储存格式

规则字:

从偶地址开始存放的字

非规则字:

从奇地址开始存放的字

特点:

规则字的存取在一个总线周期内即可完成

非规则字的存取则需2个总线周期

I/O端口组织

8086系统和外部设备之间是通过I/O接口相互传输信息的。

端口:

I/O芯片上的一个或一组寄存器,一个I/O芯片上有若干个端口。

端口号(端口地址):

为每个I/O端口分配的地址,具有惟一性。

微机I/O端口有两种编址方式

(1)统一编址

(2)独立编址

统一编址

又称“存储器映射方式”。

在这种编址方式下,I/O端口地址置于存储器空间中,和存储单元统一编址。

优点:

无需专门的I/O指令,对端口操作的指令类型多,从而简化了指令系统的设计。

缺点:

端口占用存储器的地址空间,使存储器容量更加紧张,同时端口指令的长度增加,执行时间较长,端口地址译码器较复杂。

独立编址

又称“I/O映射方式”。

将端口单独编址构成一个I/O空间,不占用存储器地址空间。

这就需要设置专门的输入(IN)、输出指令(OUT)对I/O端口进行操作。

端口所需的地址线较少,地址译码器较简单,采用专用的I/O指令,端口操作指令执行时间少,指令长度短。

输入输出指令类别少,一般只能进行传送操作。

8086系统采用的是I/O独立编址方式。

端口地址说明

8086使用A15~A0这16根地址线作为I/O端口地址线,可访问端口最多可达64K个8位端口或32K个16位端口。

和存储器的字单元一样,对于奇地址的16位端口的访问,要进行两次操作才能完成。

16位的I/O端口地址无需经过地址加法器产生,因而不使用段寄存器。

从地址总线上发出的端口地址仍为20位,只不过最高四位A19~A16为0。

第三章

指令的基本格式

操作码说明计算机要执行哪种操作,如传送、运算、移位、跳转等操作,它是指令中不可缺少的组成部分

操作数是指令执行的参与者,即各种操作的对象

每种指令的操作码:

用一个助记符表示(指令功能的英文缩写)

对应着机器指令的一个或多个二进制编码

指令中的操作数:

可以是一个具体的数值

可以是存放数据的寄存器

或指明数据在主存位置的存储器地址

寻址方式

寻找指令中所需的操作数或操作数地址的方式称为寻址方式

系统设计了多种操作数的来源

直接给出所使用的操作数本身

给出操作数所在的寄存器、存储器或I/O端口的地址

给出操作数所在的寄存器、存储器或I/O端口的地址的计算方法。

立即数寻址

指令中的操作数直接存放在机器代码中,紧跟在操作码之后

立即数可以是8位、16位或32位数值

立即数寻址方式只允许源操作数为立即数,目标操作数必须是寄存器或存储器

不需要访问存储器,执行速度快

Eg:

MOVAX,0102H;

AX←0102H

固定寻址

指令中的操作数是CPU中某个固定寄存器,该寄存器被隐含于操作码中。

寄存器寻址

操作数存放在CPU的内部寄存器reg中:

8位寄存器r8:

AH、AL、BH、BL、CH、CL、DH、DL

16位寄存器r16:

AX、BX、CX、DX、SI、DI、BP、SP

4个段寄存器seg:

CS、DS、SS、ES

无需访问存储器,执行速度快

源操作数和目的操作数可同时使用寄存器寻址

MOVAX,BX;

AX←BX

储存器寻址

操作数在主存储器中,用主存地址表示

程序设计时,8086采用逻辑地址表示主存地址

段地址在默认的或用段超越前缀指定的段寄存器中

指令中只需给出操作数的偏移地址

8086设计了多种存储器寻址方式

1、直接寻址方式

直接寻址方式的有效地址在指令中直接给出

默认的段地址在DS段寄存器,可使用段超越前缀改变

用中括号包含有效地址,表示取该存储单元的内容

MOVAX,[2000H];

AX←DS:

[2000H]

MOVAX,ES:

[2000H];

AX←ES:

2、寄存器间接寻址方式

有效地址存放在基址寄存器BX或变址寄存器SI、DI中,默认的段地址在DS段寄存器,可使用段超越前缀改变

MOVAX,[BX];

[BX]

如果指令中指定的寄存器是BP,则操作数在堆栈段SS中:

MOV[BP],AX

假设(SS)=1000H,

(BP)=3000H,

(AX)=1234H

物理地址=(SS)*16+(BP)

3、寄存器相对寻址方式

有效地址是寄存器内容与有符号8位或16位位移量之和,寄存器可以是BX、BP或SI、DI

段地址对应BX/SI/DI寄存器默认是DS,对应BP寄存器默认是SS;

可用段超越前缀改变

MOVAX,06H[SI]或MOVAX,[SI]06H

4、基址变址寻址方式

有效地址由基址寄存器(BX或BP)的内容加上变址寄存器(SI或DI)的内容构成:

段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS;

5、相对基址变址寻址方式

有效地址是基址寄存器(BX/BP)、变址寄存器(SI/DI)与一个8位或16位位移量之和

6、串寻址

串寻址方式仅在8086的串指令中使用

根据设定的方向标志(DF),SI和DI会自动调整。

I/O(输入/输出)端口寻址

(1)直接端口寻址

为双字节指令,可寻址的端口数为0~255

可有字和字节两种使用方式

(2)寄存器间接端口寻址

为单字节指令

端口地址放在DX中,地址为0000H~FFFFH

8086指令系统

包括6大类133条基本指令

(1)数据传送类指令

通用数据传送指令MOVPUSHPOPXCHG

传送指令MOV(move)

格式:

MOVDST,SRC

操作:

DST←(SRC)

即把源操作数的内容送入目的操作数

说明:

可以进行8位或16位数据的传送

源操作数可为立即数、寄存器、存储器操作数

目的操作数可为寄存器、存储器操作数

MOV指令——立即数传送

以字母开头的常数要有前导0

MOV指令——通用寄存器传送

寄存器具有明确的字节和字类型

MOV指令——段寄存器传送

对段寄存器的操作不灵活

非法指令

(1)——两个操作数类型不一致

在绝大多数双操作数指令中,目的操作数和源操作数必须具有一致的数据类型,或者同为字量,或者同为字节量,否则为非法指令

非法指令

(2)——无法确定是字节量还是字量操作

当无法通过任一个操作数确定操作类型时,需要利用汇编语言的操作符显式指明

非法指令(3)——两个操作数都是存储器

非法指令(4)——违反对段寄存器操作的限制

不允许在段寄存器之间直接传送数据

MOVDS,ES;

非法指令

不允许向段寄存器送立即数

MOVDS,100H;

不允许用CS或IP作为目的操作数

MOVCS,[SI];

非法指令(5)——立即数作为目的操作数

交换指令XCHG(exchange)

功能:

把两个地方的数据进行互换

XCHGOPR1,OPR2

(OPR1)↔(OPR2)

寄存器与寄存器之间对换数据

寄存器与存储器之间对换数据

不能在存储器与存储器之间对换数据

堆栈操作指令

堆栈是一个“后进先出LIFO”(或说“先进后出FILO”)的主存区域,位于堆栈段中;

SS段寄存器记录其段地址

堆栈只有一个出入口,即当前栈顶;

用堆栈指针寄存器SP指定

堆栈只有两种基本操作:

进栈和出栈,对应两条指令PUSH和POP

进栈指令PUSH

将寄存器、段寄存器或存储器中的一个字数据压入堆栈,堆栈指针减2。

PUSH←SRC

SP←(SP)-2

((SP)+1,(SP))←(SRC)

出栈指令POP

将栈顶元素弹出送至某一寄存器、段寄存器(除CS外)或存储器,堆栈指针加2。

POPDST

DST←((SP)+1,(SP))

SP←(SP)+2

堆栈操作的特点

字操作

低地址字节送低字节,高地址字节送高字节

先进后出,但可存储器寻址方式随机存取其中数据

堆栈段常用来保存临时数据

累加器专用传送指令

INOUTXLAT

累加器是数据传输的核心

IN输入指令

格式1:

INAL,Port或INAX,Port

格式2:

INAL,DX或INAX,DX

AL/AX←(Port)从外设读入数据

AL/AX←(DX)以DX内容为端口地址读入

用Port指明端口地址时,地址范围为00H~0FFH

以DX间接给出端口地址时,最大地址为0FFFFH

OUT输出指令

OUTPort,AL或OUTPort,AX

OUTDX,AL或OUTDX,AX

(Port)←(AL)/(AX)传送数据到Port端口

(DX)←(AL)/(AX)传送数据到DX指出的端口

用Port指明端口地址时,地址范围为00H-0FFH

注意:

(1)只能使用累加器做为I/O指令的取数或送数的寄存器

(2)使用INAL/AX,DX格式时必须先将端口地址赋给DX寄存器

(3)运行I/O程序时,必须确定端口地址

查表转换指令XLAT

将BX指定的区域中、AL指定的位移处的一个字节数据取出赋给AL

XLATOPR或XLAT

AL←((BX)+(AL))

地址-目标传送指令LEALDSLES

有效地址传送指令LEA

将存储器操作数的有效地址送至指定的16位通用寄存器

LEADST,SRC

DST←SRC的EA

注意以下两条指令差别:

LEABX,BUFFER

MOVBX,BUFFER

前者表示将符号地址为BUFFER的存储单元的偏侈地址取到BX中;

后者表示将BUFFER存储单元中的内容取到BX中.

装载数据段指针指令LDS

LDSDST,SRC

DS←(SRC+2)

装载附加段指针指令LES

LESDST,SRC

ES←(SRC+2)

源操作数必须是存储器操作数

目的操作数必须是寄存器

标志传送指令LAHFSAHFPUSHFPOPF

读标志指令LAHF

LAHF把标志寄存器低8位中的5个标志位传送到AH中的指定位

设置标志指令SAHF

SAHF的功能与LAHF的功能正好相反

标志进栈指令PUSHF

PUSHF

SP←(SP)-2

((SP)+1,(SP))←(FLAGS)

标志出栈指令POPF

POPF

FLAGS←((SP)+1,(SP))

SP←(SP)+2

小结

1、数据传送指令不影响标志位,除SAHF和POPF这两条指令外

2、除XCHG指令外,都是从源到目的的单向传送

(2)算术运算类指令

算术运算类指令用来执行二进制的算术运算:

加减乘除。

这类指令会根据运算结果影响状态标志,有时要利用某些标志才能得到正确的结果。

有单操作数指令,也有双操作数指令

加法指令ADDADCINCAAADAA

减法指令SUBSBBDECNEGAASDASCMP

乘法指令MULIMULAAM

除法指令DIVIDIVAADCBWCWD

ADD常规加指令

ADDDST,SRC

DST←(DST)+(SRC)

ADC带进位加指令

ADCDST,SRC

DST←(DST)+(SRC)+(CF)

该指令除了多一个进位标志外,同ADD指令常用于多字节运算

双字加法规则:

1.先加低16位,如有进位的话,进位存入CF

2.然后加高16位,必须用ADC,以便能加上进位位

INC增1指令

INCDST

DST←(DST)+1

说明:

DST可以是寄存器或存储器操作数

DST不允许是立即数

此指令不影响CF标志

组合十进制加法调整指令DAA—压缩BCD码调整

非组合十进制加法调整指令AAA—非压缩BCD码调整

1.在AL中进行

2.自动完成加6调整

3.一般用于二进制加法指令ADD之后

SUB常规减指令

SUBDST,SRC

DST←(DST)-(SRC)

SBB带借位减指令

SBBDST,SRC

DST←(DST)-(SRC)-(CF)

该指令除了多一个进位/借位标志外,同SUB常用于多字节运算

DEC减1指令

DECDST

DST←(DST)-1

用法同INC指令

NEG求补指令

NEGDST

DST←-(DST)

说明-(DST)表示操作数按位求反后末位加1执行时,用零减去操作数

CMP比较指令

格式:

CMPDST,SRC

(DST)-(SRC)

1、两个操作数相减,但结果不回送

2、影响标志位的值,下一指令常是条件转移指令

3、必须区分无符号数比较与有符号数比较

MUL无符号数乘指令

MULSRC

字节乘,AX←(AL)*(SRC)byte

字乘,DX:

AX←(AX)*(SRC)word

约定一个乘数在累加器中

对标志位影响:

若乘积的高半部分(字节相乘时为AH,字相乘时为DX)不为零,则CF=1,OF=1;

否则CF=0,OF=0。

其它标志位为任意值

IMUL符号数乘指令

IMULSRC

字节数乘,AX←(AL)*(SRC)byte

字数据乘,DX:

AAM非压缩BCD码乘调整指令

AAM

将AX中的两个非压缩BCD码之积进行调整

调整过程:

将AL除以10,商送AH,余数送AL

8086指令系统没有提供对组合BCD码乘法的调整指令

DIV无符号数除指令

DIVSRC

AL(商),AH(余数)←(AX)/(SRC)byte

AX(商),DX(余数)←(DX:

AX)/(SRC)word

IDIV带符号数除指令

IDIVSRC

3.AAD非压缩BCD码除调整指令

AAD

在除法运算前,用该指令将AX中的非压缩BCD码形式的被除数调整为二进制数,然后做除法运算

(AL)+(AH)*10→AL

0→AH

(AX)/除数,商→AL,余数→AH

CBW符号扩展指令-字节扩展成字

CBW

扩展AL中的符号至AH中,将8位数扩展成等效的16位数

CWD符号扩展指令-字扩展成双字

CWD

扩展AX中的符号至DX中,将16位数扩展成等效的32位数

用于在有符号数除法之前,形成双倍长度的被除数

1、包括二进制运算及十进制运算调整指令

2、指令操作结果影响标志位

3、注意有符号数与无符号数的区别

4、乘、除法指令是单操作数指令,AX/DX

5、SUB与CMP指令异同

6、INC/DEC多用于修改地址指针和循环计数器

7、十进制运算调整指令分为压缩的和非压缩的二种,仅限于字节

(3)逻辑运算与移位类指令

以二进制位为基本单位进行数据的操作

当需要对字节或字数据中的各个二进制位操作时,可以考虑采用位操作类指令

注意这些指令对标志位的影响

1.逻辑运算指令

ANDORXORNOTTEST

NOT逻辑非指令

NOTOPR

OPR按位取反后送回原处

AND逻辑与指令

ANDDST,SRC

(DST)←(DST)&

(SRC)

OR逻辑或指令

ORDST,SRC

(DST)←(DST)|(SRC)

XOR异或指令

XORDST,SRC

(DST)←(DST)与(SRC)按位异或

TEST测试指令

TESTOPR1,OPR2

(OPR1)&

(OPR2)

不送回操作结果,仅影响标志位

逻辑运算指令对标志位的影响:

无进/借位,NOT指令不影响标志位

移位指令

将操作数移动一位或多位,分成逻辑移位和算术移位,分别具有左移或右移操作

第一操作数是指定的被移位的操作数,可以是寄存器或存储单元;

第二操作数表示移位位数

该操作数为1,表示移动一位

该操作数为CL,CL寄存器值表示移位位数(移位位数大于1只能CL表示)

影响标志位

2.移位指令

SHLSHRSALSAR

SALreg/mem,1/CL

reg/mem左移1或CL位

最低位补0,最高位进入CF

SARreg/mem,1/CL

reg/mem右移1/CL位

最高位不变,最低位进入CF

SHLreg/mem,1/CL

与SAL是同一条指令

SHRreg/mem,1/CL

最高位补0,最低位进入CF

逻辑移位指令用于无符号数的移位

算术移位指令用于带符号数的移位

移位类指令的特点

对寄存器或存储单元中8位或16位数的移位

影响C,P,S,Z,O标志。

结果未溢出时:

左移1位≡操作数*2

右移1位≡操作数/2

带符号数左移会出现溢出情况

最高位≠CFOF=1溢出

最高位=CFOF=0没有溢出

3.循环移位指令

ROLRORRCLRCR

循环移位指令类似移位指令,但要将从一端移出的位返回到另一端形成循环。

分为:

ROLreg/mem,1/CL;

不带进位循环左移

RORreg/mem,1/CL;

不带进位循环右移

RCLreg/mem,1/CL;

带进位循环左移

RCRreg/mem,1/CL;

带进位循环右移

循环移位指令的操作数形式与移位指令相同,

影响进位标志CF,但不影响SF、ZF、PF、AF标志

循环移位指令的主要用途:

检测寄存器或存储单元中含1或含0的个数

与移位指令联合使用,实现多倍精度的左移和右移

(4)串操作类指令

(5)控制转移类指令

1.无条件转移指令JMP

段内直接转移JMPDISP

指令中以符号数的形式直接直接给出一个相对于IP的位移量:

位移量转移范围汇编语言中格式

8位-128~+127JMPSHORTOPRD

16位

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2