1. 程式人生 > >專題3-ARM偽指令

專題3-ARM偽指令

1、ARM機器碼
這裡寫圖片描述
可以通過反彙編檢視機器碼:
arm-linux-objdump -D -S start.elf
這裡寫圖片描述

機器碼錶示的意義:

這裡寫圖片描述

因為源運算元只有12位(實際上只有8位是儲存資料的,另外4位用於移位。),當數值超過其大小時(超過8位)就會報錯,此時需要用到偽指令

2、定義類偽指令

偽指令本身沒有所對應的機器碼,它只是在編譯的時候起作用,或者轉化為其他的實際指令來執行。(nop轉化為mov來執行)
GNU彙編的特點:在偽指令前面加一個點
2.1 global:定義成全域性的符號
2.2 data :定義資料段
2.3 ascii:定義一個字串的資料
2.4 byte:定義一個位元組的資料
2.5 word:定義一個字的資料
這裡寫圖片描述

編譯後,可以用readelf工具將start.S的格式全讀出來,檢視data段對應符號的地址和內容。

這裡寫圖片描述

這裡寫圖片描述

2.6 equ:定義巨集指令

這裡寫圖片描述

2.7 align:對齊

用法:.align 4

3、操作類偽指令
3.1 ldr:用於轉移大於8位的立即數(因為mov不能大於8位的數)ldr除了偽指令還是操作記憶體的指令,是將記憶體的值賦值到暫存器
這裡寫圖片描述
可以通過反彙編來檢視ldr執行的實質:
這裡寫圖片描述
這裡寫圖片描述

3.3 nop:空操作,可用於延時
nop 等價於 mov r0,r0
這裡寫圖片描述