汇编寻址方式总结

合集下载

汇编语言_寻址方式

汇编语言_寻址方式
16位数据
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,比例变址寻址方式操作数的有效地址是变址寄存器的内容乘以指令中指定的比例银子再加上位移量之和,所以由三种成分组成。

汇编的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的模。

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

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

5.寄存器相对寻址方式(register relative addressing)
EA=基址(base) 或变址( index)+偏移量 (displacement)
基址寄存器有:BX,BP 变址寄存器有:SI,DI 注:默认段是数据段和堆栈段
(SI) 物理地址=(DS)*16+(BX)+displacement
(DI) =(SS)*16+(BP)+ (SI)+displacement (DI)
例: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] 用途:处理成组数据(举例说明)
2.段内间接寻址(intrasegment indirect addressing) (IP)新=EA=寄存器或存储单元的内容 寄存器:所有寄存器寻址方式可用的寄存器 存储单元:所有存储单元寻址方式均适用 例:JMP SI (IP)=(SI) JMP WORD PTR VAR或简写JMP VAR (DS)=1000H,VAR=2000H 存储单元的物理地址=(DS)*16+VAR=12000H (12000H)=1234H 则,(IP)新=1234H
4.寄存器间接寻址方式(register indirect addressing)
EA=基址(base) 或变址( index) 基址寄存器有:BX,BP 变址寄存器有:SI,DI 注:默认段是数据段和堆栈段 (SI) 物理地址=(DS)*16+(BX) (DI) =(SS)*16+(BP)

8086汇编各种寻址方式大全

8086汇编各种寻址方式大全

各种寻址方式1. 立即寻址:直接放在指令中的常数称为立即数,立即数只能是源操作数,立即数存放在指令操作码之后的存储单元中。

例:MOV AL,50HMOV DS, 1250H 错误2. 寄存器寻址:存放在寄存器中的数据为操作数,寄存器操作数可以是源操作数,也可以是目的操作数。

例:MOV AL,BLMOV CL, BX 错误以下寻址方式3~8,操作数都在存储器中。

存储器操作数具有类型属性,如字节(BYTE)、字(WORD)、双字(DWORD)等,反映了数据占用存储单元的字节数,指令书写中,约定用方括号内容表示存储器操作数的偏移地址;用类型名 PTR 偏移地址的形式说明指令中存储器操作数的类型,例:WORD PTR [1000H];用变量名DB/DW/DD数据序列的形式分别定义具有“变量名”的字节、字或双字存储器操作数,如BUF DB 10H,20H。

3. 存储器寻址(1)直接寻址:存储器操作数的16位偏移地址直接包含在指令的方括号中。

例:MOV AL,[1000H] 约定由DS提供段地址MOV AL,CS:[1000H] ;段超越,由CS提供段地址MOV AL,SS:[1000H] ;段超越,由SS提供段地址例:MOV AX, [2000H] 如果(DS)= 3000H,则AX的物理首地址为:3000*10+2000(2)寄存器间接寻址:操作数所在的存储单元的偏移地址放在指令给出的寄存器中。

可用于这种寻址方式的寄存器只能是SI、DI、BP和BX。

其中,SI、DI、BX约定的段寄存器是DS,而BP约定的段寄存器SS。

例:MOV AX,[SI] ;AX←DS:[SI]MOV [BX],AX ;DS:[BX]←AX例:MOV AX, [BX]如果(DS)= 2000H, (BX)= 1000H,则物理地址 = 20000H + 1000H = 21000H(3)寄存器相对寻址这种寻址方式通过基址寄存器BX、BP或变址寄存器SI、DI与一个位移量相加形成有效地址,计算物理地址的缺省段仍然是SI、DI和BX为DS,BP为SS。

汇编语言-寻址方式

汇编语言-寻址方式

在一般情况下,如果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]是等价的。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

立即数可以是8位、16位或32位,该数值紧跟在操作码之后。如果立即数为16位或32位,那 么,它将按“高高低低”的原则进行存储。例如:
MOV AH, 80H MOV B1, 12H

ADD AX, 1234H MOV W1, 3456H
MOV ECX, 123456H ADD D1, 32123456H
另外,在32位微机系统中,为了扩大对存储单元的寻址能力,增加了一种新的寻址方式—— 32位地址的寻址方式。 为了表达方便,我们用符号“(X)”表示X的值,如:(AX)表示寄存器AX的值。
1、立即寻址方式
操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种寻址方式也就称 为立即数寻址方式。
操作数的寻址方式
操作数是指令或程序的主要处理对象。如果某条指令或某个程序不处理任何操作数,那么, 该指令或程序不可能有数据处理功能。在CPU的指令系统中,除NOP(空操作指令)、HLT(停 机指令)等少数指令之外,大量的指令在执行过程中都会涉及到操作数。所以,在指令中如何 表达操作数或操作数所在位置就是正确运用汇编指令的一个重要因素。
其中:内存单元B1、W1和D1分别是字节、字和双字单元。
以上指令中的第二操作数都是立即数,在汇编语言中,规定:立即数不能作为指令中的第二 操作数。该规定与高级语言中“赋值语句的左边不能是常量”的规定相一致。
立即数寻址方式通常用于对通用寄存器或内存单元赋初值。图3.1是指令“MOV AX, 4576H” 存储形式和执行示意图。
2、寄存器寻址方式
指令所要的操作数已存储在某寄存器中,或把目标操作数存入寄存器。把在指令中指出所使 用寄存器(即:寄存器的助忆符)的寻址方式称为寄存器寻址方式。
指令中可以引用的寄存器及其符号名称如下:
2.1、8位寄存器有:AH、AL、BH、BL、CH、CL、DH和DL等; 2.2、16位寄存器有:AX、BX、CX、DX、SI、DI、SP、BP和段寄存器等; 2.3、32位寄存器有:EAX、EBX、ECX、EDX、ESI、EDI、ESP和EBP等。
4、寄存器间接寻址方式
操作数在存储器中,操作数的有效地址用SI、DI、BX和BP等四个寄存器之一来指定,称这 种寻址方式为寄存器间接寻址方式。该寻址方式物理地址的计算方法如下:
寄存器间接寻址方式读取存储单元的原理如图3.3所示。 图3.3 读取操作数过程的示意图 在不使用段超越前缀的情况下,有下列规定: 若有效地址用SI、DI和BX等之一来指定,则其缺省的段寄存器为DS; 若有效地址用BP来指定,则其缺省的段寄存器为SS(即:堆栈段)。 例3.2 假设有指令:MOV BX,[DI],在执行时,(DS)=1000H,(DI)=2345H,存储单元 12345H的内容是4354H。问执行指令后,BX的值是什么? 解:根据寄存器间接寻址方式的规则,在执行本例指令时,寄存器DI的值不是操作数,而是 操作数的地址。该操作数的物理地址应由DS和DI的值形成,即: PA=(DS)*16+DI=1000H*16+2345H=12345H。 所以,该指令的执行效果是: 把从物理地址为12345H开始的一个字的值传送给BX。 其执行过程如右图3.4所示。
寄存器寻址方式是一种简单快捷的寻址方式,源和目的操作数都可以是寄存器。
1、源操作数是寄存器寻址方式
如:ADD VARD, EAX ADD VARW, AX
MOV VARB, BH等。
其中:VARD、VARW和VARB是双字,字和字节类型的内存变量。在第4章将会学到如何定 义它们。
2、目的操作数是寄存器寻址方式
在指令中,指定操作数或操作数存放位置的方法称为寻址方式。操作数的各种寻址方式是用 汇编语言进行程序设计的基础,也是本课程学习的重点之一。
微机系统有七种基本的寻址方式:立即寻址方式、寄存器寻址方式、直接寻址方式、寄存器 间接寻址方式、寄存器相对寻址方式、基址加变址寻址方式、相对基址加变址寻址方式等。 其中,后五种寻址方式是确定内存单元有效地址的五种不同的计算方法,用它们可方便地实 现对数组元素的访问。
MOV ES:[1000H], AX 直接寻址方式常用于处理内存单元的数据,其操作数是内存变量的值,该寻址方式可在64K字节的段内进 行寻址。 注意:立即寻址方式和直接寻址方式的书写格式的不同,直接寻址的地址要写在括号“[”,“]”内。在程序 中,直接地址通常用内存变量名来表示,如:MOV BX, VARW,其中,VARW是内存字变量。 试比较下列指令中源操作数的寻址方式(VARW是内存字变量): MOV AX, 1234H MOV AX, [1234H] ;前者是立即寻址,后者是直接寻址 MOV AX, VARW MOV AX, [VARW] ;两者是等效的,均为直接寻址
3、直接寻址方式
指令所要的操作数存放在内存中,在指令中直接给出该操作数的有效地址,这种寻址方式为直接寻址方式 。 在通常情况下,操作数存放在数据段中,所以,其物理地址将由数据段寄存器DS和指令中给出的有效地址 直接形成,但如果使用段超越前缀,那么,操作数可存放在其它段。 例3.1 假设有指令:MOV BX, [1234H],在执行时,(DS)=2000H,内存单元21234H的值为5213H。问该指 令执行后,BX的值是什么? 解:根据直接寻址方式的寻址规则,把该指令的具体执行过程用图3.2来表示。 从图3.2中,可看出执行该指令要分三部分: 图3.2 直接寻址方式的存储和执行示意图 3.1、由于1234H是一个直接地址,它紧跟在指令的操作码之后, 随取指令而被读出; 3.2、访问数据段的段寄存器是DS,所以,用DS的值和偏移量1234H相加, 得存储单元的物理地址:21234H; 3.3、取单元21234H的值5213H,并按“高高低低”的原则存入寄存器BX中。 所以,在执行该指令后,BX的值就为5213H。 由于数据段的段寄存器默认为DS,如果要指定访问其它段内的数据, 可在指令中用段前缀的方式显式地书写出来。 下面指令的目标操作数就是带有段前缀的直接寻址方式。
如:ADD BH, 78h
ADD AX, 1234h
MOV EBX, 12345678H等。
3、源和目的操作数都是寄存器寻址方式
如:MOV EAX, EBX
MOV AX, BX
MOV DH, BL等。
由于指令所需的操作数已存储在寄存器中,或操作的结果存入寄存器,这样,在指令执行过 程中,会减少读/写存储器单元的次数,所以,使用寄存器寻址方式的指令具有较快的执行速 度。通常情况下,我们提倡在编写汇编语言程序时,应尽可能地使用寄存器寻址方式,但也 不要把它绝对化。
相关文档
最新文档