第2章2节430寻址方式
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
绝对寻址方式——
机器指令:SR(0)寄存器相对寻址 效果上:直接寻址方式
(EDE)
(TONI)
举例:MOV &EDE , &TONI
;EDE=0F016h ;TONI=01114h
code
y=TONI x=EDE
data
EDE
操作数的地址 EDE TONI
data
TONI
思考: 比较符号与绝对寻址方式相同点和不同点
举例:MOV EDE , TONI
;EDE=0F016h ;TONI=01114h
code
y=TONI-PC x=EDE-PC
data
EDE=PC+x
操作数的地址 EDE TONI
data
TONI=PC+y
EDE和TONI为操作数的地址
01114h-0FF16h=011FEh 0F016h-0FF14h=0F102h
……
按功能 指令分类
2) 操作数:指明参与操作的数据或数据所在的地方。
在汇编语言中需指明
操作数所在的地方
寻址方式
操作数能够放在何处?
计算机中哪些地方可以存放操作数? CPU如何使用不同的操作数?
地址总线 AB
CPU
寄存器0 寄存器1 …… 寄存器15 存 储 器 I/O 接 口
输 入 设 备
I/O 接 口
程序的可重定位???
寄存器间接寻址方式
(R10)
(R11+0)
举例:MOV.B
@R10 , 0(R11)
code
data
R10
指针(地址)
R10 R11+0
data
R11+0
寄存器间接增量寻址方式
(R10) (R11+0) R10=R10+1 or 2
举例:MOV @R10+ , 0(R11)
JMP_TAB:
CASE_0: CASE_1:
CASE_n:
举例:代码段中的常数表定义及其使用
…… 变址寻址 X(Rn)
MOV.B LED_TAB(R9) , &P1OUT ;在显示码表中查得显示码后写入P1OUT ……
LED_TAB:
;代码段中的常数表定义 DB 3FH,06H,5BH,4FH DB 66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH DB 39H,5EH,79H,71H
MSP430 的 3 种指令格式
双操作数指令(Double Operand Instruction)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
op-code
S-Reg
Ad B/W
As
D-Reg
单操作数指令(Single Operand Instruction)
15 14 13 12 11 10 9 8 7 6
code
data
R10
指针(地址)
R10 R11+0
data
R11+0
实验验证:R10自增操作何时进行?
提示: MOV @R10+, 100(R10)
读取存储器操作数 (R10); R10=R10+2; 将读取得到的数据写入(R10+100)中。 读取存储器操作数 (R10); 将读取得到的数据写入(R10+100)中; R10=R10+2
B/W
5
4
3
2
1
0
op-code
As/Ad
S/D-Reg
跳转指令(Jump Instruction)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
op-code
C
10-Bit PC Offset
MSP430 寻址方式详解
寄存器寻址方式
变址寻址方式
(R5+2)
(R6+6)
#100 , R7 #0 , R8
#50 , array(R8) ;变址寻址 X(Rn) R8 R7 array_init
#0 , R6 #100 , R7 #array , R9
;???
@R9+ , R6 R7 accumulate
;采用间接增量寻址 方式可简化程序
MOV MOV MOV MOV MOV MOV MOV
第2章
MSP430微控制器概述
与寻址方式
第二节
MSP430 CPU的寻址方式
一、概述
1. 程序语言简介 2. 指令的基本构成
二、寻址方式
程序语言
高级语言程序
int example1( )
{ int var1,var2,var3;
汇编语言程序
data segment var1 db ? var2 db ? var3 db ?
相对寻址
X(Rn) 变址寻址 X(PC) 符号寻址 X(SR) 绝对寻址
与
寄存器间接寻址
@Rn @Rn+ @PC+ 立即数寻址
寄存器间接寻址与 X=0 的相对寻址具有相同的功能, 但寄存器间接寻址的指令中不需要 X, 因此寄存器间接寻址的指令长度更短。 因此,从功能上看,除了寄存器寻址方式外的其余 6 种寻 址方式都可以看成为相对寻址方式,其中寄存器的内容是 存储器操作数的地址的全部或一部分 ,相对寻址是寄存器 间接寻址方式的扩展。
Start: ……
MOV AL , var1 ADD …… MOV var3 , AL Code ends end start
}
区别?
为什么 要学汇编?
学习汇编语言的意义:
汇编语言程序反应机器运行的详细过程,通过学习汇编语 言程序,可以加深对计算机工作过程的理解;
在直接控制硬件和有严格时间要求的场合,使用汇编语言 比高级语言反而更容易。 汇编语言特点: 1.步骤更加细化,细化到CPU的基本操作(指令) 2.直接操作硬件(寄存器、内存、I/O端口)
立即数寻址方式
45h
(TONI)
PC 寄存器间接增量寻址方式
举例:MOV #45h , TONI
; TONI=010A8h
code
x=TONI-PC
立即数在 指令中
data
TONI=PC+x
010A8h-0FF16h=01192h
举例:跳转表 —— C语言中的开关语句:SWITCH()
…… ; MOV JMP_TAB(R9) , PC BR JMP_TAB(R9) 变址寻址 X(Rn) …… ;跳转表(代码段中的常数表)定义 DW CASE_0 ;R9=0 DW CASE_1 ;R9=1 …… DW CASE_n ;R9=n …… …… ;实现R9=0的程序段 JMP EXIT …… ;实现R9=1的程序段 JMP EXIT …… …… JMP …… ;实现R9=n的程序段 EXIT
1. 寄存器寻址 2. 变址寻址 3. 符号寻址 4. 绝对寻址 5. 寄存器间接寻址 6. 寄存器间接增量寻址 7. 立即数寻址 例:MOV 例:MOV 例:MOV 例:MOV 例:MOV 例:MOV 例:MOV src , dst ( src ) ( dst )
R4 , R5 R5 , x(R4) R6 , label R7 , &variable @R9 , R4 @R5+ , R6 #1000h , R4
例:将地址为2000H和 2001H 的 两 内 存 单 元 内容相加,结果存在 地址2002H单元中。
……
var3 = var1 + var2; ……
data ends
Code segment Assume cs:code,ds:data
一一对应 机器语言程序
A0 00 20 02 06 01 20 A2 02 20 AL , var2
的数组的读操作寻址
立即数寻址:主要用于对寄存器和变量赋初值操作,
以及用于构造emulated instruction
思考:
下列指令有何区别? 指令执行完毕后 R9 = ? ;符号寻址,array(PC) ;绝对寻址,array(SR) ;立即数寻址,@PC+
操作数
存储器 操作数
间 接 寻 址
寄存器寻址:寄存器的值就是操作数 直接寻址: 使用符号或数字直接给出操作数的地址 间接寻址: 寄存器中的值或含有寄存器的表达式的值 是操作数的地址 立即数寻址:使用符号(常量)或数字直接给出操作数
存储器操作数寻址方式
直接寻址: 指令中直接给出存储器操作数的地址 (常数或地址符号) 寄存器间接寻址 : 存储器操作数的地址=寄存器的值 寄存器相对寻址 : 存储器操作数的地址=寄存器的值+相对量 通常相对量是一个常数或常量 基址加变址寄存器 :存储器操作数的地址= (基址)寄存器的值+变址寄存器的值 相对基址加变址寄存器 :存储器操作数的地址=
任一操作数都有明确的寻址方式
既可作为源操作 数的寻址方式, 又可作为目的操 作数的寻址方式
只能作为源操作 数的寻址方式, 不能作为目的操 作数的寻址方式
X(Rn) X(PC) X(SR)
仅从As和 Ad 无法区分不同 的寻址方式
@Rn+ @PC+
由 As 和 S-Reg 共同决定源操作数的寻址方式 由 Ad 和 D-Reg 共同决定目的操作数的寻址方式
输 出 设 备
数据总线 DB
控制总线 CB
操作数的来源
……
指令1
代 码 段
指令2 指令3 指令4
立即数 常数表
CPU I/O端口 操作数 I/O端口
……
常数1 常数2 ……
RAM 操作数
寄存器操作数
数 据 段
数据1 数据2 数据3 ……
操作数与寻址方式
寄存器 操作数
假定:I/O与存储器统一编址
寄存器寻址 直接寻址 寄存器间接寻址 寄存器相对寻址 基址加变址寄存器寻址 相对基址加变址寄存器寻址 立即数寻址
;0 ;4 ;8 ;C
1 5 9 D
2 6 A E
3 7 B F
R9 = 0 1 2 3 4 5 6 7 8 9 A B C D E F LED显示: 0 1 2 3 4 5 6 7 8 9 A B C D E F
举例:数组定义及其使用
…… array DS16 …… MOV MOV array_init: MOV INC DEC JNZ …… MOV MOV MOV accumulate: ADD DEC JNZ …… 100 ; 定义一个含有100个字类型数组元素的数组
不同寻址方式的主要用法
原则上,一条指令中允许组合任何有效的源操作数寻址方式 (7种)和目的操作数寻址方式(4种),但实际编程时, 不同的寻址方式有其主要的用途: 符号寻址:主要用于FLASH中的常量和RAM中的变量的寻址 绝对寻址:主要用于硬件外设寄存器和RAM中的变量的寻址 变址寻址:主要用于FLASH中的常量表和RAM中的数组的寻址 寄存器间接(增量)寻址:主要用于FLASH中的常量表和RAM中
MOV EDE , TONI MOV &EDE , &TONI ;(EDE) ;(EDE) (TONI) (TONI)
MOV X(PC) , Y(PC) X=EDE-PC Y=TONI-PC
MOV X(0) , Y(0) X=EDE Y=TONI
符号EDE、TONI定义在代码段 符号EDE、TONI定义在数据段
2. 指令的基本构成
操作码
ADD MOV
操作数
src,dst src, dst
Start: ……
MOV &var1, R6
ADD &var2, R7 MOV R7, &var3
1) 操作码:指明CPU要执行什么样的 操作。是一条指令必不可少的部分, 在汇编语言中用助记符表示
数据传送 算术运算 逻辑运算 移位操作 控制转移 ……
Rn (n=4~15) 寄存器相对寻址 X , Y 为相对量 通常为常数或常量
举例:MOV 2(R5) , 6(R6)
code
data
R6+6
指针(地址)
R6+6 R5+2
data
R5+2
符号寻址方式——
机器指令:PC 寄存器ຫໍສະໝຸດ Baidu对寻址 效果上:直接寻址方式
(EDE)
(TONI)
注意:代码重定位后(此时PC值改变了),实际的操作数 可能已经不是原来的操作数了(RAM操作数) !
R5 , R4 R5 , EDE(R4) R5 , EDE R5 , &EDE @R5 , R4 @R5+ , R4 #10h , R4
;R5 ;R5 ;R5 ;R5 ;(R5) ;(R5) ;10h
R4 (EDE+R4) (EDE) (EDE) R4 R4,R5=R5+1 or 2 R4
( expr ) : 地址为 expr 的内存单元(字节/字) 变址寻址/相对 Rn 寻址 符号寻址/相对 PC 寻址 存储器操作 绝对寻址/相对 SR(0) 寻址 数寻址方式 Rn 寄存器间接寻址 Rn 寄存器间接增量寻址 立即数寻址/PC寄存器间接增量寻址 Rn : n=4~15
(基址)寄存器的值+变址寄存器的值+相对量
通常相对量是一个常数或常量
MSP430 操作数的来源示意图
立即数
代码 常数表 RAM 操作数
CPU 执行部件
R4 R5
RAM
数据与堆栈
寄存器 操作数
R15
PC SP SR
I/O端口 操作数
寄存器操作数
SFR操作数
存储器操作数
二、MSP430 CPU的 7 种寻址方式 以 MOV 指令为例: MOV