数字电路设计之ARM的thumb指令中的POP和PUSH指令
来源:互联网 发布:网络修复dns配置错误 编辑:程序博客网 时间:2024/05/21 22:42
我们先来了解一下什么是PUSH和POP指令。低寄存器和可选的LR进栈以及低寄存器和可选的PC出栈。
POP {reglist}
PUSH {reglist,LR}
POP {reglist,PC}
其中:reglist:低寄存器的全部或其子集。括号是指令格式的一部分,它们不代表指令列表可选。列表中至少有1个寄存器。Thumb堆栈是满递减堆栈,堆栈向下增长,且SP指向堆栈的最后入口。寄存器以数字顺序存储在堆栈中。最低数字的寄存器存储在最低地址处。POP {reglist,PC}这条指令引起处理器转移到从堆栈弹出给PC的地址,这通常是从子程序返回,其中LR在子程序开头压进堆栈。这些指令不影响条件码标志。
指令示例:
PUSH {R0,R3,R5}
PUSH {R1,R4-R7}
PUSH {R0,LR}
POP {R2,R5}
指令格式:如果是16位的thumb指令,那么PUSH指令格式就是{7‘b1011010,LR,reglist}
reglist就是八位的,哪一位上为1就说明把那一个号数的通用寄存器PUSH到栈里面。如8’11000000就是把第一和第二个通用寄存器放入栈中。同理,POP就是把相应的寄存器的值出栈赋给通用寄存器还有PC。
PUSH {reglist}POP {reglist}
PUSH {reglist,LR}
POP {reglist,PC}
其中:reglist:低寄存器的全部或其子集。括号是指令格式的一部分,它们不代表指令列表可选。列表中至少有1个寄存器。Thumb堆栈是满递减堆栈,堆栈向下增长,且SP指向堆栈的最后入口。寄存器以数字顺序存储在堆栈中。最低数字的寄存器存储在最低地址处。POP {reglist,PC}这条指令引起处理器转移到从堆栈弹出给PC的地址,这通常是从子程序返回,其中LR在子程序开头压进堆栈。这些指令不影响条件码标志。
指令示例:
PUSH {R0,R3,R5}
PUSH {R1,R4-R7}
PUSH {R0,LR}
POP {R2,R5}
POP {R0-R7,PC}
了解了之后我们就可以用verilog写一个POP和PUSH指令的实现。
首先定义好栈:
reg [15:0]stack[255:0];//这个栈是256个大小为16位的寄存器组成。
reg [15:0]SP; //这就是堆栈指针,指向栈顶
具体实现的时候当每次要POP的时候计算为1的个数,然后SP相应减多少。PUSH的时候就加。这样就实现了POP和PUSH指令。
0 0
- 数字电路设计之ARM的thumb指令中的POP和PUSH指令
- ARM指令和Thumb指令的区别
- ARM指令和Thumb指令的区别
- ARM 指令集 之 PUSH and POP
- ARM和thumb指令的区别
- PUSH、POP和XCHG指令
- 嵌入式开发之 ARM和THUMB指令集
- 把程序从ROM中拷贝到RAM中运行模块的设计【ARM指令和Thumb指令的区分】
- ARM、THUMB指令集
- ARM、THUMB指令集
- ARM、THUMB指令集
- ARM/Thumb指令相关。
- ARM和Thumb的跳转指令B、BL、BX
- 【基于Android的ARM汇编语言系列】之五:ARM指令集与Thumb指令集
- 数据传输指令--push、pop
- push/pop堆栈指令
- ARM指令和THUMB指令有什么区别
- Thumb指令集与ARM指令集的区别
- Viola Jones Face Detector
- NOR FLASH和NAND FLASH各应用在什么产品上
- 一个简单的优化改写
- MySQL性能优化(一)
- apt-get无法下载,然后就是一些网址Not Found解决
- 数字电路设计之ARM的thumb指令中的POP和PUSH指令
- Python UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 33: ordinal not in range
- EditText中如何让光标在某个位置固定
- hdu 1753 大明A+B
- poj 1458 Common Subsequence
- 树链剖分 学习指南
- Fragment 切换
- 程序员面试题目总结--数组(27)【Two Sum 、3Sum、3Sum Closest 、4Sum】
- hdu2768Cat vs. Dog (反建法,最大独立集)