寻址方式与汇编语言

合集下载

汇编语言程序设计及上机指导第3章指令格式与寻址方式

汇编语言程序设计及上机指导第3章指令格式与寻址方式

高地址
(2)寄存器间接寻址
返回
操作数在存储器中,而操作数的有效地址EA却在指定的寄存器中,
即 EA=[寄存器]
1)16位寻址时,EA放在SI、DI、BP或BX中。
若以SI、DI、BX间接寻址,则默认操作数在DS段中。
MOV AX,[SI]
;默认DS为段基址
若以寄存器BP间接寻址,则默认操作数在堆栈段中。
BX,BP
SI,DI
不用该分量,默 认为1
0,8,16(位)
所有32位通用寄存器
除ESP外的所有32位 通用寄存器
1,2,4,8(倍)
0,8,32(位)
所有32位/64位通用寄存 器(16个)
所有32位/64位通用寄存 器(16个)
1,2,4,8(倍)
0,8,32,64(位)
如:ADD AX,20[BX][SI]
MOV ECX,[EBP+50] ;也可写成 MOV ECX,50[EBP]
MOV DX,[EAX+BASE] ;也可写成 MOV DX,BASE[EAX]
BASE是符号常量或变量
MOV ECX,[EBP+50]指令执行时,EBP寄存器内容为3000H,再加上 位移量50H之和为3050H,然后把由SS寄存器寻址的段中的3050H 单元的32位数据传送给ECX。
最常用的数据传送指令MOV的格式为: MOV DEST,SRC ;将源操作数SRC的值传送至目的操作数
【例】 MOV EAX,EBX ;将EBX的值送给EAX
2019/6/4
3.2.2 有效地址的概念
返回
在80X86系列CPU中,内存单元的地址由两部分组成:
段基地址和段内偏移地址(也称段内偏移量)

河北专接本微机原理简答题

河北专接本微机原理简答题

河北专接本微机原理简答题摘要:一、微机概述二、8086/8088微处理器三、半导体存储器四、寻址方式五、汇编语言六、中断技术七、输入输出设备八、IO接口九、操作系统正文:河北专接本微机原理简答题主要涉及微机的基本组成和功能,8086/8088微处理器,半导体存储器,寻址方式,汇编语言,中断技术,输入输出设备,IO接口以及操作系统等方面的知识。

首先,微机是由CPU、存储器、输入输出设备和系统总线等组成的。

其中,CPU是微机的核心,负责统一协调和控制系统中的各个部件;存储器用于存放程序和数据;输入输出设备和系统总线则负责实现微机的输入输出功能。

其次,8086/8088是常用的微处理器,它的内部集成了计数器、寄存器和运算器等组件。

它的工作原理是通过不断地取指令、执行指令来完成各种操作。

半导体存储器是微机中用于存储数据和程序的一种设备,它由大量的半导体芯片组成,每个芯片可以存储一定数量的数据。

寻址方式是CPU用于指定在存储器中存储的数据的地址的方式,它包括直接寻址、间接寻址、寄存器寻址和寄存器间接寻址等方式。

汇编语言是一种低级语言,它用助记符来代替机器码,用地址来表示操作数的地址。

汇编语言的程序需要经过汇编器编译成机器码才能被CPU执行。

中断技术是CPU在执行程序时,由外部设备或内部设备发出中断请求,CPU响应中断请求,暂停当前程序的执行,转去处理中断请求的过程。

输入输出设备是微机中用于与外部设备进行数据交换的设备,包括键盘、鼠标、显示器、打印机等。

IO接口是连接输入输出设备和CPU的桥梁,它负责实现数据在输入输出设备和CPU之间的传递。

操作系统是管理微机硬件和软件资源的程序,它提供了用户和计算机硬件的接口,用户通过操作系统来操作计算机。

汇编语言寻址方式

汇编语言寻址方式
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”存储形式和执⾏⽰意图。

汇编语言第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)

汇编语言-寻址方式

汇编语言-寻址方式

在一般情况下,如果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. 源操作数和目的操作数要互相匹配。 源操作数和目的操作数要互相匹配。

数据的7种寻址方式

数据的7种寻址方式

第3章数据的7种寻址方式,包括指令的格式,功能,指令的正误判断。

20位物理地址的生成:将段地址添上一个0(十六进制),再加上偏移地址。

数据传送指令:MOV PUSH,POP,XCHG,LEA,IN,OUT1、MOV ,注意指令的正误判断,可从3点入手。

(1)指令格式(2)数据大小是否超出范围(3)类型是否匹配。

通常,不能在两个内存单元间直接传送,段寄存器间不能直接传送,立即数不能直接传送到段寄存器,不能用CS作目的操作数。

2、PUSH 入栈指令,先减后压。

不能对字节进行压栈操作。

3、POP 出栈指令,先弹后加,将栈顶的一个字弹出到目的操作数。

4、EXCHG 交换指令。

不能在两个内存单元间直接交换。

5、LEA 取有效地址指令。

6、IN 输入指令,当端口大于255时,要用DX来表示端口号。

7、OUT 输出指令,当端口大于255时,要用DX来表示端口号算术运算等指令1、ADD AL,[1000H]例:AL=85H,BL=79H,执行指令ADD AL,BLAL= 0FEH ,CF= 0 ,OF= 02、SUB AL,BL3、INC [1000H] ERRORINC BYTE PTR [1000H]INC WORD PTR [1000H]该指令不影响CF标志4、DEC [1000H] ERRORDEC BX5、NEG AL 求相反数例:Y=X,X>=0; Y=|X|,X<0,编写程序段实现该功能MOV AL,XCMP AL,0JGE Y1NEG ALY1:MOV Y,ALHLT编程序的思路:取数据,在CPU里做运算,存数据;如果数据较多,通常要设指针,再取数据,取完数据后,修改地址指针,又取下一个数据,循环下去。

6、CMP AL,BL无符号数,A表示大,B表示小,E表示相等。

有符号数,G表示大,L表示小,E表示相等。

例:CMP AX,BXJGE NEXTXCHG AX,BXNEXT: CMP AX,CXJGE DONEXCHG AX,CXDONE:该程序段的功能是找AX,BX,CX中最大的数,并把最大的数放在AX中。

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

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

第四章 第一章 指令系统和寻址方式 基础知识
第四章 第一章 指令系统和寻址方式 基础知识
第四章 第一章 指令系统和寻址方式 基础知识
根据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
第四章 第一章 指令系统和寻址方式 基础知识
第四章 第一章 指令系统和寻址方式 基础知识
第四章 第一章 指令系统和寻址方式 基础知识
Байду номын сангаас

汇编课第3章寻址方式与指令系统之3 (1)

汇编课第3章寻址方式与指令系统之3 (1)

北京理工大学-张华平-2010
24
① 段内直接短转移 格式:JMP SHORT LABEL 例.
JMP SHORT B1 ;无条件转移到B1标号处 A1: ADD AX,BX B1: …
北京理工大学-张华平-2010
25
② 段内直接转移 格式:JMP LABEL 或: JMP NEAR PTR LABEL
同上
测试并取反由SRC 指定的DST中的位
同上
表3-4 位测试指令
北京理工大学-张华平-2010
10
三、位扫描指令
从386开始增加了位扫描指令,它们包括 BSF、BSR指令,可用于扫描操作数中第一个含 1的位。
北京理工大学-张华平-2010
11
1.顺向扫描指令 BSF 格式:BSF DST,RSC 功能:从右向左扫描RSC操作数中第一个含1的
… B3: SUB AX,CX
… C2 ENDS
北京理工大学-张华平-2010
动画演示
29
2.条件转移指令 执行这类指令时通过检测由前边指令已
设置的标志位确定是否转移,所以它们通常 是跟在影响标志的指令之后。这类指令本身 并不影响标志。
条件转移指令的通用汇编格式: JCC LABEL
北京理工大学-张华平-2010
(设为n),空出的位用操作数OPRD2高端的n位 填充,但OPRD2的内容不变,最后移出的位在进 位标志CF中。
2.双精度右移指令 SHRD 格式:SHRD OPRD1,OPRD2,CNT
北京理工大学-张华平-2010
20
3.6 程序控制指令
本节提供的指令可以改变程序执行的顺 序,控制程序的流向。它们均不影响标志位。
表3-7 检测北单京理个工大条学件-张华标平志-201位0 转移指令 33

《嵌入式系统基础教程》第09讲第5章ARM指令集特点寻址方式和指令

《嵌入式系统基础教程》第09讲第5章ARM指令集特点寻址方式和指令

标志
C=1,Z=0 C=0,Z=l
N=V N!=V Z=0,N=V Z=1,N!=V 任何 ARMv3之前
含义
无符号数大于 无符号数小于或等于 有符号数大于或等于 有符号数小于 有符号数大于 有符号数小于或等于 无条件执行(指令默认条件) 该指令从不执行
2008年6月28日
《嵌入式系统基础教程》第09讲第5 章ARM指令集特点寻址方式和指令
《嵌入式系统基础教程 》第09讲第5章ARM指 令集特点寻址方式和指

2023/5/9
《嵌入式系统基础教程》第09讲第5 章ARM指令集特点寻址方式和指令
第5章 ARM指令集和汇编语言程序
l 本章主要介绍以下内容:
l ARM指令集的基本特点 l 与Thumb指令集的区别 l 与x86处理器的区别 l ARM指令格式
l 举例:
l SUB R1,R1,R2 ;R1-R2→R1 l MOV PC,R0 ;PC←R0,程序跳转到指定地址 l LDR R0,[R1],-R2
;读取R1地址上的存储器单元内容并存入R0, ;且R1=R1-R2,后索引偏移 l AND R0,R5,R2 ;R2中存放的是第2操作数 ;该数据属于寄存器方式的第2操作数
运算指令能够访问存储器
2008年6月28日
《嵌入式系统基础教程》第09讲第5 章ARM指令集特点寻址方式和指令
ARM指令集的编码格式
l 参看ARM指令集编码格式PDF文件
2008年6月28日
《嵌入式系统基础教程》第09讲第5 章ARM指令集特点寻址方式和指令
ARM指令集的语法
l 一条典型的ARM指令语法如下所示:
寄存器寻址
l 操作数的值在寄存器中,指令中的地址码字段指 出的是寄存器编号,指令执行时直接取出寄存器 值来操作。寄存器寻址指令举例如下:

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

汇编语言 第3章1 80x86的指令系统和寻址方式
– 4个段寄存器seg:
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]

汇编语言实验报告2 - 寻址方式的综合应用及转移指令的原理

汇编语言实验报告2 - 寻址方式的综合应用及转移指令的原理

一、实验目的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段中。

汇编语言-寻址方式

汇编语言-寻址方式

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位寻址,无论多 少位寻址实质都是寻找操作数的物理 地址。物理地址是由段地址和偏移地 址两部分组成,段地址存放在相应的 段寄存器中,偏移地址存储在相应的 地址寄存器中,偏移地址又称有效地 址。

第三章MCS-51指令系统及汇编语言程序设计

第三章MCS-51指令系统及汇编语言程序设计

指 令 系 统 的 寻 址 方 式
MCS-51指令系统及一般说明 MCS-51指令系统及一般说明
在介绍指令之前, 在介绍指令之前 , 先对指令中使用的一些符号意义进行简单 的说明。 的说明。 direct---直接地址, ---直接地址 ① direct---直接地址,即8位的内部数据存储器单元或特殊 功能寄存器的地址。 功能寄存器的地址。 #data--包含在指令中的8位常数。 --包含在指令中的 ② #data--包含在指令中的8位常数。 #datal6--包含在指令中的16位常数 包含在指令中的16位常数。 ③ #datal6--包含在指令中的16位常数。 rel-- 位的带符号的偏移量。用于SJMP --8 SJMP及所有的条件转移 ④ rel--8位的带符号的偏移量。用于SJMP及所有的条件转移 指令中。 指令中 。 偏移量按相对于下一条指令的第一个字节地址与跳转 后指令第一个字节地址之差计算, 范围内取值。 后指令第一个字节地址之差计算,在-128~+127范围内取值。 128 +127范围内取值 DPTR--数据指针,可用作16位的地址寄存器。 --数据指针 16位的地址寄存器 ⑤ DPTR--数据指针,可用作16位的地址寄存器。
指 令 系 统 的 寻 址 方 式
寄存器间接寻址
寄存器间接寻址方式可用于访问内部RAM 或外部数据存储器 寄存器间接寻址方式可用于访问内部 RAM或外部数据存储器 。 RAM 或外部数据存储器。 这种寻址方式是由指令指定某一寄存器的内容作为操作数的 地址。 地址。 其中(Ri)=40H (Ri)=40 例如 MOV A,@Ri ;(i=0或1),其中(Ri)=40H 这条指令表示从Ri中找到源操作数所在单元的地址, Ri中找到源操作数所在单元的地址 这条指令表示从Ri中找到源操作数所在单元的地址,把该地 址中的内容传送给A 即把内部RAM 40H单元的内容送到累加器A RAM中 址中的内容传送给A。即把内部RAM中40H单元的内容送到累加器A 中。

C54x DSP的寻址方式及代数汇编指令

C54x DSP的寻址方式及代数汇编指令

C54x DSP的寻址方式及代数汇编指令c54xdsp的寻址方式及代数汇编指令附录三:c54xdsp的寻址方式及代数汇编语言指令c54xdsp的串行方式tms320c54x系列dsp的存储空间包括程序存储空间、数据存储空间和i/o空间。

每个空间都有64k字的大小。

因此,如果采用直接的寻址方式则需16位的地址。

为了节省程序存储空间和提高程序的运行速度,经常采用间接寻址等方法以便使指令字节数减少。

在本章内将对c54x的寻址方式做较为详细的介绍。

1.程序空间串行16位直接寻址方式主要应用于程序的调用(callpmad)、跳转指令(gotopmad)和块重复指令((d)blockrepeat)中。

具体说明如下:1、pmad所指的就是16十一位程序计数器pc的内容,它代表的就是程序存储空间的地址(programmemoryaddress);2、call指令和goto指令包含无条件的call和goto和有条件的call和goto。

3、块重复指令(d)blockrepeat的初始地址藏于寄存器rsa(repeatstartingaddress)中,结束地址存于寄存器rea(repeatendingaddress)中,重复次数存于寄存器brc(blockrepeatcounter)中。

4、pc、brc、rsa、rea坐落于pagen(programaddressgenerator)当中,见到图(3a-1)。

rcbrcrsarea图(3a-1)pagen程序计数器pc2.数据空间串行数据空间的寻址正如同8086微机的寻址问题一样重要,只有正确掌握c54x数据空间的c54x提供了7种基本寻址方式:?立即寻址.1寻址方式才能正确编制c54x的汇编程序。

绝对串行.?累加器串行.?轻易串行.辅助寄存器间接寻址.?内存映射寄存器寻址.?堆栈寻址.在本节中将详尽表明这7种串行方式。

坚信详尽写作本节可以有利于对c54x处理器的重新认识和认知,并在程序的基本建设中熟练地运用这些串行方式。

七种寻址方式举例例题

七种寻址方式举例例题

七种寻址方式举例例题:
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后面的指令被执行,其内容被自动设置为零。

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

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

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

汇编语言寻址方式及堆栈

汇编语言寻址方式及堆栈
段基址的高 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)。
不易记忆,十分繁琐。
2. 汇编语言
用机器指令系统的助记符(能反映指令特征和操作 性质的英文单词或英文缩写),用符号代替操作数来编 写的程序称为汇编语言程序。
•功能:将累加器A赋值1
•汇编语言: LDAA #$1
•LDDA:LOAD Accumulator A
特点:
•#$1:就是数1
用汇编语言编写的程序不仅执行速度快,又可以有效地
$491单元
数学运算指令
• 加法指令ADD:
– 8位加法指令ABA、 ADDA、 ADDB、 ADCA、ADCB – 16位加法指令ABX、ABY、 ADDD
• 减法指令SUB:
– 8位减法指令SBA、SUBA、SUBB、SBCA、SBCB – 16位减法指令SUBD
• 十进制调整指令:DAA (只能用在结果在A中的 加法指令)
• 如: •
若X=$1000 LDAB A,X LDAA D,X
;B=[X+A] ;A=[X+D]
8.带自动加减的5位偏移量间接寻址
• 有“先加、先减、后加、后减”四种方式。 • 基址寄存器可以是X,Y,SP。 • 主要用于数据块复制。 • 如: MOVW 2, X+, 4, +Y • ;执行该指令,将X开始单元的两个单元内
• 加一指令:INC、INCA、INCB、INS、INX、INY • 减一指令:DEC、DECA、DECB、DES、DEX、
DEY
数学运算指令
• 乘法指令MUL:
– 无符号16位数乘法EMUL
(D)×(Y)送Y:D
– 有符号16位数乘法EMULS
(D)×(Y)送Y:D
– 无符号8位数乘法MUL
(A)×(B)送
如PSHD指SP减二,D数据高位(A)传送到SP指 向单元,低位(B)传送到SP+1指向单元。
PULD指SP指向单元数据传送到D高位(A), SP+1指向单元数据传送到低位(B), SP加二。
数据传输指令举例
;++++加载/存储++++
LDAA #$55
;A累加器加载$55
STAA $480
;把A的内容存到内存$480
• 立即数寻址方式常用来给寄存器赋值。 • 注:立即数前加#
• LDAA #$55;
– 表示将十六进制立即数55加载到累加器A中
• LDX #1234;
– 表示将十进制数1234加载到X中
• LDY #%01010101;
– 表示将二进制数00100110加载到Y中
3. 直接寻址
• 操作数是单字节地址(8位),范围是$00~$FF, 共256个单元,一般访问I/O寄存器。
STAA:Store Accumulator A
5. 相对寻址
• 相对转移指令。操作数为单字节
• 如:
LABEL1: …

BRA
LABEL1


BRA:Branch always
6. 变址寻址
• 操作数由基地址寄存器(X、Y、 NhomakorabeaP、PC) 加偏移量构成。
• 如: 若X=$1000 LDAA 0,X LDAA 7,X
LDAB $480
;$480内容加载到B
INCB
;B内容自加1
STD $485
;D内容送$485
;++++传送交换指令++++
LDAB #$AA ;立即数$AA送B
TAB
;A送B
LDAB #$AA ;立即数$AA送B
EXG A,B
;A B交换
;++++MOVE指令++++
MOVW #$1234,$490;立即数$1234传送到$490和
• NOP是单字节指令,只让程序计数器PC加1 • PSHA首先移动SP指针,再压入数值
2. 立即数寻址
• 在立即数寻址方式下,指令中的操作数 (参与运算的数)就直接存放在机器代码 中,紧跟在操作码之后。
• 这条指令汇编成机器代码后,操作数作为 指令的一部分存放在操作码之后的主存单 元中。称这种操作数为立即数
1. 隐含寻址
• 定义:只有操作码,没有操作数或操作数为寄 存器,不显示操作数。
• 如:NOP(单片机延时用)PSHA、PSHB、 PSHX、PSHY,隐含操作数分别为无、A、B、 X、Y。
• 一般是单字节指令
隐含寻址举例
NOP PSHA
;PC=C003,A=CB,SP=500 ;PC=C004,A=CB,SP=500 ;A=CB,SP=4FF(说明:500-1),[4FF]=CB
A:B
• 除法指令DIV:
– 无符号32位数除以16位数EDIV
– 有符号32位数除以16位数EDIVS
– 无符号16位数除以16位数的小数除法FDIV
– 无符号16位数除以16位数IDIV
– 有符号16位数除以16位数IDIVS
• 乘加指令EMACS
数学运算指令
• 最大、最小值指令
– MAXA、 MINA :A中数据与内存单元字节型数据比 较,较大的传送到A
寻址方式与汇编语言
2010年7月 控制科学与工程学院
汇编语言的指令格式 寻址方式 汇编语言
单片机语言
1. 机器语言
用机器能够直接识别的二进制指令代码(即机器码或 可执行的目标代码)编写的程序称为机器语言。
•功能:将累加器A赋值1 •机器码:86 01
•86:告诉单片机要实现什么功能 •01:就是数1 特点: 执行速度快
执行TAB指令后,累加器B中的数据为$55。
• EXCHANGE交换指令指寄存器的数据与寄存器数据交 换:
– EXG、XGDX、XGDY、SEX – 如: 若A中数据为$55,B中数据为$aa
执行EXG A,B后,A中数据为$aa,B中数据为$55。
• LEA有效地址加载指令:
– LEAS、LEAX、LEAY – 如: LDY #$2000 LEAS 4,Y+
– BSET:将立即数与内存单元M内容或操作,将结 果送内存单元
• 逻辑左移指令:LSL、LSLA、LSLB、LSLD
– 将内存字节、A、B、D内容带C左移
• 逻辑右移指令:LSR、LSRA、LSRB、LSRD
– 将内存字节、A、B、D内容带C右移
逻辑运算指令
• 算术左移指令:ASL、ASLA、ASLB、ASLD
– MAXM、 MINM:A中数据与内存单元字节型数据比 较,较大的传送到内存单元
– EMAXD、 EMIND :D中数据与内存单元中两个相临 字节型数据组成的字数据比较,大者送D
– EMAXM 、EMINM:D中数据与内存单元中两个相临 字节型数据组成的字数据比较,大者送内存单元
数学运算综合举例
• FREESCALE的MCU采用“低字节数放高 位地址单元,高字节数放低位地址单元”。
• (1)若:[$4000]=$12, [$4001]=$34

执行 LDX $4000 指令后,

XH(高8位)=$12, XL=$34
• (2)又如: STAA $4000
• ;执行结果为A的内容存到$4000单元
• 在$2000单元开始存放字节型数据 $10,$30,$04,$A0,在$2010单元开始存放 字节型数据$11,$1A,$09,$1F,分别使用加、 减、乘、除四中运算处理对应位置的数据。 并把结果存到$2020开始的内存单元中。
• 例子程序见word文档 • 实际程序见:2-shuxue-example
LDX $2000 ;将$2000和$2001单元数据加载到X
• STORE指令指从寄存器到内存数据传送
– STAA、STAB、STD、STS、STX、STY – 如:STAA $1000 ;将A的内容存到$1000单元
STY $2000 ;将Y的内容存到$2000和$2001单元
• MOVE指令指从内存到内存数据传送
容(一个字)传送到Y+4开始的两个单元, 传送完成后X内容加2。
MOVW: move a word (两字节) of data from one memory location to another
指令系统
• 数据传输(加载寄存器、传送到内存、内存之间的传 输、寄存器间的传输、数据交换、加载有效地址、堆 栈操作)指令
‘jkl”990’、”ADDX00’8”
(汇编语言中字符串单引号与双引号无区别,内部有双引 号就用单引号,反之亦然。)
寻址方式
• 寻址:操作数指定了参与运算的数或者 数所在的地址。在单片机的存储空间中, 寻找指令规定的操作数的地址。
• 9S12内核有8种寻址方式。
• 隐含寻址 • 立即数寻址 • 直接寻址 • 扩展寻址 • 相对寻址 • 变址寻址 • 累加器变址寻址 • 带自动加、减的5位偏移量变址寻址
• 如: LDAA $55
表示将$55内存单元的数据加载到累加器A。
执行前:[55]=0,A=CB 执行后:[55]=0,A=0 A指八位
4. 扩展寻址
• 操作数为16位(双字节)地址,可访问64K空间。 • 如: LDX $4000
将$4000和$4001内存单元的数据加载到X。 (X表示16位)
• 取反指令:COM、COMA、COMB
– 对内存单元、A、B进行取反运算并存储
• 求补指令:NEG、NEGA、NEGB
– 对内存单元、A、B进行求补运算并存储
逻辑运算指令
• 位测试指令:BITA、BITB
– 将A或B与内存单元内容作与操作,改变标志位
相关文档
最新文档