XGate 汇编指令集
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CSL RD, RS
CSR RD, RS
LSL RD, RS
LSR RD, RS ROL RD, RS ROR RD, RS
转移指令
BCC REL9 Branch if Carry Clear 若C = 0,则转移,此时PC + $0002 + (REL9 << 1) ⇒PC REL9 Branch if Carry Set 若C = 1,则转移 REL9 Branch if Equal 若Z = 1,则转移 REL9 Branch if Not Equal 若Z = 0,则转移 REL9 Branch if Minus 若N = 1,则转移 REL9 Branch if Plus 若N = 0,则转移 REL9 Branch if overflow V Clear 若V = 0,则转移 REL9 Branch if V Set 若V = 1,则转移 REL9 Branch if Higher 若C | Z = 0,则转移 REL9 Branch if Lower or Same 若C| Z = 1,则转移 REL9 Branch if GE >= 若N V = 0,则转移 =异或 REL9 Branch if Greater Than 若Z|(N V) = 0,则转移 REL9 Branch if Less than or Equal 若Z|(N V) = 1,则转移 REL9 Branch if Less Than 若N V = 1,则转移 REL10 Branch Always 绝对转移
操作数为3个寄存器的逻辑运算指令
AND RD, RS1, RS2 Logical And
逻辑与 OR RD, RS1, RS2 RD=RS1 与 RS2
Logical Or 逻辑或 RD= RS1 或 RS2
XNOR RD, RS1, RS2
Logical eX clusive NOR 逻辑异或 RD= RS1 异或 RS2
特殊数据传送指令
读取条件码寄存器CCR的值 TFR RD,CCR Transfer CCR to RD 写CCR寄存器 TFR CCR,RS
Transfer RS to CCR
读取当前程序计数器PC的值 TFR RD,PC Transfer PC to RD
立即数算术运算指令
LDL RD, #IMM8 LDH RD, #IMM8 Load Low RD Load High RD 给RD低字节加载8位立即数 给RD高字节加载8位立即数 RD低字节加上8位立即数 RD高字节加上8位立即数 RD低字节减去8位立即数 RD高字节减去8位立即数
CPU 指令集
单寄存器指令
SEX RD Sign Extend Byte to Word 把8位有符号数扩展为16位有符号数 Calculate Parity 计算奇偶校验位,奇数时C置位
PAR RD
JAL RD Jamp AndLink 调用以RD为入口地址的子程序,返回地址在RD中 SIF RS Set Interrupt Flag 通过设中断标志触发某个中断, RS低字节中的低7位存放的是中断的通道号
相对转移寻址
偏移量是9位: BCC REL9 BEQ REL9 ;PC = PC + 2 + (REL9 << 1) ;PC = PC + 2 + (REL9 << 1)
偏移量是10位:
BRA REL10 ;PC = PC + 2 + (REL10 << 1)
由于地址是16位对齐的, 9位偏移量的转移范围是±512B, 10位偏移量的转移范围是±1KB。
用寄存器表示移位位数的指令
FFO RD, RS ASR RD, RS Bit Field Find First One 找出RS中第一个1的位置并写入RD,若RS为0,C置位 Asthmatic shift Right 将RD算术右移若干位,位数在RS中 Logical Shift Left with Carry 含进位借位位的逻辑左移 Logical Shift Right with Carry 含进位借位位的逻辑右移 Logical Shit Left 将RD逻辑左移若干位,位数在RS中 Logical Shit Right 将RD逻辑右移若干位,位数在RS中 Rotate shift left 将RD循环左移若干位,位数在RS中 Rotate Shit Right 将RD循环右移若干位,位数在RS中
单、双、三寄存器寻址
单寄存器寻址:
JAL R1 SIF R2 ;Jamp And Link, PC = R1, R1 = PC+2,跳转指令 ;触发R2低字节中存放的中断通道号对应的中断
双寄存器寻址:
LSL R4,R5 LSR R4,R5 MOVE RD,RS ; R4 = R4 << R5 ; R4 = R4 >> R5 ; RD=RS ; R5 = R6 + R7 + Carry ; R5 = R6 - R7
用立即数表示移位位数的指令
Bit Field Find First One 找出RS中左边第一个1的位置 并存入RD,RS为0时,CCR寄存器中的C位被置 位,从而区别RS为0与RS的第0位为1两种情况 ASR RD, #IMM4 Arithmetic Shift Right 算术右移RD,符号位不变,移动位数为4位立即数 LSL RD, #IMM4 Logical Shift Left 逻辑左移RD,高位进入C,移动位数为4位立即数 LSR RD, #IMM4 Logical Shift Right 逻辑右移RD,高位进入C,移动位数为4位立即数 ROL RD, #IMM4 Logical Shift Left 循环逻辑左移RD,移动位数用4位立即数表示 ROR RD, #IMM4 Logical Shift Right 循环逻辑右移RD,移动位数用4位立即数表示 CSL RD, #IMM4 Logical Shift Left with Carry 循环左移RD,高位进入C,移动位数为4位立即数 CSR RD, #IMM4 Logical Shift Right with Carry 循环右移RD,高位进入C,移动位数为4位立即数 BFFO RD, RS
寄存器与立即数逻辑运算指令
ANDL RD, #IMM8 AND Low byte RD RD低字节= RD低字节 与 8位立即数 ANDH RD, #IMM8 AND High byte RD RD高字节= RD高字节 与 8位立即数 ORL RD, #IMM8 OR Low bit RD RD低字节= RD低字节 或 8位立即数 ORH RD, #IMM8 OR High bit RD RD高字节= RD高字节 或 8位立即数 XNORL RD, #IMM8 eXclusive NOR Low RD RD低字节= RD低字节 异或 8位立即数 XNORH RD, #IMM8 eXclusive NOR High RD RD高字节= RD高字节 异或 8位立即数
BCS BEQ BNE BMI BPL BVC BVS BHI BLS BGE BGT BLE BLT BRA
空操作
向S12X叫中断
XGate 寻址方式——立即数寻址
4位: LSL R4,#1 ;R4 = R4 << 1,R4寄存器左移1位 LSR R4,#3 ;R4 = R4 >> 3,R4寄存器右移3位 8位: ADDL R1,#1 ;把8位立即数加到R1寄存器 SUBL R2,#2 ;从R2寄存器减去8位立即数 LDH R3,#3 ;把8位立即数加载到R3寄存器的高字节上 CMPL R4,#4 ;对R4寄存器的低字节和8位立即数进行比较 16位: LDW R4,#$1234 ;会被拆分成两条指令:LDL R4,#$34; LDH R4,#$12 ADD R4,#$5678 ;会被拆分成两条指令:ADDL R4,#$78; ADDH R4,#$56
三寄存器寻址:
ADC R5,R6,R7 SUB R5,R6,R7
以立即数为偏移量的寄存器间接寻址
把R1+offset地址处的8位数值写入到R4寄存器的低字节中, R4的高字节被清零: LDB R4,(R1,#offset) ;
把R4寄存器中的16位数值写入到R1+offset地址处: STW R4,(R1,#offset) ;
ADDL RD, #IMM8 Add Low RD ADDH RD, #IMM8 Add High RD SUBL RD, #IMM8 Subtract Low RD SUBH RD, #IMM8 Subtract High RD
CMPL RS, #IMM8 Compare RS Low with Immediate 比较RS低字节和立即数(RS.L-立即数) CPCH RS, #IMM8 Compare RS with Carry High 比较RS高字节和立即数(RS.H-立即数)
偏移量在寄存器中的寄存器间接寻址
目标寄存器是R4,源地址在R1中,偏移量在R2中, 以 R1+R2 找到相关存储器的地址,取其值写入目 的寄存器R4:
LDB STW R4,(R1,R2) R4,(R1,R2)
带寄存器偏移量和自动加减的寄存器 间接寻址
目标寄存器是R4,源地址是R1,偏移量在R2中,执行完指令 后R2自动加1或2: LDB R4,(R1,R2+) STW R4,(R1,R2+) 执行指令前R2先减1或2: LDB R4,(R1,-R2) STW R4,(R1,-R2)
XGate 汇编指令集
清华Freescale单片机应用开发研究中心
XGate C来自百度文库U结构
XGate 寻址方式——隐含寻址
BRK RTS NOP SIF ;Break
进入BDM调试方式
;Return to Scheduler 结束当前线程,回空闲状态 ;No OPeration ;Set Interrupt Flag
寄存器对存储器读写的指令
RB寄存器用来存放存储器的基地址,例如:
LDW RD, (RB, #OFFS5) => RD; STB RS, (RB, #OFFS5) Load Word from Mem. to RD M[RB, #OFFS5] Store Byte from RS to Mem. RS.L => M[RB, #OFFS5] LDB RD, (RB, RI) Load Byte from Mem to RD M[RB, RI] => RD.L; $00 => RD.H; STW RS, (RB, RI) Store Word from RS to Mem. RS => M[RB, RI] LDW RD, (RB, RI+) Load word from Mem to RD M[RB, RI] => RD; RI+2 => RI STB RS, (RB, RI+) Store Byte from RS to Memory RS.L => M[RB, RI] ; RI+1 => RI LDB RD, (RB, –RI) Load Byte from memory to RD RI-1 => RI; M[RB, RI] => RD.L; $00 => RD.H; LDW RD, (RB, –RI) Load Word from memory to RD RI-2 => R I; M[RB, RI] => RD STB RS, (RB, –RI) Store Byte from RS to Memory RI-1 => RI; RS.L => M[RB, RI]
操作数为3个寄存器的算术运算指令
SUB RD, RS1, RS2 SBC RD, RS1, RS2 ADD RD, RS1, RS2 ADC RD, RS1, RS2 Subtract 减法运算 RD=RS1-RS2 Subtract with Carry 带借位减法 RD=RS1-RS2-C Add 加法运算 RD=RS1+RS2 Add with Carry 带进位加法 RD=RS1+RS2+C