汇编语言 寻址方式及堆栈

合集下载

80X86汇编语言电子教案(3-2-MOV指令)

80X86汇编语言电子教案(3-2-MOV指令)

提供的基本寻址方式可以分为三类立即寻址寄存器寻址存储器寻址与存储器有关的寻址的有效地址由以下四种成分组成1位移量存放在指令中的一个81632位的数2基址存放在基址寄存器中的内容3变址存放在变址寄存器中的内容4比例因子386及后继机型增加的一个术语1无比例因子8086286386及后继机型共有位移量直接寻址基址或变址位移量基址或变址—基址变址寻址2带比例因子386及后继机型位移量变址比例因子比例变址寻址比例因子基址+比例因子说明这些寻址方式不仅可以用于源操作数的寻址也可以用于目的操作数的寻址唯一例外的是立即寻址只能用于源操作数例MOV [BX][DI]AX 则源操作数为寄存器寻址目的操作数为基址变址寻址存储器寻址时所确定的内存地址既可以是字节字也可以是双字地址那么上述指令的目的操作数的宽度是多少呢指令中操作数要具有明确的类型寄存器寻址类型确定存储器操作数寻址类型由变量的类型属性确定其它情况类型下操作数类型由指令中其它操作数的类型或指令缺省类型来确定确定的操作数为字类型指令指示对一定操作对象进行何种操作的命令指令系统计算机CPU的指令集合称为指令系统一指令集说明学习要求指令的基本功能二数据传送指令1通用数据传送指令2累加器专用传送指令3地址传送指令4标志寄存器传送指令5类型转换指令特点负责把数据地址或立即数传送到寄存器或存储单元中1通用数据传送指令1传送指令传送指令执行操作DSTSRC DST SRC 的类型要一致双字字节MOV AXMOV AH MOV AX MOV BXMOV MAST[BP][DI]MOV BL MOV BYTE PTR [BX]MOV DSMOV ES MOV AXMOV [BX]MOV DS例MOV EAX MOV ES 哪些指令为非法形式例MOV AXMOV AHMOV AXMOV BXMOV MAST[BP][DI]MOV BLMOV BYTE PTR [BX]MOV DSMOV ESMOV AXMOV [BX]MOV DS寄存器寄存器字寄存器寄存器字节存储器寄存器字存储器寄存器寄存器存储器字节立即数寄存器立即数存储器字节寄存器段寄存器存储器段寄存器段寄存器寄存器存储器存储器段寄存器段寄存器MOV ES立即数段寄存器MOV EAX存储器寄存器双字MOV CS AXMOV 5ALMOV EAX BX都是非法指令如为了使指令字不要过长规定双操作数指令的两个操作数中只能有一个使用存储器寻址方式因此不允许双存储器操作在有通用性MOV [BX]2带符号扩展传送指令有符号数的扩展MOVSX386及后继机型可用格式MOVSX DST, SRC执行操作本指令有两种格式REG1REG源操作数可以是或存储单元的内容目的操作数必须是功能传送时将源操作数符号扩展送入目的寄存器可以是位MOVSX3带零扩展传送指令无符号数的扩展MOVZX386及后继机型可用格式MOVZX DST, SRC执行操作本指令有两种格式REG1REG源操作数目的操作数MOVSX功能传送时将高位扩展为送入目的寄存器可以是位MOVSX例1MOVSX EAX 2MOVZX EAX 若执行前DATA =0FFE0H DATA 为字单元1EAX =0FFFFFFE0H 2EAX=0000FFE0H一般的双操作数指令源目的操作数的长度一致MOVZX MOVSX 指令的源操作数的长度一定要小于目的操作数的长度如MOVSX DXALMOVZX EBXAL 4堆栈操作指令堆栈PC 机的堆栈是在内存中开辟的一端固定一端活动的存储区采用的工作方式栈顶SP 或ESP 址由低注意 1.信息的存入和取出都是从栈顶开始中栈顶由指示当堆栈地址长度为位时堆栈操作使用SP 当堆栈地址长度为位时堆栈操作使用ESP为了将清楚堆栈操作指令我们分8086/8088803868086/8088 PUSH/POP进栈指令执行操作出栈指令执行操作例SP→SP→例SP→SP→ES)=2367H, (SP)=0100H,试画出堆栈的变化情况(SP)=100H12H12H例都是非法指令80386SP SP 2 ESP ESP 2 SP SP 4 ESP ESP 4 1616位位在实方式下803868086为编写80386及后继的程序可利用位通用寄存器可使用新增指令可采用新增的寻址方式但是段的最大长64KB 当存储单元的地址偏移超过64KB 时不会引起地址的反绕而导致段跨越异常在实方式下80386的兼容最大段为64称为位段在保护方式下段长可达4G 称为位段在实方式下运行的程序只能使用位段尽管在实方式下只能使用位段但可以使用位操作数也可以使用位形式表示的存储单元地址例MOV EAX关于实方式程序的几点说明为单位指令可以有四种格式不允许它使用立即数寻址方式指令允许三种格式能为字节类型5PUSHA/PU格式PUSHA286及后继PUSHAD386及后继执行操作PUSHA位通用寄存器依次入栈入栈次序为AX CX DX BX指令执行前的SP BP SI DISP SP-16PUSHAD位通用寄存器依次入栈入栈次序为EAX ECX EDX EBX指令执行前的ESP EBP ESI EDIESP ESP-326POPA/POP格式执行操作POPA位通用寄存器依次出栈出栈次序为DI SI BP SP BX DX CX AXSP SP+16POPAD位通用寄存器依次出栈出栈次序为EDI E SI EBP ESP EBX EDX ECX EAXESP ESP+32PUSHA POPA PUSHAD不影响标志位例例7交换交换指令执行操作OPR1OPR1OPR1例如XCHG EAX,EBX ; EAX 字AL 为要查找数据在表格2累加器专用传送指令EAX AX 传送信息IN OUT 输出程序设计中讲解换码指令格式执行操作累加器EAX AX AL例MOV BX, OFFSET TABLE ; (BX)=0040H长度不超过256)或EBX下标→(AL)3地址传送指令1LEA REG, SRC ;2LDS REG, SRC ;3LES REG, SRC ;4LFS REG, SRC ;5LGS REG, SRC ;6LSS REG, SRC ;把首地址偏移地址传送指令执行操作位有效地址位有效地址位有效地址截取低位有效地址零扩展后存入则MOV BX LEA BXBX =3412H BX=0100HBLOCK的区别假设0100H BLOCK =3412H 例值而不是该地址所在的存储单元的内容必须注意取地址到和寄存器指令执行操作或SREG ←位寄存器REG 不能是段R R LFS 段址偏移地址偏移地址段址例LDS SI, [10H]例LES DI, [BX]例TABLE DW 40H, 3000H , 2000HLSS ESP TABLE ;ESP=30000040H; (SS) =2000H4标志寄存器传送指令执行操作送标志寄存器指令执行操作(FLAGS标志进栈指令执行操作PUSHF: (SP)标志出栈指令执行操作LAHFSAHF例PUSHF TF=1TF15类型转换CBW AL的符号扩展到AH形成中的字CWD/CWDECWD AX的符号扩展到DX形成DX AX双字CWDE AX的符号扩展到EAX形成EAX双字CDQ EAX的符号扩展到EDX形成EDX EAXBSWAP 486及后继机型可用格式BSWAP R32 R32位寄存器操作将位寄存器的字节次序变反即14字节互换23字节互换指令合法的指令格式堆栈操作指令的指令与指令的区别掌握XCHG XLAT MOVSX MOVZX类型转换其余堆栈操作指令标志操作指令MOVSX作业。

DSP第四章 TMS320C20X系列的寻址方式及汇编指令

DSP第四章 TMS320C20X系列的寻址方式及汇编指令

LT *0+
执行指令前: ARP=1, (AR1)=100H,(AR0)=3 执行操作: 用AR1所指的数据存储器100H内 容装载暂时寄存器; 执行指令后: ARP=1,(AR1)=103H
⑤减去索引量
方法
举例
指令使用AR内容作
LT *0-
为数据存储器地址,
执行指令后AR内容 执行指令前:
自动减去ARO的内容。 ARP=1, (AR1)=100H,(AR0)=3
执行操作:
用AR1所指的数据存储器100H内
容装载暂时寄存器;
执行指令后:
ARP=1,(AR1)=FEH
⑥加上索引量,反向进位
方法
举例
指令使用AR内容作为 数据存储器地址,执 行指令后AR内容自动 加上AR0的内容,该 加法采用反向进位方 法。 注:主要用于FFT算 法
LT *BR0+
把AR0加到辅助寄存器中时,地址以位倒序的方 式产生,即进位是从左向右,而不是从右向左进位。
LTP ind [,ARn]
MAC MAC pma , dma
乘且累加
MAC pma, ind [ , ARn]
MACD MACD pma, dma
乘且累加,并将被寻址数据移至下一单元
MACD pma, ind [, ARn]
MPY MPY dma
MPY ind [, ARn]
MPYA/MPYS
累加前次乘积,再将TREG与被寻址数相乘
PAC PAC
PREG转入累加器ACC
SPH
存储PREG高16位,直接或间接寻址
SPL
存储PREG低16位,直接或间接寻址
例1:MAC
0FF00H,02H ;DP=6,地址300H~37FH,PM=0, CNF=1

第5章 指令与指令系统和汇编语言程序设计(2)

第5章 指令与指令系统和汇编语言程序设计(2)

运行过程中,可以直接看到屏幕上显示的内容,运行过后,再用D 20F0命令看内存的20F0区域中保存的运行结果,6个大写的英文字母 已经被修改为小写字母: 0061 0062 0063 0064 0065 0066
汇编语言程序设计
1 将寄存器R2和R3的内容相加,结果存入R0。 2 将寄存器R2和R3的内容相加,如果有进位,寄存器R0的内 容置1,否则置0 3 若R1的内容是负数则置R0为-1,否则置0(提示:用TEST) 4 检测R3的是奇数,R0的内容置为1,否则置为0。(提示: 用移位检测C的方法来测量一位) 5 将内存中1000H起始的10个单元的内容取出加2送入原地址。 6 已知内存中1000H起始的10个单元中的数是ASC码,将其取 出送显示。 7 将键盘录入的数存到内存1000H单元中。 8 将键盘录入的10个数存到内存1000H-1009H。
有寄存器寻址,寄存器间接寻址等7种。
从表5.1中可以看出, (A组) INC DR 单操作数(DR的内容加1) (B组) LDRR DR,[SR] 双操作数 (DR [SR])
(4)从指令的功能区分
有运算、读写内存类指令,输入输出指令,转移 指令,子程序调用指令,置进位标志指令等。
从表5.1中可以看出, (A组) ADD DR ,SR 加运算 (B组) LDRR DR,[SR] 读写内存
41 42 43 44 45 46
A 2080
MVRD R3, 0006 ;指定被读数据的个数
MVRD R2, 20F0 ;指定被读、写数据内存区首地址
(2084) LDRR R0, [R2]
;读内存中的一个字符到R0寄存器
CALA 2100 ;调用子程序(入口地址为2100),完成显示、

《计算机组成原理》教程第4章指令系统

《计算机组成原理》教程第4章指令系统

4
二 指令的格式
即指令字用二进制代码表示的结构形式
包括 操作码:操作的性质 操作码 地址码:操作数(operand)的存储位置,即参加操作的 operand , 地址码 数据的地址和结果数的地址
操作码域(op) 地址码域(addr)
5
1.操作码 操作码
指令的操作码表示该指令应进行什么性质的操作。 组成操作码字段的位数一般取决于计算机指令系统的 规模。 固定长度操作码:便于译码,扩展性差 . 可变长度操作码:能缩短指令平均长度 操作码的的位数决定了所能表示的操作数,n位操 作码最多表示2n种操作
(2). 堆栈工作过程 .
(一)进栈操作 ① 建立堆栈,由指令把栈顶地址送入SP,指针 指向栈顶。 ② 进栈:(A)→Msp, (sp)-1→SP ;Msp:存储 器的栈顶单元 (二)出栈操作 (SP)+1→SP, (Msp)→A
22
五.指令类型
一个较完善的指令系统应当包括: 数据传送类指令: 例)move、load、store等 算术运算类指令: 例)add、sub、mult、div、comp等 移位操作类指令: 例) shl,shr,srl,srr 逻辑运算类指令: 例)and、or、xor、not等 程序控制类指令: 例)jump、branch、jsr、ret、int等 输入输出指令: 例)in、out等 字符串类指令: 例)如alpha中cmpbge、inswh、extbl等 系统控制类指令: 例)push、pop、test等
18
10) *段寻址方式 段寻址方式 Intel 8086 CPU中采用了段寻址方式(基址寻址的特例)。 由16位段寄存器和16位偏移量产生20位物理地址 11)*自动变址寻址 自动变址寻址 指在变址方式中,每经过一次变址运算时,都自动改变变址寄存 器的内容,以后在PDP-11中详讲.

汇编语言寻址方式

汇编语言寻址方式
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的模。

汇编语言--操作数的寻址方式(三)

汇编语言--操作数的寻址方式(三)

汇编语⾔--操作数的寻址⽅式(三)三、操作数的寻址⽅式操作数是指令或程序的主要处理对象。

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

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

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

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

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

微机系统有七种基本的寻址⽅式:⽴即寻址⽅式、寄存器寻址⽅式、直接寻址⽅式、寄存器间接寻址⽅式、寄存器相对寻址⽅式、基址加变址寻址⽅式、相对基址加变址寻址⽅式等。

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

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

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

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分别是字节、字和双字单元。

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

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

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

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

ATT汇编语言及其寻址方式

ATT汇编语言及其寻址方式

ATT汇编语⾔及其寻址⽅式汇编语⾔论风格来分主要是两类,⼀类是Intel汇编,⼀类是AT&T汇编,分别被Windows和Linux作为主流风格。

因为我博客以推荐Linux系统为主,所以以后多以Linux汇编为主要描述语⾔。

AT&T汇编的特点: ".s"为汇编语⾔的后缀名, "#"井号开头的是注释⾏, "."点开始的指令⼀般都是伪指令, "$"美元符号修饰⽴即数, "%"修饰寄存器。

例如:AT&T汇编寄存器,寄存器前需要加上%修饰: 8位:al,ah 16位:ax 32位:eax 64位:raxAT&T操作符修饰: 8位:b 16位:w 32位:l 64位:q操作格式:操作符[操作修饰符] 操作对象[源] 操作对象[⽬标]寻址⽅式(Addrsing mode),就是指数据的组织⽅式,固定格式为:地址或偏移 (%基址或偏移量寄存器, %索引寄存器, ⽐例因⼦)则最终地址 = 地址或偏移 + %基址或偏移量寄存器 + %索引寄存器 * ⽐例因⼦这⼀串东西基本上都是可选的,没写的项基本上算以0代替,不同的组合就成了不同的寻址⽅式,如下:1) 直接寻址movl ADDRESS, %eaxADDRESS其实就相当于"地址或偏移"⾥的地址,反正就是⼀个数字。

2)寄存器寻址其实上⾯的例⼦也包括了寄存器寻址,顾名思义%eax就是寄存器寻址,代表对这个寄存器本⾝的写⼊或读出。

3)⽴即寻址movl $2, %ebx我⼀直觉得⽴即寻址算不算寻址,反正它的意思就是把2这个数字写⼊%eax寄存器,$2就是⽴即寻址,其实就是⽴即数。

4)间接寻址movl (%eax), %ebx(%eax)就是间接寻址了,意思就是访问eax寄存器⾥的数值所代表的地址。

相当于通⽤公式⾥的%基址或偏移量寄存器。

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

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

第四章 第一章 指令系统和寻址方式 基础知识
第四章 第一章 指令系统和寻址方式 基础知识
第四章 第一章 指令系统和寻址方式 基础知识
根据d的不同进行选取
第四章 第一章 指令系统和寻址方式 基础知识
d=1时的操作
第四章 第一章 指令系统和寻址方式 基础知识
d=0时的操作
第四章 第一章 指令系统和寻址方式 基础知识
如果2000H单元在附加段,指令为: MOV AX, ES:[2000H] 段跨越前缀: 段寄存器名: —— 改变默认使用的段寄存器
第四章 第一章 指令系统和寻址方式 基础知识
可以使用属性操作符 type PTR 来进行属性说明
第四章 第一章 指令系统和寻址方式 基础知识
(4)寄存器间接寻址方式 (Register Indirect Addressing ) 特点: (寄存器) = 操作数的偏移地址 计算操作数物理地址的公式:
next
(7)相对基址变址寻址方式 ( Relative Based Index Addressing ) 特点:(基址寄存器) + (变址寄存器)+位移量 = 操作数的偏移地址
例:设 ( SS ) = 3000H ( BP ) = 2000H ARRAY = 0250H ( SI ) = 1000H MOV AX, ARRAY[BP][SI] 要访问的存储单元物理地址为: 30000H+2000H +0250+1000H 30000H = 33250H
第四章 第一章 指令系统和寻址方式 基础知识
第四章 第一章 指令系统和寻址方式 基础知识
第四章 第一章 指令系统和寻址方式 基础知识
Байду номын сангаас
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PUSH SCR


(SP) – 2 → SP;
SCR → (SP).
8086汇编语言程序设计
34
出栈(习惯上又叫弹出)
POP
① ②
DEST
((SP)) → SCR; (SP) + 2 → SP.
问题:堆栈操作的寻址方式是什么?
8086汇编语言程序设计
35
本章小结:
① 寻址方式是本节的重点。注意区分:
先看一例子:
MOV AX, 201H
这条指令将 16 进制数 201 送入寄存器 AX。
存放结果的 AX 的寻址方式是“寄存器寻址”,而
后面的 201H 是一个常数,它是随指令从代码段来
的。由于这类操作数就在指令中,“立即”可以参
与运算,故称作“立即数寻址方式”。因立即数伴
随指令在代码段中,所以这种寻址也应属存储器寻
立即数寻址和直接寻址;
寄存器寻址和寄存器间接寻址。
② 堆栈是按“后进先出”机制存取数据的有特 殊功用的存储器组织;堆栈的结构完全是由 SS 和 SP 的初值决定的。 本章习题 本章参考
第五章 第 1、12 题 汇编语言教程.chm
8086汇编语言程序设计 36
被成为“地址指针寄存器”,具备“准指针”的功
8086汇编语言程序设计 能。 15
③ 变址寻址和基址寻址(寄存器相对寻址)
某地址指针寄存器的内容和指令中给出的位
移量之和形成有效地址的寻址方式。它是直接寻
址方式和寄存器间接寻址方式的一种组合,请看
例子:
MOV AL,[BX+20H]
ADD
AL,10[SI]
用于指定低四位为零的存储单元作为段的起点;
16 位段内偏移量确定段内具体单元,段内管理
64K 的存储空间;
段寄存器的内容即段基址的高 16 位和段内偏移
量合称为逻辑地址:
段基址的高 16 位 :段内偏移量
8086汇编语言程序设计 24
③ 8088/8086 CPU 按代码段、数据段、堆栈段、
8086汇编语言程序设计
30
3.2.2 8086 的堆栈
存储器 00000H
① 堆栈的组织
SS
TOP由SP指向
堆栈
BOTTOM
8086汇编语言程序设计
31
堆栈是由 SS 的内容为起点的一段存储区; SP 指向栈顶; 以字为单位进行存取; 当堆栈初始化或为空时,SP 的值是堆栈段的实 际长度,SP 指向栈底之下的第二个字节; 栈的最大空间是 64KB,栈的最大深度是 32K; 入栈的字,低字节存放在 SP 所指的单元,高字
串操作寻址和 I/O 寻址以后介绍。
8086汇编语言程序设计
22
物理地址、段、逻辑地址和寻址方式小结: ① 物理地址是地址信号和译码逻辑对存储单元的 唯一指定,本质上是组合逻辑电路的一种应用:
地址 译码 逻辑 CPU 地址总线 数据总线 内存
译码寻址方式
8086汇编语言程序设计 23
② 8088/8086寻址(或管理)1M的存储空间是通 过段来实现的: 段寄存器的内容存放和提供段基址的高 16 位,
8086汇编语言程序设计 9
偏移量或有效地址的形成: 偏移量=位移量+基地址+变址量 上述三个分量的不同组合,演绎出存储器寻
址的各种方式。
① 直接寻址
是在指令中直接给出操作数地址偏移量的寻
址方式。比如把 200H 单元的内容送入AL:
MOV AL, [200H]
8086汇编语言程序设计 10
8086汇编语言程序设计
本章要点
寻址方式的概念和基本分类;
7 种寻址方式及“两对”寻址方式的区别;
寻址方式与常量、变量和指针的关系;
堆栈概念、结构元素和操作指令。
8086汇编语言程序设计
1
第三章 寻址方式及堆栈
CPU 访问内存的两个目的: ①读取指令;②存取数据。 CPU 访问内存的三种方式: ① 控制器自动取指循环; ② 程序控制方式访问数据段; ③ 堆栈方式。
相对寻址”。
8086汇编语言程序设计
18
④ 相对基址变址寻址 有效地址是基址寄存器的内容、变址寄存器的 内容和指令中给出的位移量之和,如: MOV AL, 20H[BX][SI] MOV AH,80[BS][DI] MOV DX,100H[BX][DI] 20H[BX][SI] 也可以写成 [20H+BX+SI]。这种
8086汇编语言程序设计 2
3.1 寻址方式 一条汇编指令语句包含操作码和操作数两种
信息,有些像自然文字的谓语和宾语:
操作码 操作数或操作数的地址
操作码字段为指令,描述语句的功能;
操作数字段描述操作数或操作数的来源和去向;
CPU 获得操作数的方式叫作寻址方式。
8086汇编语言程序设计 3
三类寻址方式的特点:
的特例。比如:
MOV AL, [100H+BX+SI]
去掉其中任一个或二个分量就会是某种其他寻址
方式。
8086汇编语言程序设计 21
3.1.4 寻址方式与常量、变量及“准指针”
① 立即数寻址方式对应汇编语言的常量;
② 存储器寻址方式对应汇编语言的变量;
③ 在各种地址指针寄存器参与的存储器寻址方式
中,地址指理:
代码段:CS : IP;
堆栈段:SS : SP;
数据段:DS : 位移量+基址量+变址量
8086汇编语言程序设计
25
④ 寻址方式
寄存器寻址方式(访问 CPU 完成数据处理的接
口,按“直呼其名”的方式进行);
立即数寻址方式(伴随指令序列来自于代码段的
常量);
8086汇编语言程序设计 址。 7
8086汇编语言程序设计
8
3.1.3 存储器寻址
存储器寻址必然涉及段,即最终要以逻辑地址
段基址:偏移量 形成物理地址。由于在大多数使用场合地址指
针的段基址是“现成的”和隐含的,所以本小节讨
论的重点是“有效地址”——偏移量的问题。 偏移量是某存储单元和段基址间的距离,又被 称作有效地址。
27
3.2 堆栈 堆栈是由 CPU 控制的按“后进先出”顺序
存取数据的存储结构,用于暂存子程序调用、中
断断点的信息和数据。堆栈的用途在这里只作一
点说明,只有在学习了子程序调用、中断断点的
保护等才会知道为什么要使用堆栈这种特殊的存
储结构。本节的重点是:堆栈的结构元素和操作
指令。
8086汇编语言程序设计
11
注意直接寻址和立即数寻址方式区别:方括 号里的数字是操作数的有效地址,[200H]表示该 单元的内容。
显然,直接寻址方式是非常直观的存储器寻
址方式,但不方便处理整块的数据。 ② 寄存器间接寻址 寄存器的内容是某存储单元的有效地址,以 这种方式寻址就叫作寄存器间接寻址。
8086汇编语言程序设计 12
28
3.2.1 堆栈的构造
0H 存储器
TOP由SP指向 堆栈
BOTTOM
8086汇编语言程序设计
29
堆栈是在存储器中划出的一个部分;
地址最高的字单元叫作“栈底(Bottom)”;
入栈的数据从栈底开始逐个向地址低端存入;
用堆栈指针 SP 指向最后入栈的数据,习惯上 把 SP 所指的位置叫作“栈顶(Top)”; 数据是按 SP 的指向出入堆栈,从而实现了 “后进先出”的存取机制的。
数据段寻址是三种偏移分量的组合:
位移量+基址量+变址量
8086汇编语言程序设计 26
⑤ 寻址方式与常量、变量及指针的关系: 立即数寻址方式对应汇编语言的常量; 存储器寻址方式对应汇编语言的变量; 在各种地址指针寄存器参与的存储器寻址方式 中,地址指针寄存器充当“准指针”的角色。
8086汇编语言程序设计
寄存器寻址:存取数据在 CPU 内部进行,故 速度最快;寄存器数量很少,寻址方式简单; 存储器寻址:为便于组织串、数组等数据结构 复杂的数据处理,必须有更灵活、也就相对复杂 的寻址方式,是本节的重点;
I/O端口寻址:I/O端口的任务是实现计算机核
心和外界的数据交换,故寻址方式也相对简单。
8086汇编语言程序设计
14
两者的书写形式也不同,寄存器间接寻址时将
用作间接寻址的寄存器用方括号括起来。
能用作存储器间接寻址的有下述地址指针寄存
器:
BX, SI, DI, BP
显然,连续将上述寄存器的内容增一或减一,
可方面地处理数据块,如处理一维数据或字符串,
高精度数字运算等。可参与存储器寻址的寄存器又
如要将 200H 单元的内容送入 AL,使用寄存 器间接寻址需要这样: MOV BX, 200H
MOV
AL,[BX]
所谓“间接” 就是操作数的取得是通过寄存
器间接获得的。应注意寄存器间接寻址方式和寄
存器寻址相区别:后者在意的目标的是寄存器的
内容,而前者是寄存器的内容作为偏移量的存储
单元的内容。
8086汇编语言程序设计 13
8086汇编语言程序设计 4
3.1.1 寄存器寻址 当需要处理寄存器中的数据或将处理结果存 入寄存器的时,使用“寄存器寻址”;在汇编语 言中直接以寄存器名对寄存器寻址:
MOV DS, AX
意即将 AX 的内容送入数据段寄存器 DS。
8086汇编语言程序设计
5
8086汇编语言程序设计
6
3.1.2 立即数寻址
寻址方式能比较方便地处理二维数组等更复杂的
结构数据。
8086汇编语言程序设计 19
8086汇编语言程序设计
20
由于基于 BP 的基址变址寻址的隐含段寄存器是
相关文档
最新文档