先要熟悉一些彙編的基本知識:
1.SP是什麼?
SP是堆棧寄存器,在調用子程式時,都會用到,儲存原來程式的環境使用,如各個寄存器的内容,最重要的是,調用傳回時程式的運作指令位址,這是由調用時将傳回位址壓入堆棧,傳回時取出并傳給PC寄存器來實作的。給SP的初始化值的大小,顯示了堆棧的存放位置和堆棧的大小,如果堆棧太小,會出現堆棧溢出的問題。(其内容為棧頂的偏移位址。)
2.PC是什麼寄存器?
PC是16位程式計數器(Program Counter),它不屬于特殊功能寄存器範疇,程式員不以像通路特殊功能寄存器那樣來通路PC。PC是專門用于在CPU取指令期間尋址程式存儲器。PC總是儲存着下一條要執行的指令的16位位址。通常程式是順序執行的,在一般情況下,當取出一個指令(更确切地說為一個指令位元組)位元組後,PC自動加1。如果在執行轉移指令、子程式調用/傳回指令或中斷時,要把轉向的位址賦給PC。
引用的彙編代碼跟上面一模一樣:
int x = 17;
int y= x;
int z = &y;
下面圖陰影部分,就是
int *z = &y;
X | |
Y | |
Z////////////////////////////////////////////// | 指向Y這個位址 |