ARM linux常用彙編語法

2021-06-09 14:25:40 字數 1341 閱讀 9282

組合語言每行的語法:

lable: instruction ; comment

段操作: .section 

格式: .section 段名 [標誌]

[標誌]可以是如下:

a 允許段

w 可寫段

x 可執行段

常見段名: data, bss, text, rodata段,我們也可以定義我們自己的段。

.data: 已初始化資料段

.bss: 未初始化資料段

.text:**段

.rodata:唯讀段

匯程式設計序的入口點:

通常,linux的匯程式設計序的入口點都是從_start這個全域性符號開始的。而c語言的入口點是main, main函式就是被_start後面的**呼叫。

.global _start

_start: 

**,,, 初始化程式執行環境;

**,,,

,,,bl main

bl exit

linux彙編中常數的使用:

十進位制: 以非0 的數字開頭表示, 124, 564

二進位制: 以0b開頭,如0b101001

八進位制: 以0開始的數字,如05645

十六進製制:以0x開頭, 如0xab12

linux彙編中常用的偽操作:

資料定義偽操作:

.byte, 定義單個位元組, 如, .byte 5, 4, 0b1001, 0x22, 055, 'b'

.short, 定義半字資料, 如,.short 0x1122, 3344

.long, 定義4位元組資料,如, 0x11223344,

.word

.string, .asciz, .ascii, 定義字串資料, 比如.string "hello"

對齊偽操作:  .align n  --> 2^n

檔案結束操作:.end

檔案包含操作:.include, 一般是在檔案開頭的時候包含標頭檔案時使用

**指令集切換:

.thumb, .code 16 這兩個偽指令告訴編譯器從這裡開始,以後的**都編譯成16為的thumb指令。

.arm, .code 32  這兩個偽指令告訴編譯器從這裡開始,以後的**都編譯成32為的arm指令。

函式定義格式:

函式名:

函式體函式返回語句

比如add函式:

.global add

add:

add r0, r1, r2

mov pc, lr

常見符號的意義和用法:

@ : **注釋符號

;   語句分離符號。(相當於c語言中的;)

#   立即數字首

常用彙編語法 ldr str

首先來看一段 global start 全域性標號 描述 start 函式,程式從此函式開始執行此函式完成時鐘使能 gpio 初始化 最終控制 gpio 輸出低電平來點亮 led 燈。start 例程 1 使能所有時鐘 ldr r0,0x020c4068 暫存器 ccgr0 ldr r1,0xfff...

常用彙編指令

1 加減指令 2 adr指令 adr是小範圍的位址讀取偽指令,ldr是大範圍的讀取位址偽指令。可實際上adr是將基於pc相對偏移的位址值或基於暫存器相對位址值讀取的為指令,而ldr用於載入32為立即數或乙個位址到指定的暫存器中。到這兒就會看到其中的區別了。如果在程式中想載入某個函式或者某個在聯接時候...

常用彙編指令

一 資料傳輸指令 它們在存貯器和 暫存器 寄存 器和輸入輸出埠之間傳送資料.1.通用資料傳送指令.mov 傳送字或位元組.movsx 先符號擴充套件,再傳送.movzx 先零擴充套件,再傳送.push 把字壓入堆疊.pop 把字彈出堆疊.pusha 把ax,cx,dx,bx,sp,bp,si,di依...