歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

ARM Linux常用匯編語法

匯編語言每行的語法:

 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語言中的;)
 #   立即數前綴

Copyright © Linux教程網 All Rights Reserved