9S12汇编指令【HCS12】

来源:互联网 发布:软件测试基本案例 编辑:程序博客网 时间:2024/05/03 14:54

#取立即数

立即数寻址:LDAA #$66
直接寻址    LDAA $55
扩展寻址    LDX  $4567
累加器变址寻址  LDAB A,X ;将X+A作为地址的内存字节加在到累加器B

加载指令:LDAA $55;将$0055内存单元的数据加载到累加器A中
   LDAB $55;将$0055内存单元的数据加载到累加器B中  
          LDD  #$40 ;将$0040加载到累加器D
   LDX  #$1000;将$1000加载到累加器X
   LDD  D,X ;将D+X内存单元中的数据加载到累加器D
   LDD  [D,X];将累加器X+D的内容为地址的指针的内容加载到累加器D中
          LDS  X ;将X指向的内存单元的内容加载到堆栈指针SP
   LDX  #$2000 ;将立即数$2000加载到变址寄存器X
   LDY  #$2000 ;将立即数$2000加载到变址寄存器Y


有效地址加载指令(将有效地址加载到X,Y,SP):
LDY #$2000
LEAS 4,Y+;SP的值为$2000,然后Y的值加4,Y的值变为$2004

存储指令将累加器或者CPU寄存器的内容写入内存单元
STAA $1000;将累加器A的内容存到地址为$1000的内存单元
STY  $2000;将变址寄存器Y的内容存储到内存单元$2000,$2001

 

传送指令:
TAB ;A传送到B
TAP ;将累加器A传送到CCR
TBA ;B传送到A
TFR X,A;将X低8位传送到累加器A中
TPA ;将CCR传送到A
TSX ;将SP传送到X
TXS ;将寄存器X传送到堆栈指针SP

 

寄存器交换指令:
EXG A,B;交换A与B的内容

符号扩展SEX;符号位扩展为8位


MOVE指令:
MOVB $2000,X;将2000单元的内容放到寄存器X中
MOVB $80,8,Y;将0080单元的内容放到寄存器Y+8单元中
MOVW #$1234,$1000;将$12放到$1000的单元,$34放到1001单元
MOVW 2,X+,4,Y+;将X指向的2B字节空间存放到Y指向的2B内存空间中,然后X加2,Y加4。


加法减法指令:
ABA;将A=A+B
ABX;X=X+B
ABY;Y=B+Y
ADDA X;将A的内容加上内存X单元的内容放到A中
ADCA X;将A的内容加上X指向的内存单元内容再加进位放到A中

SBA;A=A-B
SUBA X;A减去X内存中的内容放到A中

INC $1000;将1000地址单元的内容加1
INCA;将累加器A的内容加1
INS;将SP内容加1
INX;将X内容加1
INY;将Y内容加1
DEC $1000;将1000内存单元的内容减1
DECA;累加器A的内容减1
DECB
DES
DEX


比较指令:
CBA:A-B  影响CCR NZVC四个标记位
CMPA X;将A的内容与X指向的数据单元内容比较
CMPB
CPD 5,X;将D的内容与X+5指向的数据单元的2B内容比较
CPS $100;将SP的内容与$100 101单元的一个字内容比较
CPX $20;将X的内容与$20单元的的内容比较
CPY

 

测试指令(用来测试内存单元或者寄存器是否为0的一类指令)
该指令执行减0操作,结果不回送。
TST $1000;
TSTA
TSTB

 

逻辑运算指令
与运算
ANDA #$00;将A的内容清0
ANDB $2000;将B的内容与$2000地址内容相与
ANDCC #$00;将CCR清0


异或运算
EORA $80;将A与80地址的数据异或
EORB


或运算
ORAA $80;将A与$80地址的内容或运算 结果放回B
ORAB $80;将B与80内容或运算 结果放回B
ORCC $80;

 

清零,求补,取反指令
CLC;清零CCR中的C位
CLI;清零CCR中的I位
CLV;清零CCR中的V位
CLR $80;将80地址内容清0
CLRA;清寄存器A
CLRB;清寄存器B

COM $80;FF-80中的内容放回到80内存单元中
COMA;FF-A=A
COMB;FF-B=B

 

乘法指令:
LDD #300;
LDY #500;
EMUL;结果存在Y:D中

LDD #300;
LDY #-500;
EMULS;结果存于Y:D中 -150000

LDDA #125
LDAB #80
MUL;AXB结果放到A:B中


除法指令
EDIV;(Y:D)/X->Y;余数->D
EDIVS;带符号
FDIV;D/X->X;余数->D

 

位操作:
BCLR $2000,#$81;将$2000地址的最高位和最低位清0
BSET $55,#$80;将内存55单元的最高位置1

 

移位循环指令:
移动一位,空位补0,进位进入C


逻辑移位:
LSL
LSLA
LSLB
LSLD
LSR
LSRA
LSRB
LSRD


算术移位:
ASL
ASLA
ASLB
ASLD
ASR
ASRA
ASRB


循环左移指令:
ROL
ROLA
ROLB
ROR
RORA
RORB

 

最大值最小值指令:
MAXA $1080;比较A与$1080的内容,将大的放到A中

 

转移指令:

BRA;总转移
BRN;不转移
BCC;当C=0时跳转
BCS;当C=1时跳转
BEQ; 当Z=1时跳转
BNE; 当Z=0时跳转
BMI; 当N=1时跳转
BPL; 当N=0时跳转
BVC; 当V=0时跳转
BVS; 当V=1时跳转

 

长转移指令:指令前加L

循环控制指令:
DBEQ B ,LOOP1;B减1,如果为0则跳转到LOOP1处执行
DBNE SP,LOOP2;SP减1,如果不为0则转到LOOP2处
IBEQ X,LOOP3;X加1,如果为0则跳转到LOOP3执行
IBNE Y,LOOP4;Y加1,如果不为0则跳转到LOOP4执行
TBEQ D,LOOP5;如果D=0,则跳转到LOOP5执行
TBNE A,LOOP6;如果A不为0,则跳转到LOOP6处执行

 

跳转,子程序调用指令:
JMP Y;调到Y指向的地址去执行

 

中断指令
SWI;软中断指令
TRAP;陷阱指令
RTI;中断返回指令

 

堆栈操作指令:
PSHA;将A存放到堆栈中
PSHB;将B存放到堆栈中
PSHC;PUSH CCR
PSHD;push D
PSHX
PSHY

PULA;出栈到A
PULB
PULC
PULD
PULX
PULY

 

其他指令:
STOP;停止单片机
WAI;等待中断
NOP;延时

 

汇编语言程序设计:
十六进制$
八进制@
二进制数%
字符串常量;单引号或者双引号


汇编伪指令:
ORG $4000;通知编译器从4000地址开始定位下面的代码
EQU ;表达式与数值等价
Count SET 1;Count设置成1

Somedata: DC.B 01;从Somedata开始的数据单元的内容依次为$05
String: DC.B $A,$B;从String开始的数据单元内容依次为$0A,$0B

String: FCC 'ABCD';从string开始的数据单元依次为ABCD的ASCII码

Label1:DCB.B 10,$00;将Label1开始的10个字节全部清零
Label2:DCB.L 10,$ffffffff;将Label2开始的10个4字节空间全部初始化为$ffffffff

 

ABSENTRY entry;定义程序入口点

0 0
原创粉丝点击