汇编作业二:堆栈操作(push,pop)以及arm数据处理指令 您所在的位置:网站首页 pop指令是否影响内存中的值 汇编作业二:堆栈操作(push,pop)以及arm数据处理指令

汇编作业二:堆栈操作(push,pop)以及arm数据处理指令

2024-03-09 21:48| 来源: 网络整理| 查看: 265

堆栈操作

在数据结构的学习中我们已经栈是先进后出的,汇编实现方面其实是通过将寄存器中的值存储(STR)到memory中来达到push的效果,而pop则是从memory中加载(LDR)值放到寄存器中。 堆栈根据栈顶指针指向的空间是否放值(空/满),以及扩张方向(递增/递减)可分为4种类型:空递增(EA),空递减(ED),满递增(FA),满递减(FD)。ARM用的是FD类型。

FD: 满递减 [sp] POP x [sp] -> x sp++ POP R1 ;单寄存器pop POP {R1-R3} ;多寄存器pop 代码:

在这里插入图片描述

调式过程截图:

单步运行到前三条MOV指令结束: 在这里插入图片描述 PUSH后:可见从地址0x2000021C处存储了 R0,R1,R2D的值。并且由满递减方式可以观察到存储顺序是R2,R1,R0在这里插入图片描述 继续运行到POP之前:R0R1R2的值改变。 在这里插入图片描述 执行POP指令:R0R1R2的值回到最开始的三个MOV结果 在这里插入图片描述

数据处理指令 ARM指令的基本格式 {}{S} , {, } 相关指令 数据传送指令

MOV{cond}{S} Rd, operand2 ; Rd R4: 在这里插入图片描述 再往后单步运行到最后,观察到R6,R8的值更新了,佐证了R3>R4,且由其值可知逻辑运算是按位来的 在这里插入图片描述

总结

感觉学汇编的时候更能理解机器的视角,对数据的处理主要是内存与寄存器之间的转移(加载/存储),以及在进行算数/逻辑运算的时候看到的都是二进制的01,比较指令其实也是在进行算术运算或逻辑运算。这些简单的运算加上堆栈操作,函数的效果就达到了。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有