欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]使用VMP指令模拟ARM条件跳转

[原创]使用VMP指令模拟ARM条件跳转

0.目的:

在不直接使用BEQ BNE BLE... 仅使用NAND ADD... 的前提下,

模拟CPU对BXX条件码的判断,选择出跳转的分支地址。




1.ARM条件码判断原理:

决定指令是否执行的关键,是判断CPSR/FLAG寄存器的某BIT位为0还是为1。

[图片:760871_VZKEUYFPS2VMS5R.png] 

以一段 ARM BLT指令为例:

---------------------------------------------------

         ...

.text:000007BC CMP R2, R3

.text:000007C0 BLT loc_798

.text:000007C4 LDR R3, =13688

---------------------------------------------------

(1)当CPSR的N位==V位,BLT loc_798不会执行,

程序将会执行到.text:000007C4 LDR R3, =13688。(简称分支A)


(2)当CPSR的N位!=V位,BLT loc_798将会执行,

程序将会跳转到偏移LOC_798处。(简称分支B)



2.模拟CPU实现BLT:

简单描述模拟的过程就是:

用ADD和AND,来手动计算出CPSR的N位和V位,

最后计算N-V根据结果,选择一个出一个分支地址。


详细过程:

(1)使用AND(CPSR,掩码)将CPSR中除N和V以外的比特位清零。

#define MASK_N		0x80000000			// 掩码

#define MASK_V		0x10000000			// 掩码

#define SHR_N		31-2			 	// 掩码需要右移的值(-2是因为得到数值4)

#define SHR_V		28-2		        // 掩码需要右移的值(-2是因为得到数值4)

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功