操作数的寻址方式
第三章 操作数的寻址方式
![第三章 操作数的寻址方式](https://img.taocdn.com/s3/m/b056f53df18583d049645988.png)
2
一、立即数寻址方式(P24)
直接把参与操作的数据写在指令中,是指令的一部分, 该数据称为立即数。操作数可以是各种数制下的数值(8位或16 位二进制数),也可以是带单引号的字符。 例如:MOV AX,2050H MOV AL,05H MOV AL,‘A’ 观察下面指令中的错误: MOV 05H,AL MOV BL,324D MOV CH,2050H 注意:1.立即数永远不能作目的操作数。 2.源操作数和目的作码
操作数
2、说明:
操作码:每条指令必有。 操作数:不同的指令其操作数的个数不同 例如: MOV AX,2050H
在上面的MOV指令中,MOV是操作码,AX和2050H是操作 数。其中: AX是目的操作数, 2050H是源操作数。该指令的 作用是将2050H存入寄存器AX中。
7
四、寄存器间接寻址方式(P27)
把参与操作数的偏移地址写在寄存器中,而操作数在内 存中。物理地址的计算需要利用段寄存器。 偏移地址(或有效地址)通过寄存器间接给出,可用的 寄存器只能为BX、BP、SI、DI。 段寄存器可以指定,也可以不指定。如果没有指定段寄 存器,则使用默认的寄存器(BP对应SS,其余3个对应DS) 例1: MOV [BX],2050H 目的操作数[BX]是寄存器间接寻址方式。 例2: MOV AX,[BP] 原操作数[BP]是寄存器间接寻址方式。
答案: ① MOV AX, [ARRAY+8] ② MOV SI, ARRAY+8 MOV AX ,[SI] ③ MOV SI,8 MOV AX ,[ARRAY+SI] ④ MOV BX,ARRAY MOV SI ,8 MOV AX,[BX][SI]
17
例4:指令MOV AX,[BX] [SI] ( 或写为MOV AX,[BX+SI] ) 若(DS)=2000H,(BX)=0500H,(SI)=0010H, (2050FH)=00H,(20510H)=12H,(20511H)=34H, (20512H)=56H。则: ①偏移地址为多少? ②物理地址为多少? ③指令执行完后AX为多少?
寻址方式
![寻址方式](https://img.taocdn.com/s3/m/a32b4fb87f1922791688e897.png)
格式 操作码θ RX Rb D
变址寄存器号 基址寄存器号 位移量
S =((RX)+(Rb)+ D) 便于处理两维数组。
S =((RX)+(Rb)+ D) 便于处理两维数组。
例. 访问二维表格。
(RX)
((RR令bX)):指+D向指向一行各行中起各始元素;(Rb。)+D
DRR为bX初初表值值格为 为首00, ,址每 每访 访问问一一行列,,((RRbX))++41;。
(4)相对寻址
指令给出位移量,PC内容与位移量之和为有
效地址。
或隐含指定 位移量
格式 操作码θ PC ±D
有效地址相对 PC上下浮动,给
S =((PC)±D)
编程带来方便。
(5)页面寻址 指令给出位移量,PC的高位部分与位移量拼 接,形成有效地址。
栈顶
S
... ... ...
堆栈向上生成 压栈:S-P(S自P动),减自1,减再型间存址数。。SP 栈顶 出栈:先 (SP取)数+,,自SP增再型自间动址加。1。
... ... ...
M
低
S
高
SP既可出现在指令中,也可隐含约定。
4.变址、基址寻址及其变化 (1)变址寻址 指令给出一个寄存器号和一个地址量,寄存 器内容与地址量之和为有效地址。
存储空间中任何一个定长区 Rb
间(4K)。
4K
改变Rb的内容,程序能访问
存储空间中任何一个与基址
保持相同距离 …...
M D=2
D=2
便指于定的访元问素两。维数组中某类 基80址X8方6计式算的物一理种地变址化:——
第三章操作数的寻址方式
![第三章操作数的寻址方式](https://img.taocdn.com/s3/m/530940bfc8d376eeaeaa317b.png)
第一节 汇编指令格式
2、单操作数指令
指令助记符 操作数
只有把数据先送入隐含的寄存器中、才能执行此操
作的指令。
例:mul cx
;(ax) ×(cx)→(dx,ax)
3、无操作数指令 指令助记符
例:clc ;0→cf stc ;1→cf
第二节 操作数的寻址方式
一、概述 二、立即数寻址(imm) 三、寄存器寻址(reg) 四、存储器寻址(mem)
如mov ax,varw
mov ax,[varw]
与立即数寻址的区别
在指令中,直接寻址给出操作数的EA,立 即数寻址给出操作数。
用数字书写时,格式不一样。
mov ax,1234h
mov ax,[1234]
2、寄存器间接寻址
操作数在存储器中,操作数的有效地址用si、di、 bx和bp等四个寄存器之一来指定,称这种寻址方式 为寄存器间接寻址方式。
2、寄存器间接寻址
例:假设有指令:mov ax, [bx],在执行时, (ds)=3000h,(bx)=2000h,存储单元32000h的内容是 1234h。问执行指令后,ax的值是什么?
PA=(ds)*16+(bx)=3000h*16+2000h=32000h (bx)=1234h
图示
3、寄存器相对寻址
立即数寻址(imm)
操作数出现在指令中,是指令的一个组成部分。这 样的操作数叫做立即数.以这种指定操作数的方式 就叫做立即数寻址。 执行过程
例:
mov ah, 80h add ax, 1234h mov b1, 12h mov w1, 3456h add d1, 32123456h
其中:b1、w1和d1分别是字节、字和双字内存变量。
七种寻址方式
![七种寻址方式](https://img.taocdn.com/s3/m/448208baf121dd36a32d82a9.png)
程序计数器 地址寄存器 外部地址总线AB 外部地址总线AB
0002H PC= 0000H 0001H
0000H
内 部 数 据 总 线
(PC) (PC) (PC)
执行过程
运算器 ①② 累加器A 累加器A 存 储 器
0002H 0001H 0 0 0 0 1 0 0 1 0000H 0 1 1 1 0 1 0 0
…Leabharlann MOVC A,@A+DPTR执行示意图 ,@A+DPTR执行示意图
…
6.位寻址方式 MCS-51有位处理功能 可以对数据位进行操作,例如: 有位处理功能, MCS-51有位处理功能,可以对数据位进行操作,例如: MOV C,40H C, 是把位40H的值送到进位位C 40H的值送到进位位 是把位40H的值送到进位位C。 寻址范围包括: 寻址范围包括: 内部RAM中的位寻址区。位有两种表示方法,例如, RAM中的位寻址区 (1)内部RAM中的位寻址区。位有两种表示方法,例如, 40H;另一种是单元地址加上位,例如,(28H).0, 40H;另一种是单元地址加上位,例如,(28H).0,指 的是28H单元中的最低位。它们是等价的。 28H单元中的最低位 的是28H单元中的最低位。它们是等价的。 (2)特殊功能寄存器中的可寻址位 可寻址位在指令中有如下4种的表示方法: 可寻址位在指令中有如下4种的表示方法: 直接使用位地址。例如PSW.5的位地址为0D5H PSW.5的位地址为0D5H。 a. 直接使用位地址。例如PSW.5的位地址为0D5H。
程序存储区 1020 EA 12 R2
片内RAM区 4A
ACC
4A
MOV A,R2执行示意图
2.直接寻址方式 操作数直接以单元地址的形式给出: 操作数直接以单元地址的形式给出: A, MOV A,40H 寻址范围: 寻址范围: 内部RAM 128个单元 RAM的 (1) 内部RAM的128个单元 特殊功能寄存器。除了以单元地址的形式外, (2) 特殊功能寄存器。除了以单元地址的形式外, 可用寄存器符号的形式给出 例如: 的形式给出。 还可用寄存器符号的形式给出。例如: A, A,P0是等价的 是等价的。 MOV A,80H 与 MOV A,P0是等价的。 直接寻址方式是访问特殊功能寄存器的唯一寻址方式
七种寻址方式
![七种寻址方式](https://img.taocdn.com/s3/m/6c1ff2094431b90d6c85c71b.png)
七种寻址方式一、立即寻址方式操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种寻址方式也就称为立即数寻址方式。
立即数可以是8位、16位或32位,该数值紧跟在操作码之后。
如果立即数为16位或32位,那么,它将按“高高低低”的原则进行存储。
例如:MOV AH,80H ADD AX,1234H MOV ECX,123456HMOV B1,12H MOV W1,3456H ADD D1,32123456H其中:B1、W1和D1分别是字节、字和双字单元。
以上指令中的第二操作数都是立即数,立即数寻址方式通常用于对通用寄存器或内存单元赋初值。
二、寄存器寻址方式指令所要的操作数已存储在某寄存器中,或把目标操作数存入寄存器。
把在指令中指出所使用寄存器(即:寄存器的助忆符)的寻址方式称为寄存器寻址方式。
指令中可以引用的寄存器及其符号名称如下:8位寄存器有:AH、AL、BH、BL、CH、CL、DH和DL等;16位寄存器有:AX、BX、CX、DX、SI、DI、SP、BP和段寄存器等;32位寄存器有:EAX、EBX、ECX、EDX、ESI、EDI、ESP和EBP等。
寄存器寻址方式是一种简单快捷的寻址方式,源和目的操作数都可以是寄存器。
1、源操作数是寄存器寻址方式如:ADD VARD,EAX ADD VARW,AX MOV VARB,BH等。
其中:VARD、VARW和VARB是双字,字和字节类型的内存变量。
在第4章将会学到如何定义它们。
2、目的操作数是寄存器寻址方式如:ADD BH,78h ADD AX,1234h MOV EBX,12345678H等。
3、源和目的操作数都是寄存器寻址方式如:MOV EAX,EBX MOV AX,BX MOV DH,BL等。
三、直接寻址方式指令所要的操作数存放在内存中,在指令中直接给出该操作数的有效地址,这种寻址方式为直接寻址方式。
在通常情况下,操作数存放在数据段中,所以,其物理地址将由数据段寄存器DS和指令中给出的有效地址直接形成,但如果使用段超越前缀,那么,操作数可存放在其它段。
七种寻址方式
![七种寻址方式](https://img.taocdn.com/s3/m/c157c38c360cba1aa811da85.png)
七种寻址方式1、立即寻址方式:操作数就包含在指令中。
作为指令的一部分,跟在操作码后存放在代码段。
这种操作数成为立即数。
立即数可以是8位的,也可以是16位的。
例如:指令: MOV AX,1234H则: AX = 1234H2、寄存器寻址方式:操作数在CPU内部的寄存器中,指令指定寄存器号。
对于16位操作数,寄存器可以是:AX、BX、CX、DX、SI、DI、SP 和BP等。
对于8位操作数,寄存器可以是AL 、AH、BL、BH、CL、CH、DL、DH。
这种寻址方式由于操作数就在寄存器中,不需要访问存储器来取得操作数因而可以取得较高的运算数度。
3、直接寻址方式:操作数在寄存器中,指令直接包含有操作数的有效地址(偏移地址)注:操作数一般存放在数据段所以操作数的地址由DS加上指令中直接给出的16位偏移得到。
如果采用段超越前缀,则操作数也可含在数据段外的其他段中。
例如:MOV AX,[8054]如(DS) = 2000H,则执行结果为(AX) = 3050H(物理地址=20000+8054=28054H)28054H里的内容为3050H在汇编语言指令中,可以用符号地址代替数值地址如:MOV AX,VALUE此时VALUE为存放操作数单元的符号地址。
如写成:MOV AX,[VALUE]也是可以的,两者是等效的。
如VALUE在附加段中,则应指定段超越前缀如下:MOV AX,ES:VALUE 或MOV AX,ES:[VALUE]4、寄存器间接寻址方式:操作数在寄存器中,操作数有效地址在SI、DI、BX、BP这四个寄存器之一中。
在一般情况下,如果有效地址在SI、DI和BX中,则以DS段寄存器中的内容为段值。
如果有效地址在BP中,则以SS段寄存器中的内容为段值例如:MOV AX,[SI]如果(DS) = 5000H (SI) = 1234H则物理地址= 50000 + 1234 = 51234H51234H地址中的内容为:6789H执行该指令后,(AX) = 6789H5、寄存器相对寻址方式:操作数在存储器中,操作数的有效地址是一个基址寄存器(BX、BP)或变址寄存器(SI、DI)的内容加上指令中给定的8位或16位位移量之和BX 8位位移量EA(有效地址) = BP +SI 16位位移量DI在一般情况下,如果SI、DI、或BX中的内容作为有效地址的一部分,那么引用的段寄存器是DS;如果BP中的内容作为有效地址的一部分,那么引用的段寄存器是SS。
操作数的寻址方式
![操作数的寻址方式](https://img.taocdn.com/s3/m/7717c4aadd88d0d232d46a3e.png)
2.立即寻址方式
指令字中的地址字段指出的不是操 作数的地址,而是操作数本身。这种所 需的操作数由指令的地址码字段直接给 出的寻址方式称为立即寻址方式。用这 种方式取一条指令时,操作数立即同操 作码一起被取出,从而节省了访问内存 的时间,提高了指令的执行速度,所以 这种寻址方式的特点是指令执行时间很 短。
(2)存储器间接寻址方式
存储器间接寻址时,需要访问两次 存储器才能取得数据,第一次先从存储 器读出操作数地址,第二次才能根据读 出的操作数地址再取出真正的操作数。
有效地址EA的数学形式为: EA=(A), 即Data=(EA)=((A))
6.相对寻址方式
所谓相对寻址方式,是指根据一个 基准地址及其相对量来寻找操作数地址 的方式。根据基准地址的来源不同,它 又分为基址方式和变址方式,以及PC相 对寻址方式,这里主要指后者。
直接寻址方式表示形式为:
OPCODE 直接寻址方式 操作数直接地址A
直接寻址方式又可分为寄存器直 接寻址和存储器直接寻址两种。
(1)寄存器直接寻址方式
指令地址码字段直接给出所需操作数在 通用寄存器中地址编号。其表示形式为:
OPCODE 寄存器直接寻址 寄存器地址编号Ri
有效地址EA数学形式为:EA=Ri 。
间接寻址又有一次间址和多次间址 之分,一次间址是指形式地址A是操作数 地址的地址,即EA=(A);多次间址是指 这种间接变换在二次或二次以上.若 Data表示操作数,间接寻址过程可用如 下逻辑符号表示:
一次间接寻址 Data=(EA)=((A))
二次间接导址 Data=((EA))=(((A)))
但是,由于操作数是指令的一部分, 不能修改,而指令所处理的数据大多都 是在不断变化的,故这种方式只适用于 操作数固定的情况。通常用于给某一寄 存器或存储器单元赋初值或提供一个常 数等。立即寻址方式表示形式为:
第三章操作数的寻址方式
![第三章操作数的寻址方式](https://img.taocdn.com/s3/m/855d00b86c175f0e7dd1377c.png)
P33 1、2、3、5、6(单数)、
图示
1、直接寻址
例:指令:mov bx,es:[1234h],(es)=1000h, (11234h)=1234h。问该指令执行后,bx的值是什 么?
PA=(es)×16+1234h=11234h (bx)=1234h
1、直接寻址
要点:
地址也常用内存变量名来表示,书写格式:v_1或 [v_1]。
综合
例4:如图所示,取第三个字数 据→(dx) 解:取第3个数据,其偏移量: num+3 (1)直接寻址: mov dx,num+4 ;num为字变量 (2)寄存器间接寻址: lea bx,num+4 mov dx,[bx]
综合
(3)寄存器相对寻址: mov si,4 mov dx,num[si]
一、概述 二、立即数寻址(imm) 三、寄存器寻址(reg) 四、存储器寻址(mem)
寄存器寻址(reg)
指令所要的操作数已存储在某寄存器中,或把目标 操作数存入寄存器。把在指令中指出所使用寄存器 (寄存器符号)的寻址方式称为寄存器寻址方式。
执行过程
指令中可以引用的寄存器及其符号如下: 8位寄存器有:ah、al、bh、bl、ch、cl、 dh和dl。 16位寄存器有:ax、bx、cx、dx、si、di、 sp、bp、ip和段寄存器。
寄存器寻址(reg)
例:
add varw,ax add varb,bh
;其中varw,varb是字、字节内存变量。
add bh,78h
add ax,1234h
mov ax,bx
mov bh,al
指令、操作数的寻址方式
![指令、操作数的寻址方式](https://img.taocdn.com/s3/m/f5f57ce352d380eb63946d95.png)
计算机组成原理 指令、操作数的寻址方式
2.2.7、变址寻址方式 在变址寻址方式中,通常在CPU内部设置 有一个或几个专用的变址寄存器,操作数 的有效地址=(变址寄存器)+形式地址。
计算机组成原理 指令、操作数的寻址方式
具体的指令如:MOV AL,[SI+0FH] 其中SI是CPU的16位变址寄存器,是变址寻 址方式,它的内容加上形式地址0FH是操作 数的有效地址,同样是一个偏移量,该内存 单元的内容即为操作数,假设为0。操作码 MOV表示传送操作,即把0传送给AL。
计算机组成原理 指令、操作数的寻址方式
若一个指令系统中只有上述8种寻址方式, 那么需要3位寻址方式特征位(23=8)。
计算机组成原理 指令、操作数的寻址方式
寻址方式特征 位 000 001 010 011 100 101 110 111
寻址方式
寄存器寻址 立即数寻址
直接寻址 间接寻址 隐含寻址 相对寻址 变址寻址 基址寻址
计算机组成原理 指令、操作数的寻址方式
•跳跃寻址方式 当执行到转移指令时,下一条指令地址不是 由PC给出,而是由本条指令给出,程序跳跃 后,按新的指令地址开始顺序执行,这时内容也相应改变,以便及时跟踪新的指令地 址。
计算机组成原理 指令、操作数的寻址方式
2、操作数的寻址方式 2.1、概述 通常操作数可以用如下三种方式给出: 指令中的操作数部分就是操作数本身。
计算机组成原理 指令、操作数的寻址方式
一般地,指令系统中都包含有如下8种典 型的寻址方式:寄存器寻址、立即数寻址、 直接寻址、 间接寻址、隐含寻址、相对 寻址、变址寻址、基址寻址。但是一个操 作数只能有一种寻址方式,到底是哪一种 寻址方式呢?由寻址方式特征位来决定, 即在指令的每个操作数部分中留出几位作 为寻址方式特征位。
经典:7种寻址方式
![经典:7种寻址方式](https://img.taocdn.com/s3/m/b5c72865b0717fd5360cdcfb.png)
MOVX A,@Ri MOVX @Ri,A MOVX A,@DPTR MOVX @DPTR,A
说明: 1.在51中,与外部存储器RAM打交道的只可以是A累加器。所有
需要送入外部RAM的数据必需要通过A送去,而所有要读入的外部 RAM中的数据也必需通过A读入。
在此我们可以看出内外部RAM的区别了,内部RAM间可以直接进 行数据的传递,而外部则不行。
例:MOV DPTR,#1234H
执行完了之后DPH中的值为12H,DPL中的值为34H。
如果我们分别向DPH,DPL送数,则结果也一样。
如下面两条指令: MOV DPH,#35H
MOV DPL,#12H。
则就相当于执行了 MOV DPTR,#3512H。
15.12.2020
21
3.3.6 累加器A与片外RAM之间的数据传递类指令(4条)
程序存储区 指令代码
2040H 83 2041H …
当前P…C
…
2120H 47 2121H 45
15.12.2020
A 4E50
ALU 2121H
12
改变PC
3.2.6 相对寻址
Relative Addressing
将PC中的当前内容与指令第二字节给出的数相加,结 果作为跳转指令的转移地址(转移目的地址)。 PC中的当前内容称为基地址(本指令后的字节地址) 指令第二字节给出的数据称为偏移量,1字节带符号数.
寄存器间接寻址
变址寻址 相对寻址
位寻址
15.12.2020
寻址空间(操作数存放空间) 程序存储器
片内RAM低128字节、SFR 工作寄存器R0~R7,A,B,DPTR 片内RAM:@R0,@R1,SP 片外RAM:@R0 ,@R1,@DPTR 程序存储器:@A+PC,@A+DPTR 程序存储器256字节范围内:PC+偏移量 片内RAM的位寻址区(20H~2FH字节地址) 某些可位寻址的SFR
8086指令操作数的寻址方式实验总结
![8086指令操作数的寻址方式实验总结](https://img.taocdn.com/s3/m/03e2dde2b1717fd5360cba1aa8114431b90d8e31.png)
8086指令操作数的寻址方式实验总结在计算机体系结构的学习中,8086指令操作数的寻址方式是一个非常重要的概念。
通过对这一概念的深入了解和实验操作,我们可以更好地理解计算机程序的执行过程,深化对计算机底层原理的理解。
在本文中,我将结合理论知识和实验结果,对8086指令操作数的寻址方式进行全面评估和总结。
1. 立即寻址立即寻址是一种直接将操作数的值嵌入指令中的寻址方式。
在8086指令集中,我们可以使用MOV指令将一个立即数传送到目的操作数中。
MOV AX, 1234h指令将立即数1234h传送到寄存器AX中。
通过实验操作,我发现立即寻址方式适用于需要直接传送常数值的情况,能够提高程序执行的效率。
2. 寄存器寻址寄存器寻址是一种通过寄存器来寻址操作数的方式。
8086微处理器具有通用寄存器AX、BX、CX、DX等,可以直接操作这些寄存器中的数据。
MOV AX, BX指令将寄存器BX中的数据传送到寄存器AX中。
在实验过程中,我发现寄存器寻址方式是一种高效的操作数寻址方式,能够提高程序的执行速度。
3. 直接寻址直接寻址是一种通过内存位置区域来寻址操作数的方式。
在8086指令集中,我们可以使用MOV指令将内存中的数据传送到寄存器中,或将寄存器中的数据传送到内存中。
MOV AX, [1234h]指令将存储在内存位置区域1234h处的数据传送到寄存器AX中。
实验结果表明,直接寻址方式可以灵活地对内存中的数据进行操作,适用于大规模数据的传送和处理。
4. 寄存器间接寻址寄存器间接寻址是一种通过寄存器中存储的位置区域来寻址操作数的方式。
在8086指令集中,我们可以使用指令将寄存器中存储的内存位置区域作为操作数进行操作。
MOV BX, [SI]指令将寄存器SI中存储的内存位置区域处的数据传送到寄存器BX中。
在实验中,我发现寄存器间接寻址方式适用于需要对内存中多个数据进行操作的情况,能够提高程序的效率和灵活性。
5. 立即偏移寻址立即偏移寻址是一种通过基址寄存器和偏移量来寻址操作数的方式。
指出下列指令中源操作数和目的操作数的寻址方式
![指出下列指令中源操作数和目的操作数的寻址方式](https://img.taocdn.com/s3/m/c301116c7e21af45b307a84f.png)
1.指出下列指令中源操作数和目的操作数的寻址方式:(1) MOV SI,1000(2) MOV BP,AX(3) MOV [SI],1000(4) MOV BP,[AX](5) AND DL,[BX + SI + 20H](6) PUSH DS(7) POP AX(8) MOV EAX,COUNT[EDX*4](9) IMUL AX,BX,34H(10) JMP FAR PTR LABEL2.指出下列指令语法是否正确,若不正确请说明原因。
(1) MOV DS,0100H(2) MOV BP,AL(3) XCHG AX,2000H(4) OUT 310H,AL(5) MOV BX,[BX](6) MOV ES:[BX + DI],AX(7) MOV AX,[SI + DI](8) MOV SS:[BX + SI + 100H],BX(9) AND AX,BL(10) MOV DX,DS:[BP](11) MOV [BX],[SI](12) MOV CS,[1000](13) IN AL,BX3.设DS = 2000H,BX = 1256H,SI = 528FH,偏移量 = 20A1H,[232F7H] = 3280H,[264E5] = 2450H。
若独立执行下述指令后,请给出对应IP寄存器的内容。
(1) JMP BX;IP=?(2) JMP [BX][SI];IP=?4.32位机中,当用MOVZX和MOVSX指令时,传送执行后,结果有什么区别?试以传送80H为例说明之。
6.有如下程序:MOV AL,45HADD AL,71HDAAMOV BL,ALMOV AL,19HADC AL,12HDAAMOV BH,AL执行后,BX =?标志位PF =?CF =?7.执行下列程序段,指出此程序段功能。
(1) MOV CX,10LEA SI,FirstLEA DI,SecondREP MOVSB(2) CLDLEA DI,ES:[0404H]MOV CX,0080HXOR AX,AXREP STOSW8.试用指令实现:(1) AL寄存器低4位清0;(2) 测试DL寄存器的最低2位是否为0,若是,则将0送入AL寄存器;否则将1送AL 寄存器。
七种寻址方式
![七种寻址方式](https://img.taocdn.com/s3/m/1a586d016c85ec3a87c2c573.png)
七种寻址方式标签:it一、立即寻址方式操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种寻址方式也就称为立即数寻址方式。
立即数可以是8位、16位或32位,该数值紧跟在操作码之后。
如果立即数为16位或32位,那么,它将按“高高低低”的原则进行存储。
例如:MOV AH, 80H ADD AX, 1234H MOV ECX, 123456HMOV B1, 12H MOV W1, 3456H ADD D1, 32123456H其中:B1、W1和D1分别是字节、字和双字单元。
以上指令中的第二操作数都是立即数,在汇编语言中,规定:立即数不能作为指令中的第二操作数。
该规定与高级语言中“赋值语句的左边不能是常量”的规定相一致。
立即数寻址方式通常用于对通用寄存器或内存单元赋初值。
图是指令“MOV AX, 4576H”存储形式和执行示意图。
二、寄存器寻址方式指令所要的操作数已存储在某寄存器中,或把目标操作数存入寄存器。
把在指令中指出所使用寄存器(即:寄存器的助忆符)的寻址方式称为寄存器寻址方式。
指令中可以引用的寄存器及其符号名称如下:8位寄存器有:AH、AL、BH、BL、CH、CL、DH和DL等;16位寄存器有:AX、BX、CX、DX、SI、DI、SP、BP和段寄存器等;32位寄存器有:EAX、EBX、ECX、EDX、ESI、EDI、ESP和EBP等。
寄存器寻址方式是一种简单快捷的寻址方式,源和目的操作数都可以是寄存器。
1、源操作数是寄存器寻址方式如:ADD VARD, EAX ADD VARW, AX MOV VARB, BH等。
其中:VARD、VARW和VARB是双字,字和字节类型的内存变量。
在第4章将会学到如何定义它们。
2、目的操作数是寄存器寻址方式如:ADD BH, 78h ADD AX, 1234h MOV EBX, 12345678H等。
3、源和目的操作数都是寄存器寻址方式如:MOV EAX, EBX MOV AX, BX MOV DH, BL等。
第三讲2 操作数的寻址方式
![第三讲2 操作数的寻址方式](https://img.taocdn.com/s3/m/b4301bd37c1cfad6195fa7fb.png)
AX, [BX] 等效 MOV AX, DS:[BX] 例:MOV BX, [BP] 等效 MOV AX, SS:[BP]
例:MOV
操作数的EA为寄存器的内容 BX、SI 、DI-------DS BP------SS MOV BX,[SI]
例如:MOV AX,[BX]
该指令执行之前,DS=2000H,AX=54C8H,BX=0300H, 存储单元20300H的内容是6A9BH。 问:执行指令后,相关寄存器及存储单元的值是什么? 源操作数的地址为: EA=(BX)= 0300H PA=(DS)*16+EA=2000H*16+0300H=20300H
例 将内存缓冲区中以BUFA开始的一组字数据传送到BUFB开始的内存区
DATA BUFA COUNT BUFB DATA STACK STACK CODE START: SEGMENT DW 367BH,2845H,0A78H, 9DE3H,0F6BH,6532H BUFB EQU ($-BUFA)/2 DW COUNT DUP (?) ENDS SEGMENT STACK DB 200 DUP(?) ENDS BUFA SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE MOV AX,DATA MOV DS,AX INC DI MOV SI,0 INC DI MOV DI,0 DEC CX MOV CX,COUNT JNZ LOP MOV AX,BUFA[SI] MOV AH,4CH MOV BUFB[DI],AX INT 21H INC SI CODE ENDS INC SI END START
将[DS:SI]为地址的一个字节/字传送到 [ES:SI]地址,然 后修改地址指针 SI,DI并使CX减1(计数) I/O端口寻址:端口 累加器(AL/AX) 使用间接端口寻址方式,须先将端口号传送到DX中。 IN AX,35H 直接端口寻址方式 8位地址可访问256 IN AL,DX 个端口 OUT 4FH,AL OUT DX,AX
常用的操作数寻址方式
![常用的操作数寻址方式](https://img.taocdn.com/s3/m/143ed83853ea551810a6f524ccbff121dd36c506.png)
常用的操作数寻址方式
操作数寻址方式是指程序中调用一个操作数的方式,常用的操作数寻址方式有以下几种:
1. 立即数寻址:将操作数直接写在指令中,如 `MOV AX, 1234H`,其中
`1234H` 就是立即数。
2. 寄存器寻址:将操作数存储在寄存器中,然后通过寄存器名称来访问,如
`MOV AX, BX`,其中 `BX` 就是一个寄存器。
3. 直接寻址:将操作数存储在内存中,通过直接访问内存地址来获取操作数,如 `MOV AX, [1000H]`,其中 `1000H` 就是一个内存地址。
4. 间接寻址:将操作数存储在内存中,通过访问内存地址来获取操作数的地址,再通过该地址来访问操作数,如 `MOV AX, [BX+100H]`,其中 `BX` 是一个寄存器,`100H` 是一个偏移量。
5. 寄存器间接寻址:将操作数存储在内存中,通过寄存器来获取操作数的地址,再通过该地址来访问操作数,如 `MOV AX, [BX]`,其中 `BX` 是一个寄存器,表示操作数的地址。
6. 相对寻址:将操作数存储在相对于程序入口的某个位置,通过相对偏移量来访问,如 `JMP 0x1000`,表示跳转到相对于程序入口偏移量为 `0x1000` 的位置。
以上是常用的操作数寻址方式,了解它们对于编写汇编代码非常重要。
7 种寻址方式及其基本 指令
![7 种寻址方式及其基本 指令](https://img.taocdn.com/s3/m/a12c50127275a417866fb84ae45c3b3567ecdd0b.png)
7 种寻址方式及其基本指令1. 立即寻址(Immediate Addressing)立即寻址方式是将操作数直接嵌入到指令中作为常数,指令执行时直接使用该常数作为操作数。
例如,一条指令可以是“ADD R1, #5”,表示将寄存器R1中的值与常数5相加。
2. 直接寻址(Direct Addressing)直接寻址方式是将操作数的地址直接指定在指令中,指令执行时直接使用该地址读取操作数。
例如,一条指令可以是“LOAD R1, 1000”,表示将地址1000处的内容加载到寄存器R1中。
3. 寄存器寻址(Register Addressing)寄存器寻址方式是将操作数的值存储在寄存器中,指令执行时直接使用该寄存器作为操作数。
例如,一条指令可以是“ADD R2, R3”,表示将寄存器R2中的值与寄存器R3中的值相加。
4. 间接寻址(Indirect Addressing)间接寻址方式是将操作数的地址存储在一个寄存器或内存单元中,指令执行时先读取该地址,再根据该地址读取操作数。
例如,一条指令可以是“LOAD R1, (R2)”,表示先从寄存器R2中读取一个地址,再根据该地址将内容加载到寄存器R1中。
5. 寄存器间接寻址(Register Indirect Addressing)寄存器间接寻址方式是将操作数的地址存储在一个寄存器中,指令执行时先读取该地址,再根据该地址读取操作数。
例如,一条指令可以是“LOAD R1, (R2)+”,表示先从寄存器R2中读取一个地址,再根据该地址将内容加载到寄存器R1中,并将寄存器R2的值增加。
6. 相对寻址(Relative Addressing)相对寻址方式是将操作数的地址与指令的地址相加或相减得到实际的操作数地址,指令执行时直接使用该地址读取操作数。
例如,一条指令可以是“LOAD R1, label”,表示将标签label的地址与指令的地址相加得到实际的地址,并将该地址处的内容加载到寄存器R1中。
七种寻址方式举例例题
![七种寻址方式举例例题](https://img.taocdn.com/s3/m/bca14d24a66e58fafab069dc5022aaea998f41c2.png)
七种寻址方式举例例题:
1. 立即寻址:指令直接包含操作数,不需要经过任何地址计算。
例:MOV AL, 5 //把5赋值给AL寄存器。
2. 寄存器寻址:操作数在寄存器中,不需要经过任何地址计算。
例:MOV AX, CX //把CX寄存器的内容(即计数器的值)赋给AX寄存器。
3. 寄存器间接寻址:操作数需要经过地址计算才能取出,常用于寄存器间接寻址。
例:MOV DX, 8000H //把偏移地址8000H处的数据(即偏移地址加起来,实质是访问内存地址)赋给DX寄存器。
4. 直接寻址:指令直接给出操作数,需要经过地址计算。
例:MOV AL, [DX] //把偏移地址为DX的数据赋给AL寄存器。
5. 零页寻址:对于某一段指令来说,0页至1页的1024个字节被作为一个整体来处理,称这一段地址为零页。
例:MOV AX, [0F00H] //把偏移地址为0F00H的数据(即偏移地址加起来,实质是访问内存地址)赋给AX寄存器。
6. 间接寻址:指令给出的是内存地址,需要经过地址计算才能取出操作数。
例:MOV AX, [ES:DX] //把ES段的偏移地址DX(即ES段中偏移地址为DX的数据)处的数据赋给AX寄存器。
7. 偷窥寻址:在X86指令集中,有些指令后面可以跟一个“偷窥”码,该码指示该指令后面紧跟的某一条指令(即偷窥指令)被执行时,其内容被自动设置为零。
例如,在8086微处理器的汇编语言中,LOP指令用于循环执行一段指令,当执行LOP时,LOP后面的指令被执行,其内容被自动设置为零。
操作数的寻址方式之立即寻址方式
![操作数的寻址方式之立即寻址方式](https://img.taocdn.com/s3/m/b8c55bf9b9f67c1cfad6195f312b3169a451ea6e.png)
操作数是指令或程序的主要处理对象。
如果某条指令或某个程序不处理任何操作数,那么,该指令或程序不可能有数据处理功能。
在CPU的指令系统中,除NOP(空操作指令)、HLT(停机指令)等少数指令之外,⼤量的指令在执⾏过程中都会涉及到操作数。
所以,在指令中如何表达操作数或操作数所在位置就是正确运⽤汇编指令的⼀个重要因素。
在指令中,指定操作数或操作数存放位置的⽅法称为寻址⽅式。
操作数的各种寻址⽅式是⽤汇编语⾔进⾏程序设计的基础,也是本课程学习的重点之⼀。
微机系统有七种基本的寻址⽅式:⽴即寻址⽅式、寄存器寻址⽅式、直接寻址⽅式、寄存器间接寻址⽅式、寄存器相对寻址⽅式、基址加变址寻址⽅式、相对基址加变址寻址⽅式等。
其中,后五种寻址⽅式是确定内存单元有效地址的五种不同的计算⽅法,⽤它们可⽅便地实现对数组元素的访问。
另外,在32位微机系统中,为了扩⼤对存储单元的寻址能⼒,增加了⼀种新的寻址⽅式——32位地址的寻址⽅式。
为了表达⽅便,我们⽤符号“(X)”表⽰X的值,如:(AX)表⽰寄存器AX的值。
3.1 ⽴即寻址⽅式 操作数作为指令的⼀部分⽽直接写在指令中,这种操作数称为⽴即数,这种寻址⽅式也就称为⽴即数寻址⽅式。
⽴即数可以是8位、16位或32位,该数值紧跟在操作码之后。
如果⽴即数为16位或32位,那么,它将按“⾼⾼低低”的原则进⾏存储。
例如:MOV AH, 80H ADD AX, 1234H MOV ECX, 123456HMOV B1, 12H MOV W1, 3456H ADD D1, 32123456H 其中:B1、W1和D1分别是字节、字和双字单元。
以上指令中的第⼆操作数都是⽴即数,在汇编语⾔中,规定:⽴即数不能作为指令中的第⼆操作数。
该规定与⾼级语⾔中“赋值语句的左边不能是常量”的规定相⼀致。
⽴即数寻址⽅式通常⽤于对通⽤寄存器或内存单元赋初值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
✓ 所以,该指令执行后 (BX)=5213H
……
21234H 13H
21235H 52H
……
2020年5月9日星期六
13
思考问题
MOV AX,[2000H]
➢ 问1:右边所示的三条指令有何不同?
MOV AX,2000H MOV AX,2000
✓ 源操作数的寻址方式不同:第一条指令为直接寻址方式;后
➢ 除IP、FR外的所有寄存器(包括段寄存器)都可以用作寄 存器寻址方式。
➢ 由于操作数存在于CPU中,指令执行时不需访存,因此具 有较快的执行速度。
2020年5月9日星期六
9
寄存器寻址方式举例
➢ MOV AX , 1234H ;(AX)=1234H
✓ 源操作数是立即数寻址方式;
✓ 目的操作数是寄存器寻址方式。
✓物理地址PA =(DS)×16 + EA
➢ 若数据不在DS段,可用显式指明段寄存器的段超越方式。
✓指令形式:MOV ES:[100H] , AL
✓物理地址PA =(ES)×16 + 100H
➢ 指令MOV AX , [100H]与MOV AX , SS:[100H]执行结果是 否相同?
✓ 不相同!所访问存储单元不同。
2位置
➢ 指令中 ✓ 立即数寻址方式;
➢ 寄存器中 ✓ 寄存器寻址方式;
➢ 存储单元中 ✓ 直接、间接、相对、基址变址、相对基址变址寻址方式;
区别在于:形成操作数有效地址的方式不同;
2020年5月9日星期六
4
地址加法器
∑
20位
AH AL 通用寄存器
BH BL
Imm 立即数
R
寄存器
SR
段寄存器
M
存储单元
S
源操作数
D
目的操作数
() …中的数据
[]
地址单元
2020年5月9日星期六
➢ (BX)=1000H ➢ [BX]=…… ➢ [2000H]=…… ➢ (AX)=(AX)+(BX)
6
3.1 立即数寻址方式
➢ 立即数寻址方式
✓ 操作数的数值紧跟在操作码之后,直接在指令中出现。
2020年5月9日星期六
14
3.4 寄存器间接寻址方式
➢ 寄存器间接寻址方式 ✓操作数在存储单元中,指令的操作码之后给出存放该单元 有效地址的寄存器编码或名称。
3.0 寻址方式预备知识
指令格式
操作码
操作数
➢ 指令由操作码和操作数两部分组成; ✓ 操作码说明计算机要执行哪种操作,用一个唯一的助记符 表示,对应着一个机器指令的二进制编码; ✓ 操作数是指令执行的参与者,即各种操作的对象;
➢ 指令中操作码是不可缺少的,但操作数则是可选部分; ✓ 16位系统中,操作数的数目一般为0~2个,用逗号分隔。
➢ MOV BX , AX ; (BX)=(AX)=1234H
✓ 源操作数及目的操作数均为寄存器寻址方式。
➢ MOV X , AX
✓ 源操作数是寄存器寻址方式;
✓ 目的操作数是直接寻址方式。
2020年5月9日星期六
10
3.3 直接寻址方式
➢ 直接寻址方式
✓ 操作数在存储单元中,指令的操作码之后给出该存储单元的 有效地址。
CH CL DH DL
SP BP SI DI
16位
16位
CS
DS
SS
输入/输出
ES
控制电路
IP
外
内部暂存器
部
总
线
ALU
标志寄存器
执行部分 控制电路
12 3 4 5 6
8位
指令队列缓冲器
①②③MOV AX , 1B[B2XX3]4H
执行部件 (EU)
总线接口部件 (BIU)
寻址方式中的符号表示
符号 含义
➢ 特点 ✓ 优点:执行速度快;
不需访存即可执行
✓ 缺点:立即数不能修改,通用性差(适用于常数)。
➢ 注意:
✓ 立即数不能作为目的操作数;
✓ 可以为8位也可以为16位,常用于给寄存器赋值。
2020年5月9日星期六
7
立即数寻址方式举例
➢ MOV BL , 12H ➢ MOV BX,3478H
✓机器指令:BB 78 34 ✓ 在存储器中的存放格式
2020年5月9日星期六
12
直接寻址方式——举例
➢ 执行指令MOV BX , [1234H]时,(DS)=2000H,存储单元 21234H的值为5213H,问执行该指令后BX的值是什么?
✓ 该指令源操作数的寻址方式为直接寻址方式;
✓ 有效地址EA = 1234H,无段超越,为默认的DS段;
✓ 物理地址PA = 2000H ×16 + 1234H = 21234H
答:由控制器区分,通过CS和IP寻址的为指
令,其他为数据。
2020年5月9日星期六
2
示例指令
➢ 数据传送指令 ✓MOV <目的操作数>,<源操作数>
➢ 例如: ✓MOV AX , 1234H ✓MOV AX , BX ✓MOV AX , [BX]
➢ 注意:寻址方式是针对操作数的,而不是指令的。 ✓ 指定操作数的寻址方式时,一定要指明是对源操作数还是对 目的操作数而言。
➢ 有效地址EA
✓ 也称为偏移地址,是相对于段起始地址的偏移量;
✓ 指令中,EA可以是数值形式,也可以是符号地址形式;
✓例如:MOV AX , [100H]
;数值地址必须加方括号
MOV AX , DATA
;符号地址必须事先定义
2020年5月9日星期六
11
直接寻址方式——物理地址的形成
➢ 在默认情况下,数据在DS段中
2020年5月9日星期六
1
寻址方式
➢ 寻址方式可分为指令寻址和数据寻址两种类型;
本章主要介绍数据寻址方式。
➢ 数据寻址方式
✓ 在指令中,指定操作数或操作数存放位置的方法。
➢ 一般,指令系统中会设计多种操作数的寻址方式;
✓ 操作数采取不同的寻址方式,指令的执行速度也会不同。
思考:数据、程序都在存储器中,如何区分?
两条指令为立即数寻址方式;
✓ 数据数制不同:前两条为十六进制;第三条为十进制。
➢ 问2:MOV AX,X 和 MOV AX,[X] 效果一样吗?
✓ 一样。符号地址加不加括号指的都是之前定义的单元。
➢ 问3:高级语言的 y=x; 用汇编指令如何实现?
✓ 需要使用两条指令完成赋值。
MOV AX,X MOV Y ,AX
BH
BL
MOV X1 , 34
MOV AL , 300 正确吗? 位数不匹配,不正确!
代码段
BB
操作码
78
低地址单元
34
高地址单元
2020年5月9日星期六
……
8
3.2 寄存器寻址方式
➢ 寄存器寻址方式 ✓操作数在寄存器中,指令的操作码之后给出该寄存器的编 号或名称。 ✓ 某些系统的指令是将寄存器编号与操作码一起编码的。