微机原理与接口技术 期末复习总结 - 图文 联系客服

发布时间 : 星期五 文章微机原理与接口技术 期末复习总结 - 图文更新完毕开始阅读64d2e202ba68a98271fe910ef12d2af90242a866

微机原理与接口技术

6、相对基址变址寻址

? 在基址-变址寻址的基础上再加上一个相对位移量

EA=(BX)+(SI)或(DI)+8位或16位位移量; EA=(BP)+(SI)或(DI)+8位或16位位移量

? 若操作数的偏移地址:

由基址寄存器(BX或BP)给出 —— 基址寻址方式 由变址寄存器(SI或DI)给出 —— 变址寻址方式 同一组内的寄存器不能同时出现。

注意:除了有段跨越前缀的情况外,当基址寄存器为BX时,操作数应该存放在数据段DS中,当基址寄存器为BP时,操作数应放在堆栈段SS中。例: MOV AX, [BX+SI] MOV AX, DS: [BP] [DI] 指令操作例:MOV AX,[BX][SI]

假定:(DS)=8000H, (BX)=2000H, SI=1000H 则物理地址 = 80000H + 2000H + 1000H = 83000H 指令执行后: (AL)=[83000H]

(AH)=[83001H]

指令操作例:MOV AX,DATA[DI][BX]

若(DS)=8000H, (BX)=2000H, (DI)=1000H, DATA=200H 则指令执行后(AH)=[83021H], (AL)=[83020H]

寄存器间接、寄存器相对、基址变址、相对基址变址四种寻址方式的比较: 寻址方式 指令操作数形式

? 寄存器间接 只有一个寄存器(BX/BP/SI/DI之一) ? 寄存器相对 一个寄存器加上位移量 ? 基址—变址 两个不同类别的寄存器

? 相对基址-变址 两个不同类别的寄存器加上位移量

9 / 66

微机原理与接口技术

二、地址寻址方式(了解有4类,能判断) 简要判断依据(指令中间的单词): 段内直接 short,near 段内间接 word 段间直接 far 段间间接 dword

第一节 8086指令系统

一、数据传送指令(重点?)

1、通用传送指令

(1) MOV dest,src; dest←src

传送的是字节还是字取决于指令中涉及的寄存器是8位还是16位。 传送指令不影响标志位 具体来说可实现:

① 寄存器间(除CS,IP)实现数据任意传送

MOV BX ,AX MOV BH, AL MOV SI , BP

指令中两操作数中至少有一个为寄存器 ② 立即数送寄存器

MOV BX, 50H; MOV BX, 500H;

MOV AX, 0 (AX清零) MOV AX, 12H=MOV AL,12H MOV AL, 1000H× ③ 立即数送存储单元

MOV [BX], 500H (将00H送入存储器数据段中偏移地址BX的字节单元;将05H送入偏移地址为BX+1的字节单元)

MOV BYTE PTR [2000H] ,25H (完成将存储器数据段中偏移地址为2000H的字节单元赋值为25H)

MOV WORD PTR [2000H],25H(将存储器数据段偏移地址为2000H的字节单元

赋值为25H,同时将偏移地址为2001H的字节单元赋值为0)

物理地址=段基址*10H+EA ④ 存储单元送寄存器

MOV AX, [BX] 取数据(将存储器偏移地址为BX所指的字节单元内容送AL,

BX+1所指的字节内容送AH)

⑤ 寄存器送存储单元

MOV [BX], AX (将AL的字节单元内容送偏移地址为BX,AH的字节内容送BX+1) ⑥存储单元/寄存器送段寄存器

MOV [BX], DS 保护段地址 Mov DS ,[BX] 给地址赋值 ⑦段寄存器送存储单元/寄存器

10 / 66

微机原理与接口技术

MOV DS , AX 给段地址赋值 MOV AX , DS 保护段地址

MOV指令的使用规则

1. 两个操作数的类型必须一致;

2. 两个操作数不能同时为存储器操作数;可写成:MOV AX,[SI]; MOV [DI],AX 3. 不能用CS做目的操作数;

4. 不允许用立即数做目的操作数;要写成:MOV AX,~H; MOV DS,AX 5. 不允许立即数直接向段寄存器传送数据; 6. 不允许在段寄存器之间直接传送数据。

7. MOV指令可传送8位数据,也可传送16位数据 (2)、堆栈指令 什么是堆栈?

按“后进先出(LIFO)”方式工作的存储区域。堆栈以字为单位进行压入弹出操作。

规定由SS指示堆栈段的段基址,堆栈指针SP始终指向堆栈的顶部,SP的初值规定了所用堆栈区的大小。堆栈的最高地址叫栈底。

栈顶是堆栈操作的唯一出口,是栈地址较小的一端,栈底是不变的,为加快堆栈操作的速度,均以字为单位进行,一次操作只能是SP+2(出栈)或SP-2(入栈) ① 压栈指令PUSH

PUSH src ; src为16位操作数

(因为先入的数据会被压入栈底,而后的数据地址会越来越小) 例:PUSH AX ;将AX内容压栈 执行操作:SP→(SP)-1

[SP]←高字节AH SP→ (SP)-1 [SP]←低字节AL

故 (SP)←(SP)- 2

注意进栈方向是高地址向低地址发展。` ② 出栈指令POP POP dest

11 / 66

微机原理与接口技术

执行操作:OPRD的低字节←[SP] SP←SP+1

OPRD的高字节←[SP] SP←SP+1

例:POP BX ;将栈顶内容弹至BX

执行操作:(BL)←(SP) (BH)←(SP)+1 (SP)←(SP)+2

堆栈指令在使用时需注意的几点:

① 堆栈操作总是按字进行 ② 不能从栈顶弹出一个字给CS ③ 堆栈指针为SS:SP,SP永远指向栈顶

④SP自动进行增减量(-2,+2) (3)、交换指令XCHG

格式:XCHG reg,mem/reg 功能:交换两操作数的内容。

要求:两操作数中必须有一个在寄存器中; 操作数不能为段寄存器和立即数; 源和目地操作数类型要一致。 举例: XCHG AX,BX 将AX与BX的值相交换

XCHG [2000],CL 将CL与数据段中偏移地址为2000H的单元交换

(4)查表指令XLAT

执行的操作:AL←[(BX)+(AL)] 又叫查表转换指令,它可根据表项序号查出表中对应代码的内容。执行时先将表的首地址(偏移地址)送到BX中,待查的码存于AL中。(使用之前要有相应的设置) 实验 一(8255)中涉及 2、累加器输入输出指令

只限于用累加器AL或AX来传送信息。 功能: (累加器)←→I/O端口 (1) 输入指令IN 格式:

IN累加器,端口 端口号0~255(00H~FFH)(28-1)8位立即数直接给出 IN 累加器, DX ;DX表示的端口范围达64K 例:IN AL,80H ;(AL)←(80H端口)字节 IN AL,DX ;(AL)←((DX))

IN AL n (从端口地址为n的端口) IN AX, n (AH←[n+1],AL←[n])

IN AL, DX (从端口地址DX指明的端口读一个字节直接送AL)

IN AX, DX (AH←[DX+1],AL←[DX])字,相邻的两个单位的内容送到AX中 例IN AL,40H,CS=1000H,IP=0050H,8位端口40H中内容为55H

12 / 66