3-1-指令系统-CPU寄存器
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
H:X使用总结
指令类型 指令名称 作用 LDX/STX 与存储器进行数据交换 HX/X 与别人的数 PULX/PSHX 与堆栈进行数据交换 据交换 TAX/TXA 与A进行数据交换 TSX/TXS 与SP进行数据交换 LDHX/STHX HX整体与存储器进行数据交换 ASLX/ASRX 算术左、右移位 折腾X LSLX/LSRX 逻辑左、右移位 被认为是 ALU 操 ROLX/RORX 循环左、右移位 作的子集 CLRX 清0 16位形式 LDHX #0 INCX 加1 AIX #1 DECX 减1 AIX #-1 COMX、NEGX 求反、求补运算 TSTX 测试是否为0,影响标志位 CPHX #0 IX2 最本质作用 变址寻址方式使用H:X 作为16 位的基本 参考点,且允许有16 位偏移量、8 位偏 IX1 移量和无偏移量的指令。 IX A*X=XA MUL 乘法 H A/X = A…….H DIV 除法 特别注意点 中断时H没有自动进栈,需要手工压栈与出栈
SP
这个16 位地址指针寄存器用于自动维护CPU 的一个后进先 出(LIFO)堆栈。当CPU 执行绝对转移调用(JSR)或相对转移调用 (BSR)指令时,它会自动保存返回地址到堆栈中。当子程序最后 执行返回指令(RTS)时,该返回地址会自动从堆栈中恢复,并由 此继续执行先前暂停的地方,在那里子程序被调用。SP 是一个 满16 位寄存器,所以堆栈可以寻址存储映射区的任何地方,且 它可取不超过芯片可用RAM 空间大小的任意大小。 堆栈指针总是指向堆栈中下一个可用位置。当一个数值要 进栈时,它会被写到SP 指向的地址中,随后SP 会自动减少而 指向下一个可用位置。当一个数值要出栈时,SP 首先会自增以 指向堆栈中最近进栈的数据,然后从刚被SP 指向的地址中读出 数据。需要注意的是SP 指向的数据,在出栈的过程中不会被改 变。如果SP 指向当前内存的下一个位置,即指向之前最近存储 的数据,当新的数据进栈时,会覆盖该位置的数据。如果在复位 初始化期间,堆栈的RAM 区被清空,那么堆栈扩充时,可以通 过观察哪些存储单元仍然为空来确定最大深度。
▪快速的8位乘8位和16位除以 8位指令
▪STOP和WAIT指令唤醒低功耗运行状态
CPU寄存器
CPU寄存器
A
这个通用的8 位寄存器是HCS08 主要的数据寄存器。数据可以通过LDA 指令从存储器或 通过PULA 指令从堆栈读入到A。数据通过存数指令STA 存入存储器中或通过堆栈指令 PSHA 将A 进栈到累加器A。多种寻址方式给存储器的存取指令带来了更大的灵活性。传 送指令可以将数据从累加器A 传送到寄存器X 中(TAX),或者从寄存器X 传送到累加器A 中(TXA),或者从累加器A 传送到CCR 中(TAP),或者从CCR 传送到累加器A 中(TPA)。 TAP 和TPA 中的P 表示处理机状态。A 半交换指令(NSA)使A 中数据的高四位和低四位对 调。 通常对A 中的值通过ADD、SUB、ASLA、RORA、INCA、DECA、AND、ORA、 EOR 等指令执行算术、移位和逻辑操作。其中有些指令如INCA 和ASLA,对A 中的内容 进行操作后放回A 中。另外一种情况如ADD 和AND,它们有两个操作数:一个操作数在A 中,另一个操作数在存储器中。算术和逻辑操作的结果都是替代累加器内的值。 乘法和除法指令使用A 作为一个操作数,并且保存部分值到A 中。MUL 指令将X 和A 中的无符号数相乘并将16 位结果的高低字节分别存储在X 和A 中。DIV 指令将H、A 中的 16 位无符号数除以X 中8 位无符号数,再将商储存在A 中,余数放入H 中。 在进行两个BCD 码数的ADD 或ADC 操作时,需执行十进制调整指令DAA 来纠正A 中的值,使其变为有效的BCD 码2 位数。关于指令的详细解释请查阅BCD 算术运算。 显然,累加器是个非常忙的寄存器,因此如果能够避免使用累加器是很有益的。例 如,从存储器到存储器的传送指令(MOV)就很有用。DBNZ 也很有用,因为它允许循环计 数器工作在内存变量中而不是在累加器中。X 寄存器在许多情况下被当作另一个通用的8 位数据寄存器。有些算术运算操作如清零、加、减、取反、求补和移位也可以使用X 寄存 器。
Load、store、push 和pull 指令可用于X 中,其寻址方式与用于A 中的变址寻址相同。在16 位H:X 寄存器中也有取数和存数指令,但 没有提供多种不同的寻址方式。进栈(PSHH)和出栈(PULH)指令可 用于H 中,并且这两个简单的指令可将16 位变址寄存器(H:X)进栈 和出栈。
SP
为了与早期的M08HC05 系列兼容,在复位时SP 的初值为 $00FF。但HCS08 应用程序几乎不会把堆栈顶部设到$00FF, 因为从输入/输出(I/O)寄存器和控制寄存器的末端到$00FF 的 RAM 区域,对于经常被访问的变量很有价值。直接寻址方式可 以访问内存从$0000 到$00FF 的区域,这比访问其他内存空间 要快。 为了与M08HC05 系列兼容,复位堆栈指针(RSP)指令迫使 SP 的低地址向$FF 逼近。在M68HC05 中,复位后SP 的值为 $00FF。RSP 极少用在HCS08 中,因为它不能改变SP 的高地 址,而且此时,它没有必要使SP 的值复位。 在新的HCS08 程序中,一般初始化SP 的值指向芯片RAM 的最高地址。一般情况下,下面的两个指令序列被包含进复位初 始化的头几个指令中。
M/A-COM GaAs RF Switch
SW-438
Freescale 8位单片机指令系统
HC08 CPU有5个寄存器、16种寻址方式、140条基 本指令(加上寻址方式可形成270条具体指令),这是学习 08汇编语言的基础。 08汇编语言是学习08系列MCU的重要基础之一,学 好汇编语言有助于进行底层编程、有助于理解编程结构、 有利于理解单片机内部结构。 基本要领: 1〉掌握CPU内部5个寄存器的使用方法; 2〉理解16种寻址方式; 3〉记住常用指令; 4〉进行编程实践
H:X
为了与早期的M08HC05 系列兼容,中断不在堆栈中保存H 寄 存器。一种好的做法是在中断服务例程中将PSHH 指令作为第一个 指令(保护H)并且在程序结束RTI 之前加上PULH 指令作为最后一个 指令(恢复H)。可以不要这些指令,如果确信H 已经不在中断服务例 程中被用到,并且确信没有AIX 指令或没有变址寻址方式中的自增 指令,因为这些指令能够使H 发生改变。如果能容许两个字节的额 外程序空间、一个在堆栈中额外的临时空间和运行期间五个总线周 期的开销,那么更安全的做法就是把PSHH 和PULH 包含进去作为 一种习惯。 乘除指令把X 作为操作数,且MUL 将一部分乘积存储在X 中 。MUL 将无符号数A 和X 相乘,并把16 位结果存于X:A 中。DIV 指 令将H、A 中16 位无符号数与X 中的8 位无符号数相除,商放入A 中,余数放入H 中。
当请求中断时,CPU 将寄存器的当前内容保存在堆栈中, 在完成中断服务例程后处理器将它们恢复以继续执行之前的程序。 响应中断时,保存到堆栈中的CPU 寄存器的顺序见图6-2。在中 断前,SP 指向堆栈中的下一个可用位置。每个数据通过SP 保 存到堆栈中指定位置并且SP 会自减以指向堆栈中的下一个可用 位置。结束中断例程的RTI 指令以相反的顺序出栈来恢复CPU 寄存器。关于中断的详细描述请查阅6.4.2 节和5.5 节的中断。 为了与早期的M08HC05 系列兼容,中断在堆栈中没有保存 H 寄存器。好的方法是在中断服务例程中将PSHH 指令作为开头 指令并且在服务程序结束RTI 之前将PULH 指令(从H 中恢复)作 为最后一条指令。 SP 与立即数加法指令(AIS)用于为局部变量在堆栈中分配空 间。该技术在C 语言中很普通,在汇编语言中也很有用。下面的 代码例子会示范怎样在堆栈中为局部变量分配和释放空间。关于 堆栈技术的详细描述请查阅6.5.6 的堆栈相关指令。
A
指令类型 指令名称 LDA/STA A与别人的数据交换 PULA/PSHA TAX/TXA TPA/TAP NSA 折腾A ASLA 大部分X也行 RORA INCA DECA DAA ADD A与存储器的数据进行 SUB 运算后放回A中 AND ORA EOR A*X=XA MUL H A/X = A……..H DIV 作用 与存储器进行数据交换 与堆栈进行数据交换 与X进行数据交换 与CCR进行数据交换 将A中数据的高四位和低四位对调 算术左移位 循环右移位 加1 减1 十进制调整 加 减 逻辑与 逻辑或 逻辑异或 乘法 除法
▪目标代码完全向上兼容M68HC05和M68HC08家族
▪所有寄存器和存储器映射在单块64 Kbyte地址空间 ▪16位堆栈指针SP(64 Kbyte地址空间中的任意大小堆栈)
▪16位索引寄存器(H:X)的强大的寻址索引模式
▪多种寻址模式 ▪8位累加器(A) ▪支持存储器到存储器的数据传送 ▪高效的位操作指令
H:X
有时堆栈指针值需要被传送到HX 寄存器中,因此H:X 在堆栈中能当作信息 指针使用。堆栈指针总是指向堆栈中的下一个可用的位置,但是一般情况下变址 寄存器应该直接指向数据。因此,堆栈的16 位值是通过TSX 指令传送到H:X 中, 并加一。因为这个调整,TSX 执行后HX 指向堆栈数据的最后一个字节。当使用 TXS 指令时求补调整就会发生(通过使用TXS 这个值会自减1)。可以认为,当16 位地址在SP 中,它指向下一个有用堆栈位置,若在H:X 中,则它指向最后一个 字节信息。
指令系统学习方法
汇编指令的一般格式 操作码
寻找 寻址方式
标号:操作码 操作数 //注释 CPU寄存器 内存单元(sfr、地址) 指针 常数 标号、特殊符号 伪运算符构成的表达式
操作数
操作码115个
ASL BHS
ASLA ASLX BLO
一共120个操作码
指令系统基本要领
CPU寄存器 寻址模式 指令系统及其分类学习 编程练习 RAM
WIRELESS DIGITAL FULL-DUPLEX VOICE TRANSCEIVER 无线数字全双工语音收发器
Twk.baidu.comA4861 射频切换开关SW-438
RF1020SE模块是采用基于CC1020无线通信芯片的无线 收发一体模块,作为微功率无线模块,直线通信距离可 达600米左右。CC1020具有低电压供电、低电流消耗、 高灵敏度等特点,适合微功率远距离的无线传输领域, 如无线称重等。
A
#opr
CPU
CCR
H:X
SP
HCS08 CPU 简介
HCS08 CPU与M68HC08 CPU的指令系统完全 相同,且目标代码与M68HC08完全兼容。 同时增加了一些指令和增强了寻址模式以 增加C编译器效率,且支持一个新的背景调 试系统,能够代替早期M68HC08微处理器 的监测模式。
HCS08 CPU的特点包括:
H:X
这个16 位的变址寄存器事实上是两个独立的8 位寄存器(H 和X) 的合并。变址寻址方式使用H:X 作为16 位的基本参考点,且允许有 16 位偏移量、8 位偏移量和无偏移量的指令,另外一些变址寻址寄 存器在变址用于存取存储器操作时自动增加到16 位变址寄存器。关 于变址寻址方式的详细描述请查阅变址寻址方式。 8 位X 寄存器(H:X 中的低8 位)也被当作一个通用的数据寄存 器。修改类指令(如ASLX、ASRX、CLRX、COMX、DECX、 INCX、LSLX、LSRX、NEGX、ROLX、RORX 和TSTX)允许能被 累加器所执行的ALU 操作的子集。要注意的是,当要改变整个16位 H:X 变址寄存器时,不要用这些指令,因为这些指令只影响X。下 面的指令序列给出了在X 上的16 位形式的8 位操作实例。
WIRELESS DIGITAL FULL-DUPLEX VOICE TRANSCEIVER 无线数字全双工语音收发器
SW-438
CPU
CC1020
WIRELESS DIGITAL FULL-DUPLEX VOICE TRANSCEIVER 无线数字全双工语音收发器
TPA4861D
Speaker Driver TPA4861D
LDHX TXS
#ramlast+1
;RAM最高地址的下一位 ;HX-1----->SP
SP
一般情况下,RAM 被定义在通用寄存器或者它的头文件 中,在实际应用中被认为是特定的HCS08 芯片。RamLast+1 使 RAM 高端的下一高地址放入H:X 中,因为TXS 指令在传送时会 自动调整它的值(自减1)。调整使得SP 指向堆栈中的下一个可用 的位置。这样,SP 当前指向RAM 的最后位置(最高地址值),并 且将它作为堆栈的第一个位置。当有值进栈时,堆栈指针会向低 地址方向移动。