原文地址:http://thinkingeek.com/arm-assembler-raspberry-pi/
閱讀建議:盡量閱讀原文
寄存器
作為核心,處理器可以簡(jiǎn)化為一個(gè)計(jì)算器。并且只能使用“寄存器”中的操作數(shù)。樹莓派中的arm處理器包含16個(gè)整形寄存器和32和浮點(diǎn)數(shù)寄存器。處理器利用這些寄存器分別來執(zhí)行整數(shù)和浮點(diǎn)數(shù)計(jì)算。暫時(shí)我們只關(guān)注整形寄存器。
16個(gè)整形寄存器命名方式如下:r0...r15。每個(gè)寄存器都是32bit。當(dāng)然這32bit可以根據(jù)需要任意編碼。也就是說,可以很方便的用"二進(jìn)制碼"來表示整數(shù),執(zhí)行整數(shù)計(jì)算的指令一般都使用這種編碼。因此后面如果沒有特別注明,都默認(rèn)寄存器中保存的是二進(jìn)制編碼的整數(shù)。
r0-r15寄存器并非都是通用寄存器,但現(xiàn)在不做區(qū)分。
基本算數(shù)運(yùn)算
基本上所有的處理器都可以利用寄存器進(jìn)行算數(shù)運(yùn)算。可以將兩個(gè)寄存器中的值相加,再次以上一章中的代碼舉例:
/* -- sum01.s */
.global main
.func main
main:
mov r1, #3 /* r1 ← 3 */
mov r2, #4 /* r2 ← 4 */
add r0, r1, r2 /* r0 ← r1 + r2 */
bx lr
編譯并執(zhí)行,錯(cuò)誤碼是7
$ ./sum01 ; echo $?
7
另可以通過復(fù)用寄存器簡(jiǎn)化程序:
/* -- sum02.s */
.global main
.func main
main:
mov r0, #3 /* r0 ← 3 */
mov r1, #4 /* r1 ← 4 */
add r0, r0, r1 /* r0 ← r0 + r1 */
bx lr
執(zhí)行結(jié)果與上面程序相同。
$ ./sum02 ; echo $?
7