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

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]
- 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山东省烟台市烟台汽车工程职业学院)。