在许多人都知道的C中,堆栈是所有局部变量所在的位置.堆栈是最后输出数据结构的第一个意味着您只能访问最近推送到其上的内容.所以给出以下代码:
int k = 5;
int j = 3;
short int i;
if (k > j) i = 1;
Run Code Online (Sandbox Code Playgroud)
显然这是无用的代码,没有任何实际意义,但我试图绕过一些东西.
对于short int i声明,我假设在堆栈上分配了2个字节.对于4个字节的int k和int j,使用值5和3分配.因此堆栈将如下所示
---------- <- stack pointer
int i
----------
int k = 5
----------
int j = 3
----------
Run Code Online (Sandbox Code Playgroud)
所以对于if语句,你必须弹出int i来获得条件k和j,如果是这样,int我去哪里?如果这是C执行局部变量的方式,这一切似乎都非常耗时且乏味.
那么这实际上C是怎么做的,还是我把它全部搞砸了?
首先,我是从移动设备上写的,所以请原谅拼写错误。
我正在用 C 编写一个汇编程序,我了解如何组装基本的汇编指令和汇编宏,标签真的让我卡住了。
在下面的代码中说,它只是将 A 寄存器递增 10 次:
LDX #$00
label:
INC
INX
CPX #$0A
BNE label
Run Code Online (Sandbox Code Playgroud)
汇编器如何知道标签的地址:?还有它使用什么机制将 BNE 指令中的标签与循环之前的标签定义相关联?
除此之外,假设在循环中触发了硬件中断(汇编程序不知道,因为它发生在运行时)。PC 会改变,因此中断服务程序中的任何标签都将处于完全不同的地址,并且因为大多数 RISC 处理器使用 PC 相对寻址,这会改变标签地址。
另外作为旁注,我如何正确粘贴代码,使其不像现在那样显示在一行上?