浅析汇编语言中寻址方式的区别
汇编语言_寻址方式

20位地址 物理寻址1Mbyte
2、Intel 8086 微处理器简介
2、Intel 8086 微处理器简介
通用寄存器: AX(累加器) BX(基址寄存器) CX(计数器) DX(数据寄存器) ;可以分8位使用。 指针及变址寄存器: SP(堆栈指针寄存器) BP(基址指针寄存器) SI(源变址寄存器)
3、主存储器和堆栈
存储器的分段管理 地址表示的一对矛盾: 直接寻址能力为1M (字节); 而寄存器是16位结构的。 解决方法: 引入了存储器“分段”的概念,即把1M字节内存 空间分成若干段。每段最大可达64K字节--可 由16位寄存器进行寻址。 段的起始地址成为“段基址”,要访问的单元距段基 址的距离(字节数)为“偏移量”(Offset)。
立即寻址方式常用于给寄存器赋值,并且只能用 于源操作数,而不能用于目的操作数
2、寄存器寻址(Register addressing)
操作数在寄存器中。 对于8位操作数,寄存器可以是 AH, AL, BH,BL, CH, CL, DH, DL 对于16位操作数,寄存器可以是AX, BX,CX, DX, SI, DI, SP 和 BP 例:MOV AL,BL INC BX
ASCII码
(美国信息标准交换码)
字符数据是以ASCII码形式存放在内存中的。
例如 “1” 就是 31H “A” 就是 41H BCD码 定义:利用二进制形式来表示十进制数。
5、字符数据在机器内的表示形式
压缩BCD(组合BCD) 一个字节存放两个十 进制数位 非压缩BCD(非组合BCD) 一个字节存放一 个十进制数位
6、直接寻址(Direct Addressing)
汇编中的各种寻址方式

汇编中的各种寻址方式(2011-11-18 11:41:32)转载▼标签:杂谈1,立即寻址方式操作数直接存放在指令中,紧跟在操作码之后,它作为指令的一部分存放在代码段,这种操作数成为立即数。
例:mov al,5 执行完指令后al的值为05h2,寄存器寻址方式操作数在寄存器中,指令指定寄存器号。
例:mov ax,bx3,直接寻址方式操作数的有效地址包含位移量的一种成分,其值就存放在中指令的操作码之后。
例:mov ax,[2000h]在汇编语言指令中,可以用符号地址代替数值地址。
如:mov ax,valuevalue为存放操作数单元的符号地址。
如:mov ax,[value]4,寄存器间间接寻址操作数的有效地址只包含基址寄存器内容或变址寄存器内容的一种成分。
例:mov ax,[bx]如果(DS)=2000h,(bx)=1000h则物理地址=20000+1000=21000h5,寄存器相对寻址方式(或称直接变址寻址方式)操作数的有效地址为基址寄存器或变址寄存器的内容和指令中指定的位移量之和,所以有效地址由两种成分组成。
例:mov ax,count[si](也可以表示为mov ax,[count+si])6,基址变址寻址方式操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和,所以有效地址由两种成分组成。
例:mov ax,[bx][di](或写为:mov ax,[bx+di])此类寻址方式使用段跨越前缀的格式为:mov ax,es:[bx][di]7,相对基址变址寻址方式操作数得意偶小弟值基址寄存器和一个变址寄存器的内容和指令中指定的位移量之和,所以有效地址由三种成分组成。
例:mov ax,mask[bx][si](也可写为mov ax,mask[bx+si]或者mov ax,[mask+bx+si])8,比例变址寻址方式操作数的有效地址是变址寄存器的内容乘以指令中指定的比例银子再加上位移量之和,所以由三种成分组成。
汇编语言指令系统和寻址方式详述

例:MOV EAX, TABLE [ EBP ][ EDI 4 ]
▲ 16位和32位寻址的差异
地址成分
16位寻址
32位寻址
基址寄存器
BX、BP
任何32位通用寄存器
变址寄存器
SI、DI
除ESP外的任何32位通用寄存器
比例因子
1
1、2、4、8
11
与转移地址有关的寻址方式: 用来确定转移指令及转子指令的转向地址。
MOV AX, [BX] [BP] MOV AX, [SI] [DI]
8
( 7 ) 相对基址变址寻址方式
有效地址 =
ቤተ መጻሕፍቲ ባይዱ(BX) (SI)
+
+
8位 位移量
(BP) (DI) 16位
MOV AX, MASK [BX] [SI] 或 MOV AX, MASK [BX+SI] 或 MOV AX, [MASK+BX+SI]
(BP) 8位
+
(SI)
位移量 16位
(DI)
指令格式: MOV AX, COUNT[SI] 或
MOV AX, [COUNT+SI]
假设 (DS)=3000H, (SI)=2000H, COUNT=3000H, 则: PA = 35000H
假设(35000H)=1234H, 那么 (AX)=1234H
2
(1) 立即寻址方式* —— 操作数在指令中给出 指令格式: MOV AL, 5 MOV AX, 3064H MOV AL, ‘A’
* 只能用于 SRC 字段
MOV 40H, AL
* SRC 和 DST 的字长一致
MOV AH, 3064H
汇编语言第四章:指令系统和寻址方式.ppt

特点:操作数的偏移地址包含在指令中
例:设 ( DS ) = 3000H MOV AX, [2000H] MOV AX, NUM
要访问的存储单元物理地址为:
30000H+2000H=32000H 设: (32000H)=3050H 执行指令后: (AX)=3050H
AX
30 50
30000H 2000H
8位位移量 16位位移量
2) 操作数物理地址=( SS)16+ (BP) +
8位位移量 16位位移量
例:设 ( DS ) = 3000H
ARRAY=4000H
( SI ) = 2000H
指令为: MOV AX, ARRAY[ SI ]
30000H
要访问的存储单元 物理地址为:
AX
12 34
30000H+4000H +2000H= 36000H
((SP)十1,(SP)) <- (SRC) POP出栈指令 格式为 POP DST 执行操作: (DST) <- ((SP)十1,(SP))
(SP) <-〔SP〕十2
这是两条堆栈的进栈和出栈指令。堆栈是以“后进先出”方式工作的一个 存储区,它必须存在于堆栈段中,因而其段地址存放于SS寄存器中。它只 有一个出入口,所以只有一个堆栈指针寄存器SP,SP的内容在任何时刻都 是指向当前的栈顶,所以PUSH和POP指令都必须根据当前SP的内容来确 定进栈或出栈的存储单元,而且必须及时修改指针,以保证(SP)指向当前 的栈顶。
操作符,表示的是将其后的符号地址的值(不是内容)作为操作数。 例 MOV AX,Y[BP][SI]
把地址为16d×(SS)十(BP)十(SI)十位移量Y的存储单元的内容送给AX寄存器
汇编的7种寻址方式

汇编的7种寻址⽅式
今天⼤三第⼀次写汇编的博客,希望读者,热爱计算机技术的兄弟姐妹们多多⽀持。
另外⼤家有什莫不懂得可以留⾔哦,哈哈哈
我们今天来讲讲汇编的7种寻址⽅式,今天讲前两类
主体分为三类:⽴即寻址,寄存器寻址,存储器寻址(存储器寻址有专门的寄存器,基址寄存器bx,bp;变址寄存器si,di
汇编的主要原理:1.寻址⽅式,2.⼀切问题⽤内存的原理去分析,就是忽略语⾔,去考虑怎末设计解决问题,
并判断问题的对错与否。
1.⽴即寻址:操作数在指令中直接给出
eg:
mov DST,SRC (DST是⽬的操作数,SRC是源操作数)
此时⽴即寻址的话,SRC应写成⽴即数
举例:mov ax,3 mov bx,45
注:DST,SRC的字长是⼀样的
2.寄存器寻址:把操作数放在寄存器中进⾏运算
eg:
mov ax,bx ;解释把(bx)之中的内容放到(ax)之中去,且bx中的内容是数字,这⾥“()”表⽰取内容的意思
练习和思考题
判断语句是否正确?为什莫?
1.mov al,-234
不正确,因为8进制带符号数能表⽰的范围是-128~127,⽽al是8为的寄存器,所以错误2.mov al,23
mov dx,al
第⼆条语句不正确,因为类型不匹配,dx是16位,al是8位的。
汇编语言第二章 寻址方式

第二章寻址方式在8086微处理器中,一条指令通常由操作码加上操作数构成。
指令形式为:操作码[操作数1], [操作数2]; 注释其中,操作码指明执行的动作,操作数指明操作的对象。
由于寄存器数量有限,操作数不可能都放在寄存器中,实际上,操作数既可以放在寄存器中,也可以放在主存贮器中,这样就涉及到操作数的寻址问题。
我们将寻址操作数存放地址的方式称为寻址方式。
本章的内容包括:主存储器和物理地址的形成寻址方式常量与变量的定义2.1 主存贮器和物理地址的形成一、主存贮器计算机存贮系统分为:主存贮器(内存)、辅助存贮器(外存)。
●主存容量小、存取速度快、价格高;●辅存容量大、存取速度慢、价格低。
主存贮器的基本存贮单位是“位”(bit ),每8位组合成一个“字节”;每相邻的两个字节称为“字”;相邻的四个字节称为“双字”。
为了区别各个存贮单元,给每个单元编号,称为地址。
地址:字节单元的编号,也称为物理地址。
低字节放低位,高字节放高位。
例如:0004单元存放内容为1234H 。
0 10FFFFFH 低地址 高地址 从0~0FFFFFH ,共有220个单元,20根地址线。
表示:(0004)字=1234H二、存储器物理地址的形成早期的8086微处理器,有20根地址线,寻址范围2^20 = 1M 字节。
但是,8086内部为16位结构,与地址相关的寄存器均为16位,从而导致可寻址范围为64K。
因此,设计成为将主存分段使用,每段最大为64K字节。
用CS、DS、SS、ES保存当前可用段的段首地址。
规定:段首地址只能从任一“小段”的首地址开始,也就是必须最低4位为0,如果所有的段首地址都是这样,则可以忽略最低4位,而只将高16位放到段寄存器中。
因此,计算物理地址时,应将段寄存器内容左移4位,恢复段首址原值,然后再与本段中待访问单元的偏移地址相加,得到访问单元的物理地址。
因此,被访问单元物理地址PA = 段首址*16+偏移地址。
汇编语言寻址方式

计算机是通过执行指令序列来解决问题的,因此每种计算机都 有一组指令系统提供给用户使用,这组指令集就称为计算机的 指令系统。 计算机中的指令由操作码字段和操作数字段两部分组成。 操作码 操作数 ... 操作数
指令的操作码字段在机器里面的表示比较简单,只需对每一种 操作指定确定的二进制代码就可以了。 指令的操作数字段情况较为复杂。 确定指令中用于说明操作数所在地址的方法称为寻址方法。 8086/8088有七种基本的寻址方式。
1.立即寻址方式 操作数就包含在指令中,它作为指令的一部分,跟在操作后存 放在代码段,这种操作数就称为立即数。 立即数可以是8位的,也可以是16位的。 如果是16位立即数,按“高高低低”原则进行读取。 例如:MOV AX, 1234H
再如:MOV AL, 5 MOV BX, 2064H
则执行指令后(AL)=05H 则执行指令后,(BX)=3064H
指令中也可指定段超越前缀来取得其它段中的数据。 如,MOV AX , ES : [BX] 引用的段寄存器是ES 请熟悉下面的表达形式: MOV [SI] , AX ; 目的操作数间接寻址 MOV [BP] , CX ;目的操作数引用的段寄存器是SS MOV SI , AX; 目的操作数寄存器寻址
5.寄存器相对寻址方式 操作数在存储器中,操作数的有效地址是一个基址寄存器 (BX、BP)或变址寄存器(SI、DI)内容加上指令中给定的8 位或16位位移量之和。 即:
7.相对基址加变址寻址方式 操作数在存储器中,操作数的有效地址是由: 基址寄存器之一的内容与变址寄存器之一的内容 及指令中给定的8位或16位位移量相加得到。 即:
在一般情况下,如果BP之内容作为有效地址的一部分,那么 引用的段寄存器是SS;否者以DS之内容为段值。 在指令中给定的8位或16位位移量采用补码形式表示。在计算 机有效地址时,如果位移量是8位,那么被带符号扩展成16位。 当所取得的有效地址超过FFFFH是,就取64K的模。
汇编言语——寻址方式

【解】 (1)偏移地址为 102H+2000H=2102H 段寄存器为buf1对应的缺省段寄存器ES。 (2)偏移地址为 2000H+13=200DH 段寄存器为BX对应的缺省段寄存器DS。 (3)偏移地址为 3000H+102H-3ACH=2D56H 段寄存器为BP对应的缺省段寄存器SS。 (4)偏移地址为 3ACH+3000H-4000H=0F3ACH 段寄存器为buf2对应的缺省段寄存器ES。
3.1.3.2 寄存器间接寻址
这种寻址方式是把一个基地址寄存器或变址寄存 器中的字型数据当作偏移地址,写法是以该寄存器的 名字加上方括号。 如: MOV CX , [SI] MOV [BX] , AL
3.1.3.3 寄存器相对寻址
以一个基址寄存器或变址寄存器中的值,与一个 16位数据相加,相加的结果作为偏移地址。
3.1.2 寄存器型寻址方式
这种寻址方式比较简单,就是在指令中写出寄存 器的名称。 MOV CL , DL MOV AX, BX 如果(DL)=50H , (BX)= 1234H , 执行指令后 (CL)=50H , (AX)=1234H
3.1.3 内存型寻址方式 内存型寻址方式是指参与操作的数据在内存中, 因此必须指明操作数究竟在内存的什么地方,即指出 内存的逻辑地址。
3.1.3.1 直接寻址
这种寻址方式是在指令中直接写明操作数所在的 偏移地址。在汇编语言中,这个偏移地址通常以变量 的形式出现,在指令中就直接写变量的名字。 如: MOV AL ,[1064H] 如果(DS)=2000H , 那么操作数存放在物理地 址21064H单MOV MOV
[SI+10H] , AX CX , [BX+COUNT]
【例3.1】设变量buf1和buf2定义在同一个段中,偏移地 址分别是102H和3ACH,两个变量对应的缺省段寄存 器都是ES,寄存器BX和BP的值分别是2000H和3000H, 试计算下列各指令中源操作数的偏移地址值,并判断 缺省段寄存器是哪一个。 (1)MOV AL,[buf1+BX] 1 MOV AL [buf1+BX] (2)MOV AL,[BX+13] (3)MOV AL,[BP+buf1-buf2] (4)MOV AL,[buf2+BP-4000H]
汇编语言-寻址方式

在一般情况下,如果BP之内容作为有效地址的一部分,那么 引用的段寄存器是SS;否者以DS之内容为段值。
例如:如果(DS)=2100H ,(BX)=0158H,(DI)=10A5H MOV AX, [BX][DI] 假设该字存储单元的内容如下,则(AX)=1234H
下面两种表示方法是等价的: MOV AX , [BX + DI] MOV AX , [DI][BX] 下面指令中,目的操作数采用基址加变址寻址,引用的段寄存 器是DS。 MOV DS :[BP + SI] , AL 下面指令中,源操作数采用基址加变址寻址,引用的段寄存器 ES。 MOV AX , ES :[BX + SI] 这种寻址方式适用于处理数据或表格。用基址寄存器存放数组 首地址,而用变址寄存器来定位数组中的各元素。或反之。 由于两个寄存器都可改变,所以能更加灵活地访问数组或表格 中的元素。
80x86的寻址方式
计算机是通过执行指令序列来解决问题的,因此每种计算机都 有一组指令系统提供给用户使用,这组指令集就称为计算机的 指令系统。 计算机中的指令由操作码字段和操作数字段两部分组成。 操作码 操作数 ... 操作数
指令的操作码字段在机器里面的表示比较简单,只需对每一种 操作指定确定的二进制代码就可以了。 指令的操作数字段情况较为复杂。 确定指令中用于说明操作数所在地址的方法称为寻址方法。 8086/8088有七种基本的寻址方式。
请熟悉下面的写作形式: MOV BX , [BP-4] 源操作数间接相对寻址,引用的段寄存器是SS。 MOV ES : [BX + 5] , AL 目的操作数采用寄存器相对寻址,引用的段寄存器是ES。 指令MOV AX , [SI + 3]与MOV AX , 3[SI]是等价的。
汇编的寻址方式

在汇编语言中,寻址方式指的是指令如何访问内存中的操作数或数据。
不同的处理器体系结构支持不同的寻址方式。
以下是一些常见的寻址方式:立即寻址(Immediate Addressing):操作数直接包含在指令中。
例如:MOV AX, 5 ; 将寄存器AX 设置为立即数5寄存器寻址(Register Addressing):操作数位于寄存器中。
例如:MOV AX, BX ; 将寄存器BX 的值移动到寄存器AX直接寻址(Direct Addressing):操作数的地址直接指定在指令中。
例如:MOV AX, [1234] ; 将内存地址1234 处的数据移动到寄存器AX寄存器间接寻址(Register Indirect Addressing):指令中包含一个寄存器,该寄存器包含操作数的地址。
例如:MOV AX, [BX] ; 将寄存器BX 中存储的地址处的数据移动到寄存器AX基址寻址(Base Addressing):使用基址寄存器加上一个偏移量来计算内存地址。
例如:MOV AX, [BX + 10] ; 将寄存器BX 加上偏移量10 后的地址处的数据移动到寄存器AX相对寻址(Relative Addressing):操作数的地址是相对于当前指令位置的偏移量。
例如:JMP label_name ; 无条件跳转到标签label_name 处变址寻址(Indexed Addressing):使用一个寄存器的值作为基址,另一个寄存器的值作为偏移量。
例如:MOV AX, [SI + DI] ; 将寄存器SI 和DI 中的值相加,然后将结果作为地址处的数据移动到寄存器AX相对基址寻址(Relative Base Addressing):使用基址寄存器和相对偏移量的组合。
例如:MOV AX, [BX + 10] ; 将寄存器BX 加上偏移量10 后的地址处的数据移动到寄存器AX这只是一些基本的寻址方式,具体的汇编语言和处理器架构可能会有其他特定的寻址方式。
汇编语言寻址方式及堆栈

3.1.1 寄存器寻址 当需要处理寄存器中的数据或将处理结果存
入寄存器的时,使用“寄存器寻址”;在汇编语 言中直接以寄存器名对寄存器寻址:
MOV DS, AX
意即将 AX 的内容送入数据段寄存器 DS。
No Image
3.1.2 立即数寻址
先看一例子:
MOV
AX, 201H
这条指令将 16 进制数 201 送入寄存器 AX。
存放结果的 AX 的寻址方式是“寄存器寻址”,而
后面的 201H 是一个常数,它是随指令从代码段来
的。由于这类操作数就在指令中,“立即”可以参
与运算,故称作“立即数寻址方式”。因立即数伴
随指令在代码段中,所以这种寻址也应属存储器寻
址。
No Image
3.1.3 存储器寻址 存储器寻址必然涉及段,即最终要以逻辑地址
② 寄存器间接寻址 寄存器的内容是某存储单元的有效地址,以
这种方式寻址就叫作寄存器间接寻址。
如要将 200H 单元的内容送入 AL,使用寄存 器间接寻址需要这样:
MOV BX, 200H MOV AL,[BX] 所谓“间接” 就是操作数的取得是通过寄存 器间接获得的。应注意寄存器间接寻址方式和寄 存器寻址相区别:后者在意的目标的是寄存器的 内容,而前者是寄存器的内容作为偏移量的存储 单元的内容。
串操作寻址和 I/O 寻址以后介绍。
物理地址、段、逻辑地址和寻址方式小结: ① 物理地址是地址信号和译码逻辑对存储单元的 唯一指定,本质上是组合逻辑电路的一种应用:
内存 地址 译码 逻辑
CPU
地址总线
数据总线
译码寻址方式
② 8088/8086寻址(或管理)1M的存储空间是通 过段来实现的: ➢ 段寄存器的内容存放和提供段基址的高 16 位, 用于指定低四位为零的存储单元作为段的起点; ➢ 16 位段内偏移量确定段内具体单元,段内管理 64K 的存储空间; ➢ 段寄存器的内容即段基址的高 16 位和段内偏移 量合称为逻辑地址:
汇编语言-寻址方式

汇编语⾔-寻址⽅式⼀ 定义 在指令中,指定操作数或操作数存放位置的⽅法称为寻址⽅式⼆ 分类(16位cpu) 1 ⽴即数寻址 2 寄存器寻址 3 存储器寻址 (1) 直接寻址 操作数存放在内存中,在指令中直接给出该操作数的有效地址 例: mov ax, [100] (2) 寄存器间接寻址 操作数在存储器中,操作数的有效地址⽤SI、DI、BX和BP等四个寄存器之⼀来指定 (3) 寄存器相对寻址 操作数在存储器中,其有效地址是⼀个基址寄存器(BX、BP)或变址寄存器(SI、DI)的内容和指令中的8位/16位偏移量之和。
若有效地址⽤SI、DI和BX等之⼀来指定,则其缺省的段寄存器为DS; 若有效地址⽤BP来指定,则其缺省的段寄存器为SS。
(4) 基址变址寻址 操作数在存储器中,其有效地址是⼀个基址寄存器(BX、BP)和⼀个变址寄存器(SI、DI)的内容之和。
(5) 相对基址变址寻址 操作数在存储器中,其有效地址是⼀个基址寄存器(BX、BP)的值、⼀个变址寄存器(SI、DI)的值和指令中的8位/16位偏移量之和。
三 32位cpu寻址⽅式在32位微机系统中,除了⽀持前⾯的七种寻址⽅式外,⼜提供了⼀种更灵活、⽅便,但也更复杂的内存寻址⽅式,从⽽使内存地址的寻址范围得到了进⼀步扩⼤。
在⽤16位寄存器来访问存储单元时,只能使⽤基地址寄存器(BX和BP)和变址寄存器(SI和DI)来作为地址偏移量的⼀部分,但在⽤32位寄存器寻址时,不存在上述限制,所有32位寄存器(EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP)都可以是地址偏移量的⼀个组成部分。
当⽤32位地址偏移量进⾏寻址时,内存地址的偏移量可分为三部分:⼀个32位基址寄存器,⼀个可乘1、2、4或8的32位变址寄存器,⼀个8位/32位的偏移常量,并且这三部分还可进⾏任意组合,省去其中之⼀或之⼆。
32位基址寄存器是:EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP;32位变址寄存器是:EAX、EBX、ECX、EDX、ESI、EDI和EBP(除ESP之外)。
汇编入门 精髓(转)寄存器和寻址方式

一汇编入门精髓(转)寄存器和寻址方式2010-03-20 13:01寄存器和寻址方式寄存器,在8086/8088里,有三组共13个16位寄存器.寄存器,从名字上看,可以知道,它就象书店的行包寄存处,寄存器的名字就象寄存处发给用户取回自已物件的标志牌子,表示物件的存放地址.寄存器的内部给构都相同,只不过是一个二字节或一字节的存储空间,别看他们小,作用可大了,所有电脑的运算,都要从他们过关,因为他们的处理速度快嘛.为了区分和准确运用,就要给他们进行科学的分组和起名.第一组,数据寄存器,AX,BX,CX,DX.其中,X表示一个未知数,那么这些寄存器都可以用来存放数据,ABCD,虽说都可以理解为一个顺序号,但是,A还是加法ADD的简称,所以AX叫累加器,B是基地址的简称,所以BX可以叫基地址寄存器,C是计数器的简称,所以CX可以叫做计数器.D是数据DATA的简称,所以DX可以叫数据寄存器.这四个寄存都可以按高八位和低八位分成两个寄存器:AH,AL,BH,BL,CH,CL,DH,DL.第二组,地址指示和变址寄存器,SI,DI,BP,SP.它们用来表示一个地址偏移,或用来表示一个地址的变化状况.SI,DI都可以表示变址,在串操作中,SI和DI表示源和目的操作数的指示器,快速记忆方法:SI联想饮水思源的思(谐音SI),DI联想目的(谐音DI).BP,SP的P表示堆栈专用,BP表示基地址专用,SP则是堆栈顶指示器.其中,BP,SI,DI还可以兼作数据寄存器.SP则只能和堆栈绑定.第三组,段寄存器,CS,SS,DS,ES.它们用来存放CPU可以直接访问的四个当前段的段首地址.CS代码段,SS堆栈段,DS数据段,ES附加段.其中,在表示地址时,CS和指令指示器IP绑定使用,SS 和BP绑定.DS为SI,DI,BX共用.第四组,指令指示器,IP,这是CPU自动引用的,表示下一次要从主存取出的指令的偏移.寻址方式寻址方式分为六种,(这是教材里讲的).1,立即寻址, 数据的本身在代码段.用于赋初值.2,直接寻址, 数据的偏移在代码段,用于变量名.3,寄存器寻址, 数据的本身在寄存器.用寄存器名表示.4,寄存器相对寻址, 数据的偏移在寄存器.注意:BP和SS绑定.DS为SI,DI,BX 共用.5,变址寻址, 数据的偏移在一个寄存器里,并要加上一个偏移量.注意:BP和SS绑定.DS为SI,DI,BX共用.6,基址加变址寻址, 数据的偏移放在两个寄存器中,并要加上一个偏移量.注意:BP和SS绑定.DS为SI,DI,BX共用.BX为DS段的基址专用.寻址方式是汇编语言的重点和难点。
谈《汇编语言》中寻址方式的对比学习法

谈《汇编语言》中寻址方式的对比学习法
汇编语言是一种低级语言,它也是最原始的计算机编程语言。
在汇编语言中,数据与代码都用地址形式表示,这种“寻址”方式比较重要,它能够决定程序的运行结果。
当涉及到寻址时,汇编语言中有两种:直接寻址和间接寻址。
直接寻址方式是指机器码使用操作数的物理地址作为目的地址,即在操作指令中明确指出了操作数的地址,直接将操作数放置在指定的存储单元中,执行相应的指令,再由操作数取出正确结果。
由于直接寻址是一种简单快捷的寻址方式,因此它通常被认为是在低级程序设计语言上的一种优势。
而间接寻址,则是指机器指令不使用物理地址,而是使用某个特殊的地址作为目的地址。
这种地址叫做指针地址,指针就是指向操作数的指针,它可以指向任意的存储单元,从而可以方便快捷地访问操作数,相同的程序指令可以在不同位置执行,因此可以更加灵活和不受限制,这是间接寻址所具有的优势所在。
因此,可以说,直接寻址方式和间接寻址方式是汇编语言中的两种重要寻址方法。
在学习汇编语言时,需要认真比较和分析这两种方式,尽可能深入地了解它们的区别,勤加思考,从而加深对汇编语言的理解,提高代码的运行效率。
汇编语言-寻址方式

2020/12/27
20
基址加变址寻址例题
例3.12 MOV AX,[BX][SI] (等价形式MOV AX,[BX+SI])
说明:目的操作数地址是AX,源操作数偏移地址EA =[BX]+[SI],其中,基址寄存器选用了BX,变址寄存器 选用了SI。由于源操作数选用BX作基址寄存器,所以其物 理地址PA是由数据段寄存器DS的内容左移4位二进制与偏 移地址EA相加形成。
执行: (BX)→40050H 执行后:(40050H)=3344H,(BX)、(BP)、(DI)、 (SS)均不变。
2020/12/27
22
7. 相对基址加变址寻址
在该寻址方式中,操作数存放在存储器里,操作数的偏移
地址EA是由指令中指定的基址寄存器内容、变址寄存器内容 及位移量X三项相加之和组成。
为目的操作数地址,CX的内容为目的操作数。 执行前:(CX)=78H, 执 行:(CX)-1→CX 执行后:(CX)=77H
例3.7:ADD AX,BX 说明:ADD是双操作数指令,功能是实现加法运算,AX
为目的操作数地址,AX的内容为目的操作数,BX为源操作数地 址,BX的内容为源操作数。
执行前:(AX)=1234H,(BX)=5620H,即 执 行:(AX)+(BX) →AX 执行后:(AX)=6854H,(BX)不变。
2020/12/27
2
3.1 数据寻址方式
数据寻址方式即寻找操作数地址的 方式,在8086/80286中只能使用16位 寻址,而80386及其后继机型则既可用 16位寻址,也可用32位寻址,无论多 少位寻址实质都是寻找操作数的物理 地址。物理地址是由段地址和偏移地 址两部分组成,段地址存放在相应的 段寄存器中,偏移地址存储在相应的 地址寄存器中,偏移地址又称有效地 址。
汇编语言-寻址方式-地址和数据相关的寻址方式

汇编语⾔-寻址⽅式-地址和数据相关的寻址⽅式数据相关的寻址⽅式1 ⽴即寻址⽅式直接使⽤⽴即数来处理mov al,5mov ax,3064H2 寄存器寻址⽅式操作数在寄存器中,直接使⽤寄存器赋值来读取内部的操作数。
另外的⽅式的简介:在8086中把操作数的偏移地址称为有效地址,以下的操作都是取得有效地址(EA)的不同途径。
有效地址可以由以下四种成分:位移量(displacement):存放的是⼀个地址。
基址(base):基址部分,通常⽤来指数据段中数据或字符串的⾸地址变址(index):存放在变址寄存器中的内容。
通常⽤来访问数组中的某个元素或字符串的某个字符。
⽐例因⼦(scale factor):是386新增加的寻址⽅式的术语,值可为1,2,4,8在寻址中,可⽤变址寄存器内容乘以⽐例因⼦来取得变址值。
有效地址的计算公式可⽤由以下来处理:EA = 基址 + (变址 X ⽐例因⼦) + 位移量除了⽐例因⼦固定,其它三个都可以有正负。
四种成分16位寻址32位寻址位移量0,8,16位0,8,32位基址寄存器BX,BP任何32位通⽤寄存器变址寄存器SI,DI除ESP外的32位通⽤寄存器⽐例因⼦⽆1,2,4,8表格⼀默认段选择规则访存类型所⽤段及段寄存器却省选择规则指令代码段 CS寄存器⽤于取指堆栈堆栈段 SS寄存器所有的堆栈的进栈和出栈,任何⽤ESP或EBP作为基址寄存器的访问局部数据数据段 DS寄存器除相对于堆栈以及串处理指令的⽬的以外的所有数据访问⽬的串附加数据段 ES寄存器串处理指令的⽬的串表格⼆3 直接寻址⽅式操作数的有效地址只包含位移量这⼀种成分。
值就在代码段中指令的操作码之后。
也就是位移量就是操作数的有效地址。
;假设(ds) = 3050Hmov ax,[0000] ;就是把内存在3050:0000内存的数据传送到ax中也可以⽤符号地址代替数值地址⽐如mov ax,[VALUE];就是把value的3050:value将value替换为数据跟上⼀样也可以⽤指定段寄存器来作为段地址也是可以的。
汇编寻址方式总结

操作数是指令或程序的主要处理对象。如果某条指令或某个程序不处理任何操作数,那么, 该指令或程序不可能有数据处理功能。在CPU的指令系统中,除NOP(空操作指令)、HLT(停机指 令)等少数指令之外,大量的指令在执行过程中都会涉及到操作数。所以,在指令中如何表达 操作数或操作数所在位置就是正确运用汇编指令的一个重要因素。 在指令中,指定操作数或操作数存放位置的方法称为寻址方式。操作数的各种寻址方式是用 汇编语言进行程序设计的基础,也是本课程学习的重点之一。 微机系统有七种基本的寻址方式:立即寻址方式、寄存器寻址方式、直接寻址方式、寄存器 间接寻址方式、寄存器相对寻址方式、基址加变址寻址方式、相对基址加变址寻址方式等。 其中,后五种寻址方式是确定内存单元有效地址的五种不同的计算方法,用它们可方便地实 现对数组元素的访问。 另外,在32位微机系统中,为了扩大对存储单元的寻址能力,增加了一种新的寻址方式——32 位地址的寻址方式。 为了表达方便,我们用符号“(X)”表示X的值,如:(AX)表示寄存器AX的值。
7、相ห้องสมุดไป่ตู้基址加变址寻址方式
操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)的值、一个变址寄存器(SI、DI)的值 和指令中的8位/16位偏移量之和。 其有效地址的计算公式如右式所示。 在不使用段超越前缀的情况下,规定:如果有效地址中含有BP,则其缺省的段寄存器为SS; 否则,其缺省的段寄存器为DS。 指令中给出的8位/16位偏移量用补码表示。在计算有效地址时,如果偏移量是8位,则进行符 号扩展成16位。当所得的有效地址超过0FFFFH,则取其64K的模。 例3.5 假设指令:MOV AX, [BX+SI+200H],在执行时,(DS)=1000H,(BX)=2100H,(SI)=0010H, 内存单元12310H的内容为1234H。问该指令执行后,AX的值是什么? 解:根据相对基址加变址寻址方式的规则,在执行本例指令时,源操作数的有效地址EA为: EA=(BX)+(SI)+200H=2100H+0010H+200H=2310H 该操作数的物理地址应由DS和EA的值形成,即: PA=(DS)*16+EA=1000H*16+2310H=12310H 所以,该指令的执行效果是: 把从物理地址为12310H开始的一个字的值传送给AX。 其执行过程如图3.7所示。 从相对基址加变址这种寻址方式来看, 由于它的可变因素较多,看起来就显得复杂些, 但正因为其可变因素多,它的灵活性也就很高。比如:
矿产

矿产资源开发利用方案编写内容要求及审查大纲
矿产资源开发利用方案编写内容要求及《矿产资源开发利用方案》审查大纲一、概述
㈠矿区位置、隶属关系和企业性质。
如为改扩建矿山, 应说明矿山现状、
特点及存在的主要问题。
㈡编制依据
(1简述项目前期工作进展情况及与有关方面对项目的意向性协议情况。
(2 列出开发利用方案编制所依据的主要基础性资料的名称。
如经储量管理部门认定的矿区地质勘探报告、选矿试验报告、加工利用试验报告、工程地质初评资料、矿区水文资料和供水资料等。
对改、扩建矿山应有生产实际资料, 如矿山总平面现状图、矿床开拓系统图、采场现状图和主要采选设备清单等。
二、矿产品需求现状和预测
㈠该矿产在国内需求情况和市场供应情况
1、矿产品现状及加工利用趋向。
2、国内近、远期的需求量及主要销向预测。
㈡产品价格分析
1、国内矿产品价格现状。
2、矿产品价格稳定性及变化趋势。
三、矿产资源概况
㈠矿区总体概况
1、矿区总体规划情况。
2、矿区矿产资源概况。
3、该设计与矿区总体开发的关系。
㈡该设计项目的资源概况
1、矿床地质及构造特征。
2、矿床开采技术条件及水文地质条件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
浅析汇编语言中寻址方式的区别
浅析汇编语言中寻址方式的区别
浅析汇编语言中寻址方式的区别王传俊寻址方式是汇编语言中的一个重要内容,是学习编程的基础,同时也是该门课程的一个学习难点。
本文通过以Inte18086CPU为例,使用分析比较的方法阐述了各寻址方式间的区别。
汇编语言寻址方式有效地址物理地址在计算机应用技术的发展过程中,汇编语言是一座连接软件和硬件的桥梁,也是计算机能够提供给用户最快而又最有效的语言。
汇编语言不同于用O,1数字表示的机器语言,它是用人们熟悉的英文缩写字符表示相应的操作码,用符号或数值表示地址和操作数。
因此,汇编语言为程序的编写、阅读和修改提供了方便。
但由于汇编语言仍是一种面向机器的语言,所以在进行程序设计时必须考虑到机器的指令系统、寻址方式及存储设备的设置和功能,而熟悉并灵活地应用机器所采用的各种寻址方式,是运用汇编语言进行程序设计的根本。
而一个指令系统具有哪几种寻址方式,是否为编写程序提供方便,是指令系统设计的关键,同时也是初学者学习汇编语言的难点。
在教学过程中,通常选用Inte18086CPU的PC机为基础机型来组织教学。
Inte18086提供了九类寻址方式,它们分别是立即寻址、寄存器寻址、寄存器间接寻址、直接寻址、变址寻址、基址变址寻址、串寻址、端口寻址和隐含寻址。
由于Inte18086中的寻址方式有相似之处,极易混淆。
在教学过程中,应使学生抓住各种寻址方式的特点,找出它们之间的区别和联系,从而形成正确的概念。
什么是寻址方式呢?这是首先要明确的概念。
一个指令是由操作码和操作数两部分组成的。
操作数在存储器中存放的位置,称为操作数地址。
获得操作数地址的方式,就称为操作数地址的寻址方式,简称寻址方式。
在寻址过程中,操作数的存放位置决定着寻址的方式。
在汇编语言的学习过程中,区分“存放位置”是理解寻址方式的’前提。
因此,在学习之前应使学生理解寄存器和存储器的不同。
寄存器位于CPU内部,它的存取速度比存储器要快得多。
在计算机的运算过程中寄存器主要用来存放运算过程中的各种信息,包括操作数地址,操作数和运算的中间结果。
存储器是由许多存储单元组成的,每个单元有唯一确定的地址。
它是计算机的记忆场所,能把计算和处理的数据及程序存入计算机,使计算机自主工作,免受其
它因素的干扰。
在指令中,辨别操作数是存放在寄存器还是存储器中最简单的方法就是看这个操作数的书写有无[]。
如果有[],则操作数一定是存储器操作数,即操作数存放在存储器中,而存储器操作数所在的存储器地址就是该操作数的物理地址。
若无[],则操作数的存放分两种情况:一是在指令中操作数以立即数的形式给出,如3500H,则该操作数的寻址方式为立即寻址方式;二是操作数以通用寄存器形式给出,如AX,则该操作数的寻址方式为寄存器寻址方式。
立即寻址和寄存器寻址的相同之处在于都不需要访问内存,工作效率高。
但立即寻址方式主要用来为存储单元或寄存器赋初值,如:MOVAX,2043H这条指令中的源操作数2043H以立即数形式给出,与操作码一起放在代码段区域中。
而寄存器寻址方式的操作数放在一个通用寄存器中,即AX、BX、cx、DX、BP、sP、SI、DI中的任意一个。
如:MAXAX,cx这条指令中的源操作数存放在cx中。
直接寻址方式和前两种寻址方式的区别是:操作数存放在存储器中,16位有效地址直接包含在指令中。
它的物理地址是由指令中直接给出的16位有效地址与数据段寄存器DS向高位移动4位后相加得到的。
如:MOVAX,[2000H]中源操作数的16位有效地址2000H直接出现在指令中,它的物理地址=DS*10H+2000H。
寄存器间接寻址、变址寻址、基址变址寻址这三种寻址方式的操作数都存放在内存储器中,而要访问内存中存放操作数的存储单元,就需要知道存储单元在内存储器中的有效地址。
在Inte18086中,用来存放有效地址的寄存器只有四个,分别是DI、SI、BP和BX,即在指令中只有这四个寄存器可以放在[]中,作为寻址寄存器。
四种寻址方式的有效地址就是通过这四个寄存器以不同寻址方式而得到的。
寄存器间接寻址方式的操作数的有效地址只能由四个寄存器中的一个存放。
以DI、SI 或BX间接寻址时,操作数隐含在存储器的数据段区域中,操作数的地址用数据段寄存器DS内容左移4位加上DI、SI或BX中的16位有效地址获得。
如:MOVAX,[BX]中源操作数的有效地址为BX内容,它的物理地址=DS*10H+(BX)。
以BP间接寻址时操作数隐含在存储器的对栈段区域中,操作数的地址用堆栈段寄存器ss 内容左移4位加上BP中的16位有效地址获得。
若指令中标明是段超越的,则操作数的地址用段前缀寄存器内容左移4位加上BP中的16位有效地址获得。
变址寻址方式的操作数有效地址由变址寄存器(DI、SI、BP、BX)内容和指令中给定的8位或16位位移量组成。
与寄存器间接寻址方式相比多了位移量。
如:MOVAX,
disp[DI]中有效地址为disp+(DI),物理地址=DS*lOH+disp+(DI)。
在基址变址寻址方式中,将SI或DI称为变址寄存器,将BP或BX称为基址寄存器,在使用时只能同时使用一个变址寄存器和一个基址寄存器。
该寻址方式中的操作数有效地址=(SI)+(BX)。
如:MOVAX,[SI][BX],物理地址=DS*10H+(SI)+(BX)。
在以上六种寻址方式中,物理地址只与存放在内存储器中的操作数有关,而这种操作数在指令格式中最大的特点就是带有[],而其它操作数的存取都与内存无关,因而也就不涉及物理地址。
串寻址方式用于字符串的操作,使用隐含的变址寄存器SI和DI寻址。
源串操作数用SI寻址,目的串操作数用DI寻址,在指令执行过程中根据标志寄存器的DF标志位,自动修改SI和DI内容,以给定指向下一个操作数的地址,完成各种对字符串的操作。
串寻址方式的特征主要表现在操作码上,通常串寻址方式的操作码是一般操作码后加S(string字符串的缩写),以区别与其它寻址方式的不同。
如:MOV实现传送指令,MOVSB则实现字符串的字节传送。
端口寻址方式用于CPU寻址外设端口。
并由8位或16位(存放在寄存器DX中)立即数构成端口地址。
该寻址方式只有两个操作码:OUT(输出)和IN(输入)。
需要注意的是输出指由CPU输出至端口地址,输入则指端口地址输入到CPU中。
隐含寻址方式是指在Inte18086中,有些指令没有给出操作数,但却隐含着对固定寄存器的操作。
如:AAA隐含对AL操作,LES隐含对ES操作。
这三种是具有特殊功能的寻址方式,理解了其各自的操作对象及操作码的特征,那么掌握起来就很容易了。
通过对这几种寻址方式的分析比较,将抽象且较难理解的寻址方式具体化、形象化,这对今后的指令系统和程序设计学习会有很大的帮助。
1苏春莉:微机原理课程教学的实践与探讨[J],电脑知识与技术,2009,(24) 2陈佳:寻址方式教学方法的研究与研讨[J],科技技术,2009,(16) 3郭旭平:汇编语言寻址方式[J],机械管理开发,2008,(17) (作者单位:265500山东省烟台市烟台汽车工程职业学院)。