看完就懂汇编语言寻址方式

合集下载

汇编语言从入门到精通-3操作数的寻址方式

汇编语言从入门到精通-3操作数的寻址方式

汇编语⾔从⼊门到精通-3操作数的寻址⽅式操作数的寻址⽅式 操作数是指令或程序的主要处理对象。

如果某条指令或某个程序不处理任何操作数,那么,该指令或程序不可能有数据处理功能。

在CPU的指令系统中,除NOP(空操作指令)、HLT(停机指令)等少数指令之外,⼤量的指令在执⾏过程中都会涉及到操作数。

所以,在指令中如何表达操作数或操作数所在位置就是正确运⽤汇编指令的⼀个重要因素。

在指令中,指定操作数或操作数存放位置的⽅法称为寻址⽅式。

操作数的各种寻址⽅式是⽤汇编语⾔进⾏程序设计的基础,也是本课程学习的重点之⼀。

微机系统有七种基本的寻址⽅式:、、、、、、等。

其中,后五种寻址⽅式是确定内存单元有效地址的五种不同的计算⽅法,⽤它们可⽅便地实现对数组元素的访问。

另外,在32位微机系统中,为了扩⼤对存储单元的寻址能⼒,增加了⼀种新的寻址⽅式——。

为了表达⽅便,我们⽤符号“(X)”表⽰X的值,如:(AX)表⽰寄存器AX的值。

3.1 ⽴即寻址⽅式 操作数作为指令的⼀部分⽽直接写在指令中,这种操作数称为⽴即数,这种寻址⽅式也就称为⽴即数寻址⽅式。

⽴即数可以是8位、16位或32位,该数值紧跟在操作码之后。

如果⽴即数为16位或32位,那么,它将按“⾼⾼低低”的原则进⾏存储。

例如: MOV AH, 80H ADD AX, 1234H MOV ECX, 123456H MOV B1, 12H MOV W1, 3456H ADD D1, 32123456H 其中:B1、W1和D1分别是字节、字和双字单元。

以上指令中的第⼆操作数都是⽴即数,在汇编语⾔中,规定:⽴即数不能作为指令中的第⼆操作数。

该规定与⾼级语⾔中“赋值语句的左边不能是常量”的规定相⼀致。

⽴即数寻址⽅式通常⽤于对通⽤寄存器或内存单元赋初值。

图3.1是指令“MOV AX, 4576H”存储形式和执⾏⽰意图。

图3.1 ⽴即寻址⽅式的存储和执⾏⽰意图3.2 寄存器寻址⽅式 指令所要的操作数已存储在某寄存器中,或把⽬标操作数存⼊寄存器。

汇编语言第3章 指令系统和寻址方式

汇编语言第3章 指令系统和寻址方式
寄存器有:AX,BX,CX,DX,SP,BP,SI,DI AH,AL,BH,BL,CH,CL,DH,DL
用途:单个数据传送
.
以下五种寻址方式均对内存进行的 物理地址=段首地址x16+EA
EA=基址(base) +变址( index) +偏移量 (displacement)
3.直接寻址方式(Direct addressing) EA=displacement
.
例:mov AX,ARRAY[BX][DI] (DS)=1000H,(BX)=1200H, (DI)=1000H, ARRAY=1000H
物理地址=DS*16+(BX)+(DI)+ARRAY =DS*16+1200+1000+1000=13200H
若:(13200)=34H,(13201)=12H 则,(AX)=1234H 允许段超越。 例:mov AL,ES:ARRAY[BX][DI] 用途:处理成组数据(举例说明)
(DS)=1000H,VAR=2000H
存储单元的物理地址=(DS)*16+VAR=12000H
(12000H)=1234H,(12002H)=2000H 则,(IP)新=1234H
(CS)新=2000H
.
3.2 程序占用的空间和执行时间
.
3.3 80X86的指令系统
一、数据传送指令
1.通用数据传送指令
• 段超越 • 寻址方式 (一)与数据有关的寻址方式 1.立即数寻址(Immediate addressing)
例: mov AL,5 (AL)=5
用途:初始化
.
2.寄存器寻址(Register addressing) 例: mov AL,DH (AL)=(DH) mov BX,SI (BX)=(SI)

汇编中的各种寻址方式

汇编中的各种寻址方式

汇编中的各种寻址方式(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

汇编的7种寻址方式

汇编的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+偏移地址。

汇编语言寻址方式

汇编语言寻址方式
80x86的寻址方式
计算机是通过执行指令序列来解决问题的,因此每种计算机都 有一组指令系统提供给用户使用,这组指令集就称为计算机的 指令系统。 计算机中的指令由操作码字段和操作数字段两部分组成。 操作码 操作数 ... 操作数
指令的操作码字段在机器里面的表示比较简单,只需对每一种 操作指定确定的二进制代码就可以了。 指令的操作数字段情况较为复杂。 确定指令中用于说明操作数所在地址的方法称为寻址方法。 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这只是一些基本的寻址方式,具体的汇编语言和处理器架构可能会有其他特定的寻址方式。

汇编语言2-1寻址方式

汇编语言2-1寻址方式

EA =
+
பைடு நூலகம்
注意: 允许段超越。 注意:①允许段超越。 ②[BX+BP]或[SI+DI]是非法搭配 或 是非法搭配
例: MOV AX, [BX] [SI] MOV AX, [BX+SI] MOV AX, DS: [BP] [DI] 错误例: 错误例: × MOV AX, [BX] [BP] × MOV AX, [DI] [SI]
指令操作例:MOV AX,DATA[DI][BX] 指令操作例: , 操作例 若DS=8000H, BX=2000H, DI=1000H, DATA=200H 则指令执行后AH=[83201H], AL=[83200H] 则指令执行后
目的 源
指令举例:
MOV AX , BX 操作码 操作数 ADD AX,[SI+6] INC HLT [BX]
二、8086的操作数分类
立即数(常数) 1、立即数(常数)
取值范围如下表: 取值范围如下表 8位 无符号数 00H-FFH(0-255)
带符号数80H-7FH(-128~127)
16位 0000H-FFFFH(0-65535)
存储器寻址方式
1、 立即寻址 、
直接把参与操作的数据写在指令中,是指令的一部分, 直接把参与操作的数据写在指令中,是指令的一部分,该数 据称为立即数。操作数可以是各种数制下的数值(相当于8位 据称为立即数。操作数可以是各种数制下的数值(相当于 位 位二进制数),也可以是带单引号的字符。 或16位二进制数),也可以是带单引号的字符。 位二进制数),也可以是带单引号的字符 强调: 强调:立即寻址只能用于源操作数 例如: 2050H,执行后, 执行后, 例如: MOV AX,2050H ; AX , 执行后 MOV AL,05H , ;AH = 20H,AL = 50H , MOV AL,‘A’ , 观察指令: 观察指令: MOV 05H,AL MOV BL,324D , , MOV CH,2050H MOV DL,‘25’ , , 注意: 立即数永远不能作目的操作数。 注意:1. 立即数永远不能作目的操作数。 2. 源操作数和目的操作数要互相匹配。 源操作数和目的操作数要互相匹配。

汇编语言-寻址方式

汇编语言-寻址方式

汇编语⾔-寻址⽅式⼀ 定义 在指令中,指定操作数或操作数存放位置的⽅法称为寻址⽅式⼆ 分类(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段的基址专用.寻址方式是汇编语言的重点和难点。

汇编语言-寻址方式-地址和数据相关的寻址方式

汇编语言-寻址方式-地址和数据相关的寻址方式

汇编语⾔-寻址⽅式-地址和数据相关的寻址⽅式数据相关的寻址⽅式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替换为数据跟上⼀样也可以⽤指定段寄存器来作为段地址也是可以的。

Win32汇编语言-寻址方式

Win32汇编语言-寻址方式
d_var dword 12345678h .code
start: mov esi, offset d_var mov eax, [esi] mov eax, esi mov eax, offset c_var mov eax, cs:[eax] ret ;返回操作系统 c_var dword 87654321h end start ;汇编结束
2019/10/1
14
例:运行结果(1)
mov esi, offset d_var mov eax, [esi]
ESI 00404000
EAX 12 34 56 78
78 00404000 56 00404001 34 00404002 12 00404003
内容 地址
2019/10/1
15
例:运行结果(2)
2019/10/1
12
数组求和
.386
.model flat, stdcall
.data
W1 WORD 1234h, 5678h, 4321h, 8765h
.code
mov esi, offset W1
mov ax, [esi]
; 1234h
add esi, 2
add ax, [esi]
; 1234h + 5678h
指令中给出的是有关操作数的主存地址信息 指令中主存操作数给出的地址只是偏移地址
(称有效地址EA) 实模式下,段基地址在默认的段寄存器中或
用段超越前缀指定的段寄存器中
2019/10/1
5
有效地址的组成
位移量:存放在指令中的8位、16位或32位的数 值或常量
基址:存放在基址寄存器中的内容。它是有效地 址中的基址部分;

汇编语言-寻址方式

汇编语言-寻址方式

在一般情况下,如果SI、DI或BX之内容作为有效地址的一部 分,那么引用的段寄存器是DS;如果BP之内容作为有效地址的 一部分,那么引用的段寄存器是SS。 在指令中给定的8位或16位位移量采用补码形式表示。在计算 有效地址时,如位移量是8位,则被带符号扩展成16位。
例如:如果(DS)=5000H ,(DI)=3678H MOV AX, [DI+1234H] 则,物理地址=50000+3678+1223=5489BH 假设该字存储单元的内容如下,则(AX)=55AAH
除了这7中基本的寻址方式外,8086/8088还提供了4种基于转 移地址的寻址方式(左边为段内,右边为段间):
(DS)=2000H, (CS)=6000H, (SS)=8000H,(ES)=A000H (BX)=1256H,位移量TABLE=20A1H,(232F7H)=3280H (1) JMP BX 执行后,(IP)=1256H, 下一条指令的物理地址是:6000(0) + 1256 = 61256H
指令中也可指定段超越前缀来取得其它段中的数据。 如,MOV AX , ES : [BX] 引用的段寄存器是ES 请熟悉下面的表达形式: MOV [SI] , AX ; 目的操作数间接寻址 MOV [BP] , CX ;目的操作数引用的段寄存器是SS MOV SI , AX; 目的操作数寄存器寻址
5.寄存器相对寻址方式 操作数在存储器中,操作数的有效地址是一个基址寄存器 (BX、BP)或变址寄存器(SI、DI)内容加上指令中给定的8 位或16位位移量之和。 即:
(1) MOV AX , 1200H (2) MOV AX , BX (3) MOV AX , [1200H] (4) MOV AX , [BX] (5) MOV AX , 1100[BX] (6) MOV AX , [BX][SI] (7) MOV AX , 1100[BX][SI]

汇编语言寻址方式及堆栈

汇编语言寻址方式及堆栈
段基址的高 16 位 :段内偏移量
③ 8088/8086 CPU 按代码段、数据段、堆栈段、 附加段对内存进行分类管理:
➢ 代码段:CS : IP; ➢ 堆栈段:SS : SP; ➢ 数据段:DS : 位移量+基址量+变址量
④ 寻址方式 ➢ 寄存器寻址方式(访问 CPU 完成数据处理的接口, 按“直呼其名”的方式进行); ➢ 立即数寻址方式(伴随指令序列来自于代码段的 常量); ➢ 数据段寻址是三种偏移分量的组合:
和 SP 的初值决定的。
本章习题
本章参考
第五章 第 1、12 题 汇编语言教程.chm
谢谢
段基址:偏移量
形成物理地址。由于在大多数使用场合地址指 针的段基址是“现成的”和隐含的,所以本小节讨 论的重点是“有效地址”——偏移量的问题。
偏移量是某存储单元和段基址间的距离,又被 称作有效地址。
偏移量或有效地址的形成:
偏移量=位移量+基地址+变址量
上述三个分量的不同组合,演绎出存储器寻 址的各种方式。
可以认为相对基址变址寻址方式是最一般的寻址 方式,其他寻址方式都可以看作是基址变址寻址方式 的特例。比如:
MOV AL, [100H+BX+SI] 去掉其中任一个或二个分量就会是某种其他寻址 方式。
3.1.4 寻址方式与常量、变量及“准指针” ① 立即数寻址方式对应汇编语言的常量; ② 存储器寻址方式对应汇编语言的变量; ③ 在各种地址指针寄存器参与的存储器寻址方式 中,地址指针寄存器充当“准指针”的角色。
① 直接寻址 是在指令中直接给出操作数地址偏移量的寻
址方式。比如把 200H 单元的内容送入AL: MOV AL, [200H]
No Image
注意直接寻址和立即数寻址方式区别:方括 号里的数字是操作数的有效地址,[200H]表示该 单元的内容。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档