好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

指令介绍.ppt

60页
  • 卖家[上传人]:206****923
  • 文档编号:51672815
  • 上传时间:2018-08-15
  • 文档格式:PPT
  • 文档大小:373KB
  • / 60 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • SUNPLUS 16SUNPLUS 16位位 u’nSPu’nSP指令介绍指令介绍凌阳大学计划部凌阳大学计划部1一、 16位 u’nSP 内核架构 二、指令系统三、’nSP™汇编伪指令2一、 16位 u’nSP 内核架构 316位 u’nSP 内核架构 4Ø 16位数据总线/22位地址总线 a: 4M 字寻址空间 b: 64页,每页64K字 ’nSP™存储器地址映射5Ø 13个16位寄存器 a: 4个通用寄存器(R1-R4) b: 4个二级寄存器(SR1-SR4) c: 1个基址寄存器(BP) d : 4个系统寄存器SP:堆栈指针SR:状态寄存器PC:程序指针FR:标志寄存器Ø SECBANK ON/OFF6寄存器号7状态寄存器Ø CS:代码段 Ø DS:数据段 Ø 条件标志N:负数标志Z:零标志S:符号位C:进位标志8标志寄存器Ø AQ:DIVS/DIVQ 执行的条件判别标志(0) Ø BNK:第二寄存器组使用标志(0) [Primary (0) / Secondary (1)] Ø FRA:FRACTION模式(0) [Off (0) / On (1)] Ø FIR:FIR_MOVE 模式(0) [On (0) / Off (1)] Ø SFT BUF:移位缓冲器或者是FIR运算的保护位(0000) Ø F:快速中断使能标志(0) Ø I:普通中断使能标志(0) Ø INE:中断嵌套模式(0) [IRQNEST ON(1)/IRQNEST OFF(0)] Ø IRQ PRI:普通中断优先级寄存(1000)IRQ0>IRQ1>IRQ2>IRQ3>IRQ4>IRQ5>IRQ6>IRQ79Ø 10个中断源a: 1个快速中断b: 8个一般中断c: 1个软件中断支持中断嵌套模式IRQNEST ON/OFF在中断嵌套模式被启用时,如果在中断过程有更高优先级 的中断发生,将发生中断嵌套。

      10二、指令系统11Ø 6种寻址方式 a: 立即数寻址:操作数以立即数的形式出现例:R1 = 0x28; b:存储器直接寻址:通过存储器地址来访问存储器中的数据 例:[0x30] = R4; R4 = [0X30]; c: 寄存器寻址:操作数在寄存器中例: R3 = R1 d: 寄存器间接寻址:操作数的地址由寄存器给出例: R2 = [R3]; e: 变址寻址:操作数的地址由基址和偏移量(6位)共同给出例: R3 = [BP + 0x08]; f: 多重间接寻址(入栈/出栈):可以将多个寄存器的值一次压入堆栈,或从堆栈中弹出 例:PUSH R1,R3 TO [SP]12Ø 16X16乘法二个寄存器的数据相乘,结果送到MR(R4,R3)如果 Fraction mode 是使能的,这个结果会向左移一位 MR = Rd * Rs;// 默认情况下为有符号乘有符号 MR = Rd * Rs,uu;// 无符号乘无符号 MR = Rd * Rs, ss; // 有符号乘有符号 MR = Rd * Rs, us;// Rd为无符号数 , Rs 为有符号数. 第一个寄存器总是无符//号的,第二个寄存器是有符号的13Ø 除法( DIVS、DIVQ)除法运算可以是有符号或者是无符号的,但分子分母必需是同类 型的数据。

      请将32位的被除数放到MR(R4,R3)中,16位的除 数放到R2中,并清掉AQ标志,然后就可以进行除法运算对于有符号除法,首先应执行DIVS一次,从而得到商的符号位, 然后多次执行DIVQ得到商;对于无符号除法,通过多次执行DIVQ得到商 运算结果的商在R3中 14Ø 位操作 TEST:位测试SETB: 位置位CLRB: 位清除INVB: 位取反例子: SETB R1, 15 // R1的第15位置1 CLRB R1, 15 // R1的第15位清除 R5 = 1 INVB R1, R5// R5 =1, 因此对R1第1位取反 TEST [R1], 8 // 只改变”Z”标志 15Ø 移位操作—Ⅰ ASR:算术右移LSL: 逻辑左移LSR:逻辑右移 ROL:循环左移ROR:循环右移用法:(1)Rd = Rd shift-op Rs (Rs值范围:0——15)(2)Rd = Rd shift-op Imm (立即数Imm值范围:0——4)例: R1 = R1 ASR 3R3 = R3 ROL R216Ø 移位操作—ⅡASR-OR:算术右移-或 LSL-OR:逻辑左移-或 LSR-OR:逻辑右移-或 用法: (1)MR |= R4 shift-op Rs ( Rs值范围:0——15 ) (2)Rd |= Rd shift-op Imm (立即数Imm值范围:0——4)例: R2 =4R4 = 0x1234 R3 = 0x5678 //MR=0x12345678 R3 = R3 LSR R2 MR |= R4 LSR R2 //MR=0x0123456717Ø 利用MR寄存器执行长跳转指令调用以MR寄存器内容为入口地址的程序.F_Sub: r2 = 0x5555r3 = 0x5555mr = r2*r3 //r2乘r3 retf_main: r1 = 0xefff;r2 = 0x1713; //调用F_Sub子程序r3 = OFFSET F_Subr4 = SEG F_Sub call mr L_MainLoop: jmp L_ MainLoop 18Ø CPU内部标志访问指令FR = Rs ;Rs = FR ; 19Ø 空操作NOP20Ø SECBANK ON/OFF 切换二级寄存器.例 : SECBANK ON R1 = 0x1234 // 0x1234 放入SR1, 而不是 R1 R2 = 0x5678 // 0x5678放入SR2,而不是 R2SECBANK OFF R1 = 0x0F0F // 0x0F0F放入R1, 而不是SR1 R2 = 0x0505 // 0x0505放入R2,而不是 SR221Ø Fraction ON/OFF如果 Fraction mode 是使能的,这个结果会向左移 一位 例 : R1 = 0x0002 R2 = 0x2244FRACTION OFF MR = R1 * R2// MR = 0x00004488FRACTION ON MR = R1 * R2// MR = 0x0000891022Ø FIR_MOV ON/OFF 使能或禁止在FIR操作时的数据自动搬移 。

      例 : .IRAM .VARNO_1=0x0001, NO_2=0x0002,NO_3=0x0003, NO_4=0x0004 .VARNO_5=0x0005, NO_6=0x0006,NO_7, NO_8.CODE .PUBLIC _main _main: FIR_MOV ON //使能FIR操作数据自动搬移 r1 =NO_2 //将地址“NO_2” 赋给‘r1’ r2 =NO_5 //将地址“NO_5” 赋给‘r2 Loop_Muls: mr = [r1]*[r2],us,2 //操作结果存入r4: r3中 [NO_7] =r3 //将结果(低16位)读入NO_7中 [NO_8] = r4 //将结果(高16位)读入NO_8中 nop jmp Loop_Muls 23它不会被编译,而仅被用来控制汇编器的操作 伪指令可以写在程序文件中的任意位置,但在其 前面必须用一个小圆点引导 三、’nSP™汇编伪指令2425【语法格式】 .DEFINE variable [value][,…]【功能描述】定义常量符号 【应用解释】给常量符号所赋之值既可是一已定义过的常量符号,亦可是 一表达式。

      切忌符号超前引用,即如果赋值引用的符号不是在引用前 定义的,则会出现“非法超前引用”的错误举 例】 .DEFINE BODY 1; .DEFINEIO_PORT0x7016;.IFDEF BODY; R1=0xFFFF; [IO_PORT] = R1; .ENDIF26【语法格式】 .PUBLIC label[,label][,…] 【功能描述】声明将被引用在其它文件中的全局标号 【应用解释】本伪指令用来在文件中声明将被引用在外部文件中的全局标号 故在外部文件中用伪指令EXTERNAL所声明的标号必须是用PUBLIC伪指 令声明过的类似地,当要声明多个全局标号时,要用逗号(,)将每一标 号分开 【举 例】 .PUBLICsym1 //声明要引用在其它文件中的全局标号.PUBLIC sym1,sym2 //声明多个全局标号需用逗号将每一//标号分开,空格会被忽略27【语法格式】 .EXTERNALlabel[,label][,.]【功能描述】在某文件中声明已在其它文件里定义过的标号、变量或函数 【应用解释】这是在已定义过某些标号、变量或函数的文件之外的文件里,要引 用这些标号、变量或函数之前需对其进行声明时所要用到的伪指令。

      以此避免 标号、变量或函数在不同的文件里被引用时容易发生的重复定义错误如果同 时要声明多个这样的外部标号,需用逗号(,)将每一个标号分开本伪指令后 禁止将两个或多个标号进行算术或逻辑操作 【举 例】 .EXTERNAL num_var1; //声明在其它文件中定义过的标号.EXTERNAL int SACM_A2000_Initial(); //声明在其它文件中定义过的函数28【语法格式】 .RAM 【功能描述】定义常量符号 【应用解释】RAM段用来存放无初始值的变量RAM段不能跨bank链接,且 在链接时所有与其同名或同属性的各段都会被合并在一起而被定位在RAM 中. 【举 例】 .RAM start:.DW ? //申请一个整型数据单元 .VAR num , max; //定义变量num、max 29【语法格式】 .SRAM 【功能描述】切换定义预定义段SRAM 【应用解释】SRAM段的性质基本与RAM段相同区别在于链接时它只能在 RAM中占有前面64(0~63)个字的数据单元 【举 例】 .SRAM start:.DW ? //申请一个16位整型数据单元 .VAR sum,name //定义变量sum、name 30【语法格式】 .IRAM【功能描述】切换定义预定义段IRAM 【应用解释】IRAM段用来存放具有初始值的变量。

      此段亦不可跨bank链接, 且在链接时所有与其同名或同属性的各段都会被合并在一起,将会同时被 分配空间于ROM及RAM中 【举 例】 .IRAM .VSR sum=0x0001 //定义变量,并赋初始值为0x0001 Storage:.DW0x20 //在申请的整型数据单元中存放存0x20 31【语法格式】 .ISRAM【功能描述】切换定义预定义段ISRAM 【应用解释】ISRAM段与IRAM段的性质基本相同区别是ISRAM段在RAM 中只能被分配在前面64(0~63)个字的数据单元 【举 例】 .ISRAM Storage: .DW0x20 //在申请的整型数据单元中存放存0x20 .VAR sum=0x0020 //定义变量,并赋初始值为0x0020 32【语法格式】 .ORAM 【功能描述】切换定义预定义段ORAM 【应用。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.