汇编语言寻址方式及指令系统
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
汇编语言设计复习题(第2章:8086的寻址方式和指令系统)

1、下列指令属于基址加变址寻址方式的是( MOV DX,DS:[BP][SI] )。
DX2、当程序顺序执行时,每取一条指令语句,IP指针增加的值是( D )。
DXA.1 B.2 C.3 D.由指令长度决定的3、下列属于合法的指令是( D ) DXA.MOV DS,ES B.MOV [SI],[DI] C.MOV AX,BL D.MOV [DI],BL4、若AX=349DH,CX=000FH。
则执行指令AND AX,CX后,AX的值是( 000DH )。
DX5、设DS=8225H,DI=3942H,指令NEG BYTE PTR[DI]操作数的物理地址是( 85B92H ) DX6、下列寄存器组中在段内寻址时可以提供偏移地址的寄存器组是( B ) DXA、AX,BX,CX,DXB、BX,BP,SI,DIC、SP,IP,BP,DXD、CS,DS,ES,SS7、对寄存器AX的内容乘以4的正确指令序列是( SHL AX,1 SHL,AX,1 )。
DX8、执行INC指令除对SF、ZF有影响外,还要影响的标志位是( OF,AF,PF )。
DX9、设DH=10H,执行NEG DH指令后,正确的结果是( DH=0F0H CF=1 )。
DX10、下列传送指令中有语法错误的是( A )。
DXA、MOV CS,AXB、MOV DS,AXC、MOV SS,AXD、MOV ES,AX11、下面指令执行后,改变AL寄存器内容的指令是( D )。
DXA、TEST AL,02HB、OR AL,ALC、CMP AL,BLD、AND AL,BL12、执行除法指令后,影响的标志位是( AF,CF,OF,PF,SF,ZF都不确定 )。
DX13、执行下面指令序列后,结果是( AX=0FF82H )。
DXMOV AL,82HCBW14、与MOV BX,OFFSET VAR指令完全等效的指令是( D )。
DXA、MOV BX,VARB、LDS BX,VARC、LES BX,VARD、LEA BX,VAR15、在段定义时,如果定位类型用户未选择,就表示是隐含类型,其隐含类型是( PARA )。
第3章 8086的指令系统—3.1寻址方式

例:(BX)=2000H,(SI)=1000H,偏移量=0250H,
则EA= 2000H+1000H+0250H=3250H
寻址目的
确定本条指令的操作数据 在指令中 PA:存储器内的绝对地址(20位) 在存储器中 EA:某个段内的相对地址(16位) 在寄存器中 确定下一条指令的地址 根据指令长度计算 根据转移指令的目标地址
寄存器名表示其内容(操作数)
MOV AX, BX
MOV AL, BH
;AX←BX
;AL←BH
演示
第3章: 3.1.3 存储器寻址方式
操作数在主存储器中,用主存地址表示 程序设计时,8088采用逻辑地址表示主存地址
段地址在默认的或用段超越前缀指定的段寄存器中 指令中只需给出操作数的偏移地址(有效地址EA)
演示
;AX←DS:[SI+06H]
第3章:4. 基址加变址寻址方式
有效地址由基址寄存器(BX或BP)的内容加上 变址寄存器(SI或DI)的内容构成: 有效地址=BX/BP+SI/DI 段地址对应BX基址寄存器默认是DS,对应BP基 址寄存器默认是SS;可用段超越前缀改变
MOV AX, [BX+SI] MOV AX, [BX][SI]
*微型计算机汇编语言特点 *微型计算机指令系统概述 *寻址方式
指令及其格式
指令及指令集 计算机能够识别和执行的基本操作命令
指令的作用
告诉CPU干什么?What? 告诉CPU从哪儿取数据?Where? 告诉CPU下一条指令在哪儿?Where? 操作码 操作数或操作数地址 指令的格式
汇编语言寻址方式

计算机是通过执行指令序列来解决问题的,因此每种计算机都 有一组指令系统提供给用户使用,这组指令集就称为计算机的 指令系统。 计算机中的指令由操作码字段和操作数字段两部分组成。 操作码 操作数 ... 操作数
指令的操作码字段在机器里面的表示比较简单,只需对每一种 操作指定确定的二进制代码就可以了。 指令的操作数字段情况较为复杂。 确定指令中用于说明操作数所在地址的方法称为寻址方法。 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”存储形式和执⾏⽰意图。
第二章 80868088寻址方式和指令系统

(5)奇偶标志PF
用于反映运算结果中“1”的个数。如果“1”的个数为偶数,则OF被置1,否则OF被清0。
(6)辅助进位标志AF
在字节操作时,如发生低半字节向高半字节进位或借位;在字操作时,如发生低字节向高字 节进位或借位,则辅助进位标志AF被置1,否则AF被清0。
②状态控制标志
(1)方向标志DF
方向标志决定着串操作指令执行时,有关指针寄存器调整方向。 当DF为1时,串操作指令按减方式改变有关的存储器指针值, 当DF为0时,串操作指令按加方式 改变有关的存储器指针值。
其中:存储单元的物理地址是12345H, 标出的:两个重叠段的段值分别是:1002H和1233H, 在对应段内的偏移分别是2325H和0015H。
采用段值和偏移构成逻辑地址后,段值由段寄存器给出,偏移可由指令指针IP、堆栈指针SP 和其他可作为存储器指针使用的寄存器(SI、DI、BX和BP)给出,偏移还可直接用16位数给 出。
图中指令存放在代码段中,OP表示该指令的操作码部分 再例如: MOV AL,5 则指令执行后,(AL)=05H
MOV BX,3064H 则指令执行后, (BX)=3064H
2、寄存器寻址方式
操作数在CPU内部的寄存器中,指令指定寄存器号。
对于16位操作数数,寄存器可以是:
AX、BX、CX、DX、SI、DI、SP和BP等;
指令中不使用物理地址,而是使用逻辑地址,由总线接口单元BIU按需要根据段值和偏移自动 形成20位物理址。
3、段寄存器的引用
由于8086/8088CPU有四个段寄存器,可保存四个段值。所以可同时使用四个段值,但这四个 段有所分工。
在取指令的时候,自动引用代码段寄存器CS,再加上由IP所给出的16位偏移,得到要取指令 的物理地址。
汇编语言第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)
汇编语言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. 源操作数和目的操作数要互相匹配。 源操作数和目的操作数要互相匹配。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.间接寻址:
由AR0-AR7作为间接寄存器,ARP的值(3位)作为当前辅 助寄存器。 ARAU(辅助寄存器算术单元)对辅助寄存器进行运算、修改 不占用CPU时间。 有4种操作:
①不增不减 ②增减 ③增减一个变址量 ④反向进位方式增减一个变量值
(反向进位方式:由高位开始运算,进位(借位)给低位,适用 于FFT算法。)
例 ADD *+,8,AR4; ①当前AR内容所指数据存贮器单元的内容左移8位后与累加器相加 ②当前辅助寄存器内容加1 ③AR4为下一次当前AR
4
§ 5.1 数据传递类(39条)
A:状态寄存器操作:(2条)
(装ARP、ARB、DP及标志位)
(1)装状态寄存器ST0、ST1
LST #m, dir
;直接寻址,dir为常数形式的直接地址
(0:不扩展,1:扩展) LACC ind ,16 [, ARn ] LACC # k, [shift]
300=32
300=32
8
例:LAR AR0,16;DP=6
前
后
310H=18H 310H=18H
AR0=6H
AR0=18H
例:LAR AR6,#3FFFH
前后
AR6=0H
AR6=3FFFH
2.存贮AR
SAR ARX,dir
;ARX dir(ind)
SAR ARX, ind [, ARn] ;执行中要修改,且要减、增量
ARP=7
例:LST #0,*-AR1 执行前 ARP=4 AR4=3FF 3FF=EE04 ST0=EE00 ST1=E7EC
:*为当前寄存器的间接寻址 执行后
ARP=7;AR1忽略 AR4=3FFH 3FF=EE04 ST0=EE04;ARP=7 ST1=E7EC
6
(2)SST存贮状态寄存器 SST # m, dir ; ST0/ST1 数据存贮器,直接方式下无论DP多少, 总被存放在0页,且不改变DP。 SST # m, ind [, ARn] ;间接寻址中可存放在任何一页
例:SST #1,*,ART
前后
ARP=0
ARP=7
AR0=300 AR0=300
300=0 300=2580
ST1=2580 ST1=2580
例:SST #0,96 ;指向0页的
96(60H)
前
后
ST0=0A408
ST0=0A408H
60H=0A
60H=0A408H
7
B:辅助寄存器操作:(6条)
1
2.直接寻址:
对数据存贮器的访问,64K空间分为512页,由STO的9位确定 页面指针DP。由指令提供页内的128个字地址偏移量,占7位。 由DP+偏移量=16位直接地址。复位时,系统对DP不进行初始 化,由用户进行初始化。
例:LDP #4 ;DP=4页 地址为:200H-27FH ADD 9H,5 ;(200H+9)的内容左移5位后与累加器相加, 结果给累加器。
5. AR减 SBRK #K ; AR-K-AR
6. AR比较测试 CMPR CM
条件成立TC=1 否则TC=0
;
CM=00 测AR=ARO
01 测试AR>ARO
10 测试AR<ARO
11 测试AR=ARO
C 修改页指针(1条)
LDP dir LDP ind[,ARn] LDP #K
例 LDP * , AR5
3
间接寻址七种操作方式:
方式
操作数符号
不增不减
增1 减1 加变量值 减变数值 反向进位加变址量 反向进位减变址量
*
*+ **0+ *0*BRO+ *BRO-
AR内容所指数据存贮器地址内容加载暂时寄存器 (TREG)
AR内容加载后AR内容±1
AR内容加载后AR内容±ARO的内 容
AR加载后,反向进位方式将当前AR内容±ARO的内容
5
例:LST #1,00H;(DP=6)页地址=000000110B 直接地址=00H
存储器地址=300H
执行前 执行后
300=E1BCH 300=E1BCH
ST0=0406H ST0=E406H;改变ARP D10=1
ST1=09ECH ST1=E1FCH D5~D8=1 D2,D3=1
ARP=0
DSP寻址方式有三种:立即、直接、间接
1.立即寻址: (1)短立即寻址:单字指令,指令中给出8、9、13位常数作为 操作数 一般立即数前加“#”。例:RPT #99;紧跟RPT后的指令 执行100次 (2)长立即寻址:双字指令,给出16位立即数 例:ADD #16384,2;将16384左移2位后与累加器相加, 结果送累加器。
1. 装载AR
LAR ARX, dir ;dir(ind)(K) ARX
LAR ARX, ind[,ARn] ; 无论SXM何值均不扩展符号
LAR ARX,#K
LAR ARX,#Lk
例:LAR AR4,*_ ;执行中指定AR与ARP指定的AR相同,
则不减量
前
后
ARP=4
ARP=4
AR4=300
AR4=32
例子:MAR *,AR1 例 MAR *+,AR5 .当前AR增量,并修改ARP
前 ARP=0 ARB=7
后 ARP=1 ARB=0
前
后
ARP=1
ARI=34
ARB=0
ARI=35 ARP=5 ARB = 1
10
4.AR加 ADRK #K ; K为无符号数,运算与SXM、OVM无关, 结果与C.OV无关。
LST #m, ind[,ARn] ;间接寻址,ind为辅助寄存器名
*m=0,选择ST0,m=1,选择ST1
*操作不影响1NTM。(D9位)
*装ST0时,只影响ARP,不影响ARB
装ST1时,即送ARB,也送ARP
*间接寻址时,虽然指定下一个ARn,但被忽略,将ST0/1中的
最高三位送ARP/ARB
前
后
ARP=4
ARP=5
AR4=300
AR4=300
300=06H
300=06
DP=1FFH
DP=06
均 为 无 符 号 数
11
D.累加器的操作(6条) 1.左移后装载累加器,32位送ACC
LACC dir [, shift] LACC dir, 16 LACC ind [, shift ,[,ARn]] ;移位时低位填0,高位受SXM影响
例: SAR AR0, *+,
前后
ARP=0
ARP=0
AR0=401
401=401
401=0DP=6)
ARO=37H
ARO=37H
31EH=18H
31EH=37H
9
3. 修改ARP MAR dir MAR ind [,ARn] ;修改ARP,且原ARP复制到ARB