汇编语言-寻址方式
DSP第四章 TMS320C20X系列的寻址方式及汇编指令
![DSP第四章 TMS320C20X系列的寻址方式及汇编指令](https://img.taocdn.com/s3/m/db80579081eb6294dd88d0d233d4b14e85243e84.png)
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
汇编语言寻址方式
![汇编语言寻址方式](https://img.taocdn.com/s3/m/ab61bb2f581b6bd97f19eab7.png)
计算机是通过执行指令序列来解决问题的,因此每种计算机都 有一组指令系统提供给用户使用,这组指令集就称为计算机的 指令系统。 计算机中的指令由操作码字段和操作数字段两部分组成。 操作码 操作数 ... 操作数
指令的操作码字段在机器里面的表示比较简单,只需对每一种 操作指定确定的二进制代码就可以了。 指令的操作数字段情况较为复杂。 确定指令中用于说明操作数所在地址的方法称为寻址方法。 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的模。
汇编语言基于x86处理器课后答案第七版
![汇编语言基于x86处理器课后答案第七版](https://img.taocdn.com/s3/m/756e5ae4f424ccbff121dd36a32d7375a417c6e9.png)
汇编语言基于x86处理器课后答案第七版在进行汇编语言基于x86处理器课后答案第七版的整理和总结前,我们先回顾一下课程的主要内容。
本课程主要涉及汇编语言的基础知识、x86处理器的体系结构、汇编语言的程序设计等内容。
通过本课程的学习,我们能够了解并掌握x86汇编语言的编写和调试方法,为以后的系统级编程和软件优化打下坚实的基础。
那么,在开始答案的整理之前,我们首先来了解一下第七版的课后习题。
第七版的课后习题分为多个章节,包含了大量的问题和编程练习。
这些习题涵盖了课程的各个方面,从基础的概念理解到实际的程序设计。
下面,我们就以第七版课后习题中的几个问题为例,进行答案的整理和讲解。
1. 问题一:请解释x86汇编语言中的寻址方式,并举例说明。
在x86汇编语言中,寻址方式是指指令如何访问和操作内存中的数据和地址。
x86处理器提供了多种寻址方式,包括直接寻址、寄存器间接寻址、立即寻址等。
直接寻址是最简单的寻址方式,指令中直接给出了要访问的内存地址。
例如,mov ax, [0x1234]表示将地址为0x1234的内存单元中的数据传送到寄存器ax中。
寄存器间接寻址是指令中使用寄存器来传送地址。
例如,mov ax, [bx]表示将寄存器bx中的值作为地址,读取该地址中的数据,并传送到寄存器ax中。
立即寻址是指令中直接给出了要操作的数据。
例如,mov ax, 1234表示将立即数1234传送到寄存器ax中。
2. 问题二:请解释x86汇编语言中的标志位,并说明其作用。
在x86汇编语言中,标志位是由处理器中的标志寄存器(FLAGS)中的各个标志位组成的。
这些标志位用来表示当前程序执行的状态或者某些操作的结果。
常用的标志位包括零标志位(ZF)、进位标志位(CF)、溢出标志位(OF)等。
ZF用来表示最近的运算结果是否为零,当最近的运算结果为零时,ZF被置为1,否则为0。
CF用来表示最近的运算结果是否产生了进位或借位,当最近的运算结果产生了进位或借位时,CF被置为1,否则为0。
汇编语言--操作数的寻址方式(三)
![汇编语言--操作数的寻址方式(三)](https://img.taocdn.com/s3/m/cd1eea607ed5360cba1aa8114431b90d6c858980.png)
汇编语⾔--操作数的寻址⽅式(三)三、操作数的寻址⽅式操作数是指令或程序的主要处理对象。
如果某条指令或某个程序不处理任何操作数,那么,该指令或程序不可能有数据处理功能。
在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”存储形式和执⾏⽰意图。
汇编语言第3章 指令系统和寻址方式
![汇编语言第3章 指令系统和寻址方式](https://img.taocdn.com/s3/m/6e32ee2676c66137ee0619ef.png)
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)
DSP常用汇编语言指令简介
![DSP常用汇编语言指令简介](https://img.taocdn.com/s3/m/4aefe44cf7ec4afe04a1df29.png)
5. 控制指令举例
Example1:BIT0h,15 ;(DP = 6)把内存地址=300h 单元内容的最低位(BIT0)送给TC。 Example2:LDP #0h;使用立即数方式装载 数据页,也可以采用直接寻址和间接寻址方式装 载。 Example3:PUSH ;把累加器的低16位压入堆 栈。 Example4:SETC C;置进位C=1,也可以设置 以下的控制位为1或者为0,例如:CNF、INTM、 OVM、SXM、TC和XF。类似的指令还有: CLRC。
2. 工作寄存器等指令举例
Example4:ADRK #80h ;把当前工作寄存器内容 加一个立即数80h(注意立即数范围:00~FFh)。类 似的指令还有SBRK。 Example5:BANZ指令使用举例。例: MAR *, AR0 ;当前ARP=AR0 LAR AR1, #03h ;AR1内容赋值为03h LAR AR0, #60h ;AR0内容赋值为60h ZAC ; 累加器ACC清零 loop: ADD *+, AR1 ;把当前工作寄存器AR0指向 的内存单元数值加到ACC,然后AR0内容加1,当前工 作寄存器指针指向AR1 BANZ loop, *-AR0 ;判断AR0是否为0,否则程序 转到loop,同时AR0的内容减1。 南航自动化学院DSP技术应用实验 返回到第10页 室
南航自动化学院DSP技术应用实验 室
1. 累加器等指令举例
Example 1:ADD 1,1;(假设DP = 6),把 第6个数据页的第一个内存单元内容左移一 位加到累加器 Example 2:LACC *,4; (与SXM有关) Example 3:ROL;把累加器内容循环左移 Example 4:SACL *,0,AR7 ;把当前工作寄 存器指示内容左移0位送入累加器的低8位 Example 5:RPT #15 SUBC * ;累加器减去当前寄存 器指的内容,连续减16次,结果存累加器
《汇编语言程序设计》必考试题及答案
![《汇编语言程序设计》必考试题及答案](https://img.taocdn.com/s3/m/14b947a8f021dd36a32d7375a417866fb84ac0e4.png)
汇编语言程序设计试题及答案一.名词解释(本大题共5小题,每小题3分,共15分)试解释下列名词的含义。
1.寄存器:计算机系统内,位于CPU内部的存储单元,CPU访问此类存储单元不需要使用总线。
2.物理地址:CPU通过地址总线向外发送的20位地址,在访问内存单元前,CPU必须先将CPU内部的逻辑地址转换为物理地址。
3.段基值:逻辑地址的一个组成部分,用于指示一个段在内存中的起始地址。
4.寻址方式:指令获取操作数的方式。
5.补码:计算机系统内部用于表示带符号数的一种编码,正整数的补码为其真值本身,负整数的补码为其真值变反加1的结果。
二.计算题(本大题共5小题,每小题4分,共20分)试按照各小题的要求给出计算结果。
1.将十进制数100分别转换为二进制、十六进制数,它们的表示形式分别为多少?答案:二进制为 01100100B,十六进制为64H2.假设(DS)=0C00H,(BX)=0210H,对于指令MOV DS:100H[BX],AL,其目的操作数的物理地址为多少?答案:EA = (BX)+0100H = 0310H,物理地址 = (DS)*16 + EA = 0C000H + 0310H = 0C310H3.假设(BX)=0100H,(SI)=0020H,对于指令ADD DL,[BX][SI],其源操作数的偏移量为多少?答案:EA = (BX)+(SI)+ 0 = 0120H4.假设当前(SP)=0060H,连续执行5条PUSH指令后,(SP)=?答案:每执行一条PUSH指令,(SP)被减2,因此执行5条PUSH指令后,(SP)=0060H – 5*2 =0060H -000AH = 0056H5.对于一个十进制数– 80,其二进制补码表示形式为多少?答案:首先求得二进制真值为– 01010000B,负数补码为变反加1的结果,即 10110000B三.排错题(本大题共4小题,每小题5分,共20分)每小题列出了一条指令,判断该指令有无语法错误,如果存在语法错误,请指出具体的错误原因,判断正确给2分,分析正确给3分,判断错误不给分。
汇编的寻址方式
![汇编的寻址方式](https://img.taocdn.com/s3/m/10b4b7ad5ff7ba0d4a7302768e9951e79b896938.png)
在汇编语言中,寻址方式指的是指令如何访问内存中的操作数或数据。
不同的处理器体系结构支持不同的寻址方式。
以下是一些常见的寻址方式:立即寻址(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寻址方式](https://img.taocdn.com/s3/m/72483b4de518964bcf847caf.png)
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. 源操作数和目的操作数要互相匹配。 源操作数和目的操作数要互相匹配。
汇编语言第四章:指令系统和寻址方式
![汇编语言第四章:指令系统和寻址方式](https://img.taocdn.com/s3/m/9b1becf29b89680203d82592.png)
第四章 第一章 指令系统和寻址方式 基础知识
第四章 第一章 指令系统和寻址方式 基础知识
第四章 第一章 指令系统和寻址方式 基础知识
根据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
第四章 第一章 指令系统和寻址方式 基础知识
第四章 第一章 指令系统和寻址方式 基础知识
第四章 第一章 指令系统和寻址方式 基础知识
Байду номын сангаас
汇编语言程序设计-80X86指令系统和寻址方式
![汇编语言程序设计-80X86指令系统和寻址方式](https://img.taocdn.com/s3/m/b01d322e700abb68a982fbf7.png)
1.数据传送类指令 • 数据传送类指令用于实现CPU的内部寄存器之间 • CPU内部寄存器和存储器之间 • CPU累加器AX或AL和I/O端口之间的数据传送 此类指令除了SAHF和POPF指令外均不影响标志寄存器的
内容。 在数据传送指令中,源操作数和目的操作数的数据长度
必须一致。
(1)MOV指令
指令功能:把AX中的16位数或AL中的8位数输出到指定端口。
例 3.26
OUT 22H, AL
(4)段间间接寻址方式 这种寻址方式是由指令中给出的存储器数据寻址方式,包括存
放转移地址的偏移量和段地址。其低位字地址单元存放的 是偏移地址,高位字地址单元中存放的是转移段基值。这 样既更新了IP内容又更新了CS的内容,故称为段间间接寻 址。 例 JMP WORD PTR[BX] ;转移到当前代码位置内 ;有效地址存放在BX寻址的单元中
;物理地址=DS×16+SI
MOV [DI], DX
;物理地址=DS×16+DI
2) 以BP进行寄存器间接寻址(BP作为地址指针)的方式
隐含的段寄存器为堆栈段寄存器SS,操作数存放在堆栈段区域, 将堆栈段寄存器SS的内容左移4位,再加上基址寄存器BP的 内容,即为操作数的物理地址。
例
MOV [BP], BX
OP
DW
OP
SW
操作码格式
8086指令格式
几点说明: ① 一条指令可以包含一个操作数,也可以包含一个以上的操作
数;一个操作数的指令称为单操作数指令,单操作数指令中 的操作数可能由指令本身提供,也可能由指令隐含地指出。 ② 若位移量或立即数为16位,那么在指令代码中,将低位字节 放在前面,高位字节放在后面。 ③ 8086指令系统中大多数指令的操作码只占用第一个字节,但 有几条指令是特殊的,其指令中的第一个字节不但包含操作 码成分,而且还隐含地指出了寄存器名,从而整个指令只占 一个字节,成为单字节指令。这些指令字节数最少,执行速 度最快,用得也最频繁。
汇编语言指令详解
![汇编语言指令详解](https://img.taocdn.com/s3/m/1619638a561252d381eb6ed4.png)
第一讲第三章 指令系统--寻址方式回顾: 8086/8088的内部结构和寄放器,地址分段的概念,8086/8088的工作进程。
重点和纲要:指令系统--寻址方式。
有关寻址的概念;6种大体的寻址方式及有效地址的计算。
教学方法、实施步骤时间分配 教学手段 回 顾 5”×2 板书 计算机 投影仪 多媒体课件等讲 授 40” ×2 提 问 3” ×2 小 结2” ×2教学内容:8086/8088寻址方式操作码 操作数 …… 操作数运算机中的指令由操作码字段和操作数字段组成。
操作码:指运算机所要执行的操作,或称为指出操作类型,是一种助记符。
操作数:指在指令执行操作的进程中所需要的操作数。
该字段除能够是操作数本身外,也能够是操作数地址或是地址的一部份,还能够是指向操作数地址的指针或其它有关操作数的信息。
寻址方式就是指令顶用于说明操作数所在地址的方式,或说是寻觅操作数有效地址的方式。
8086/8088的大体寻址方式有六种。
1.当即寻址所提供的操作数直接包括在指令中。
它紧跟在操作码的后面,与操作码一路放在代码段区域中。
如图所示。
例如:MOV AX,3000H当即数能够是8位的,也能够是16位的。
若是16位的,则存储时低位在前,高位在后。
当即寻址主要用来给寄放器或存储器赋初值。
2.直接寻址操作数地址的16位偏移量直接包括在指令中。
它与操作码—起寄存在代码段区域,操作数一般在数据段区域中,它的地址为数据段寄放器DS加上这16位地址偏移量。
如图2-2所示。
例如:MOV AX,DS:[2000H];图2-2(对DS来讲能够省略成MOV AX,[2000H],系统默以为数据段)这种寻址方式是以数据段的地址为基础,可在多达64KB的范围内寻觅操作数。
8086/8088中允许段超越,即还允许操作数在以代码段、堆栈段或附加段为基准的区域中。
现在只要在指令中指明是段超越的,则16位地址偏移量能够与CS或SS或ES相加,作为操作数的地址。
汇编语言 第3章1 80x86的指令系统和寻址方式
![汇编语言 第3章1 80x86的指令系统和寻址方式](https://img.taocdn.com/s3/m/60965b6227d3240c8447efee.png)
CS、DS、SS、ES
寄存器寻址指令
MOV AX,1234H MOV BX,AX ;AX←1234H ;BX←AX
寄存器寻址
3.1.4 存储器寻址方式
指令中给出操作数的主存地址信息(偏移
地址,称之为有效地址EA),而段地址在 默认的或用段超越前缀指定的段寄存器中
8086设计了多种存储器寻址方式
量之和,寄存器可以是BX、BP或SI、DI 有效地址=BX/BP/SI/DI+8/16位位移量
段地址对应BX/SI/DI寄存器默认是DS,对应BP
寄存器默认是SS;可用段超越前缀改变 MOV AX,[DI+06H]; mov ax,table[di] ;AX←DS:[DI+06H] MOV AX,[BP+06H] ;AX←SS:[BP+06H] 相对寻址
;AX←DS:[BX+SI+06H]
相对基址变址
位移量可用符号表示 同一寻址方式有多种表达形式
指令操作数的表达-寄存器
r8——任意一个8位通用寄存器
AH AL BH BL CH CL DH DL
r16——任意一个16位通用寄存器
AX BX CX DX SI DI BP SP
reg——代表r8或r16
(4)基址变址寻址方式
有效地址由基址寄存器(BX或BP)的内容加上
变址寄存器(SI或DI)的内容构成:
有效地址=BX/BP+SI/DI
段地址对应BX基址寄存器默认是DS,对应BP
基址寄存器默认是SS;可用段超越前缀改变 MOV AX,[BX+SI] ;AX←DS:[BX+SI] MOV AX,[BP+DI] ;AX←SS:[BP+DI] MOV AX,DS:[BP+DI] ;AX←DS:[BP+DI]
浅析汇编语言中寻址方式的区别
![浅析汇编语言中寻址方式的区别](https://img.taocdn.com/s3/m/e03cd96028ea81c759f57868.png)
浅析汇编语言中寻址方式的区别浅析汇编语言中寻址方式的区别浅析汇编语言中寻址方式的区别王传俊寻址方式是汇编语言中的一个重要内容,是学习编程的基础,同时也是该门课程的一个学习难点。
本文通过以Inte18086CPU为例,使用分析比较的方法阐述了各寻址方式间的区别。
汇编语言寻址方式有效地址物理地址在计算机应用技术的发展过程中,汇编语言是一座连接软件和硬件的桥梁,也是计算机能够提供给用户最快而又最有效的语言。
汇编语言不同于用O,1数字表示的机器语言,它是用人们熟悉的英文缩写字符表示相应的操作码,用符号或数值表示地址和操作数。
因此,汇编语言为程序的编写、阅读和修改提供了方便。
但由于汇编语言仍是一种面向机器的语言,所以在进行程序设计时必须考虑到机器的指令系统、寻址方式及存储设备的设置和功能,而熟悉并灵活地应用机器所采用的各种寻址方式,是运用汇编语言进行程序设计的根本。
而一个指令系统具有哪几种寻址方式,是否为编写程序提供方便,是指令系统设计的关键,同时也是初学者学习汇编语言的难点。
在教学过程中,通常选用Inte18086CPU的PC机为基础机型来组织教学。
Inte18086提供了九类寻址方式,它们分别是立即寻址、寄存器寻址、寄存器间接寻址、直接寻址、变址寻址、基址变址寻址、串寻址、端口寻址和隐含寻址。
由于Inte18086中的寻址方式有相似之处,极易混淆。
在教学过程中,应使学生抓住各种寻址方式的特点,找出它们之间的区别和联系,从而形成正确的概念。
什么是寻址方式呢?这是首先要明确的概念。
一个指令是由操作码和操作数两部分组成的。
操作数在存储器中存放的位置,称为操作数地址。
获得操作数地址的方式,就称为操作数地址的寻址方式,简称寻址方式。
在寻址过程中,操作数的存放位置决定着寻址的方式。
在汇编语言的学习过程中,区分“存放位置”是理解寻址方式的’前提。
因此,在学习之前应使学生理解寄存器和存储器的不同。
寄存器位于CPU内部,它的存取速度比存储器要快得多。
汇编语言实验报告2 - 寻址方式的综合应用及转移指令的原理
![汇编语言实验报告2 - 寻址方式的综合应用及转移指令的原理](https://img.taocdn.com/s3/m/fb617205fad6195f312ba6b5.png)
一、实验目的1.定位内存单元的寻址方式汇总2.寻址方式的综合应用3.转移指令的分类和原理4.熟悉在显存中编程的方法二、实验内容及要求(一)寻址方式的汇总及综合应用1. 定位内存单元的寻址方式有几种,并举例说明。
2. 寻址方式在结构化数据访问中的应用。
Power idea公司从1975年成立一直到1995年的基本情况如下。
年份收入(千美元) 雇员人均收入(千美元) 1975 16 3 ?1976 22 7 ?1977 382 9 ?1978 1356 13 ?1979 2390 28 ?1980 8000 38 ?M1995 5937000 17800 ?下面的程序中,已经定义好了这些数据:assume cs:codesgdata segmentdb '1975','1976','1977','1978','1979','1980','1981','1982','1983'db '1984','1985','1986','1987','1988','1989','1990','1991','1992'db '1993','1994','1995';年份dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514dd345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000 ;公司总收入dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226 dw 11542,14430,15257,17800;公司雇员人数data endstable segmentdb 21 dup('year summ ne ??')table ends编程,将data段中的数据按如下格式写入到table段中,并计算21年中的人均收入(取整),结果也按照下面的格式保存在table段中。
汇编语言-寻址方式
![汇编语言-寻址方式](https://img.taocdn.com/s3/m/8aaafcf2eefdc8d377ee3253.png)
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位寻址,无论多 少位寻址实质都是寻找操作数的物理 地址。物理地址是由段地址和偏移地 址两部分组成,段地址存放在相应的 段寄存器中,偏移地址存储在相应的 地址寄存器中,偏移地址又称有效地 址。
汇编语言-寻址方式-地址和数据相关的寻址方式
![汇编语言-寻址方式-地址和数据相关的寻址方式](https://img.taocdn.com/s3/m/ad534164f56527d3240c844769eae009581ba280.png)
汇编语⾔-寻址⽅式-地址和数据相关的寻址⽅式数据相关的寻址⽅式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替换为数据跟上⼀样也可以⽤指定段寄存器来作为段地址也是可以的。
七种寻址方式
![七种寻址方式](https://img.taocdn.com/s3/m/1a586d016c85ec3a87c2c573.png)
七种寻址方式标签:it一、立即寻址方式操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种寻址方式也就称为立即数寻址方式。
立即数可以是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分别是字节、字和双字单元。
以上指令中的第二操作数都是立即数,在汇编语言中,规定:立即数不能作为指令中的第二操作数。
该规定与高级语言中“赋值语句的左边不能是常量”的规定相一致。
立即数寻址方式通常用于对通用寄存器或内存单元赋初值。
图是指令“MOV AX, 4576H”存储形式和执行示意图。
二、寄存器寻址方式指令所要的操作数已存储在某寄存器中,或把目标操作数存入寄存器。
把在指令中指出所使用寄存器(即:寄存器的助忆符)的寻址方式称为寄存器寻址方式。
指令中可以引用的寄存器及其符号名称如下:8位寄存器有:AH、AL、BH、BL、CH、CL、DH和DL等;16位寄存器有:AX、BX、CX、DX、SI、DI、SP、BP和段寄存器等;32位寄存器有:EAX、EBX、ECX、EDX、ESI、EDI、ESP和EBP等。
寄存器寻址方式是一种简单快捷的寻址方式,源和目的操作数都可以是寄存器。
1、源操作数是寄存器寻址方式如:ADD VARD, EAX ADD VARW, AX MOV VARB, BH等。
其中:VARD、VARW和VARB是双字,字和字节类型的内存变量。
在第4章将会学到如何定义它们。
2、目的操作数是寄存器寻址方式如:ADD BH, 78h ADD AX, 1234h MOV EBX, 12345678H等。
3、源和目的操作数都是寄存器寻址方式如:MOV EAX, EBX MOV AX, BX MOV DH, BL等。
汇编语言寻址方式及堆栈
![汇编语言寻址方式及堆栈](https://img.taocdn.com/s3/m/85069c52ee06eff9aff80723.png)
③ 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]表示该 单元的内容。
七种寻址方式举例例题
![七种寻址方式举例例题](https://img.taocdn.com/s3/m/bca14d24a66e58fafab069dc5022aaea998f41c2.png)
七种寻址方式举例例题:
1. 立即寻址:指令直接包含操作数,不需要经过任何地址计算。
例:MOV AL, 5 //把5赋值给AL寄存器。
2. 寄存器寻址:操作数在寄存器中,不需要经过任何地址计算。
例:MOV AX, CX //把CX寄存器的内容(即计数器的值)赋给AX寄存器。
3. 寄存器间接寻址:操作数需要经过地址计算才能取出,常用于寄存器间接寻址。
例:MOV DX, 8000H //把偏移地址8000H处的数据(即偏移地址加起来,实质是访问内存地址)赋给DX寄存器。
4. 直接寻址:指令直接给出操作数,需要经过地址计算。
例:MOV AL, [DX] //把偏移地址为DX的数据赋给AL寄存器。
5. 零页寻址:对于某一段指令来说,0页至1页的1024个字节被作为一个整体来处理,称这一段地址为零页。
例:MOV AX, [0F00H] //把偏移地址为0F00H的数据(即偏移地址加起来,实质是访问内存地址)赋给AX寄存器。
6. 间接寻址:指令给出的是内存地址,需要经过地址计算才能取出操作数。
例:MOV AX, [ES:DX] //把ES段的偏移地址DX(即ES段中偏移地址为DX的数据)处的数据赋给AX寄存器。
7. 偷窥寻址:在X86指令集中,有些指令后面可以跟一个“偷窥”码,该码指示该指令后面紧跟的某一条指令(即偷窥指令)被执行时,其内容被自动设置为零。
例如,在8086微处理器的汇编语言中,LOP指令用于循环执行一段指令,当执行LOP时,LOP后面的指令被执行,其内容被自动设置为零。