寻址方式与汇编语言
不易记忆,十分繁琐。
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与内存单元内容作与操作,改变标志位