ARM Assembler VS GNU Assembler

2023-12-13 13:58
文章标签 vs arm gnu assembler

本文主要是介绍ARM Assembler VS GNU Assembler,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本人引用自:http://www.wretch.cc/blog/trackback.php?blog_id=DreamYeh&article_id=888788

这几天要把我写好的ARM code 移植到Android 上,遇到了一些问题-简单来说「在使用RVDS 开发出来的ARM code ,是无法直接给Android 使用的!」,自行解决后,仍然好奇根本原因,查资料结果,整理如本文件。

 

注意这个问题,在我们之后专注开发ARM code 过程中,一定会遇到!希望大家可以看一下这份文件

 

简单来说一个结论:

 

在windows下,使用RVDS 等工具,底层都会呼叫ARMCC ,这是ARM 公司提供的ARM 汇编器,语法指令完全符合ARM 指令集

 

但是你实际在编译时候呢?使用的是arm-linux-gcc ,基于Linux 的ARM 交叉编译器,使用的是GNU 的汇编方式,除了指令集与ARM 指令相容(不相容就无法移植了:-) ),语法环境和很多虚拟指令,都和ARM 的标准不一样,比如= 和EQU ,import和.globle 等等。

因此当你要Release  code 给Andorid 的负责成员时候,就要注意这些格式上的转换!

 

我在这边把要注意的事情整理成文件,给大家参考

1. Introduction

In ADS and SDT environment, arm asm is usually used, it can be compiled by arm compiler, armcc.

While for linux programming environment, we use GNU GCC compiler that supports GNU asm (GAS).

These two kinds of asm compiler has different syntax, so it's important to replant one kind of code to another.

In this document, the most important things that should be kept in mind during the replanting stage is put.

2.     replanting

2.1     Replanting of . s file

2.1.1     Comment

In arm asm, “;” is used to comment off a line.

In GAS, we use “@”, “#” or “//” can be used to comment off a line, and “/* */” can be used to comment off more than one line.

The example below show the difference,

For ADS environment

;

; ------------------------------------------------- --------------------------

;Static Global Data section variables

;------------------------------------------------- --------------------------

;

; -------------------------- NONE ---------------------- ---------------------

For GAS environment

@

/* ------------------------------------------------ ---------------------------

@Static Global Data section variables

@------------------------------------------------- --------------------------

*/

// -------------------------- NONE --------------------- ----------------------

2.1.2     Operator

(1). Define a constant:

ADS: @TIMER1_CTRL EQU 0x0A800008

GAS: .equ TIMER1_CTRL, 0x0A800008

(2). Define a label or symbal:

ADS: LABEL_ONE

GAS: LABEL_ONE:

(3).

ADS: DCD

GAS: .long

(4). Define a function:

ADS: myfunc FUNCTION

XXXX  

XXXX

ENDFUNC

Or

myfunc PROC

XXXX  

XXXX

ENDP

GAS: myfunc:

XXXX  

XXXX

(5). Define a global function or variable

ADS: @EXPORT SspSipStopTimer1

GAS: .global SspSipStopTimer1

(6).

ADS: DCD

GAS: .long

(7). Code section

ADS: AREA WORD, CODE, READONLY

          XXXX

          XXXX

          END

GAS: .text

          XXXX

          XXXX

          .end

(8). Data section

ADS: AREA BLOCK, DATA, READWRITE

          XXXX

          XXXX

          END

GAS: .data

          XXXX

          XXXX

          .end

(9).

ADS: :OR:

GAS: |

(10).

ADS: :SHL:

GAS: <<

(11).

ADS: :SHR:

GAS: >>

(12).

ADS: CODE32:

GAS: .arm

(13).

ADS: CODE16:

GAS: .thumb

(14).

ADS: %:

GAS: .fill

(15).

ADS: LTORG:

GAS: .ltorg

(16).

ADS: INCLUDE:

GAS: .include

(17).

ADS: IF:DEF:

GAS: .IFDEF

(18).

ADS: ELSE

GAS: .ELSE

(19).

ADS: ENDIF

GAS: .ENDIF

(20).

ADS: &

这篇关于ARM Assembler VS GNU Assembler的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/488713

相关文章

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

bash: arm-linux-gcc: No such file or directory

ubuntu出故障重装了系统,一直用着的gcc使用不了,提示bash: arm-linux-gcc: No such file or directorywhich找到的命令所在的目录 在google上翻了一阵发现此类问题的帖子不多,后来在Freescale的的LTIB环境配置文档中发现有这么一段:     # Packages required for 64-bit Ubuntu

编译linux内核出现 arm-eabi-gcc: error: : No such file or directory

external/e2fsprogs/lib/ext2fs/tdb.c:673:29: warning: comparison between : In function 'max2165_set_params': -。。。。。。。。。。。。。。。。。。 。。。。。。。。。。。。。 。。。。。。。。 host asm: libdvm <= dalvik/vm/mterp/out/Inte

G++(GNU C++)安装及使用(windows)

安装步骤: 1、下载 Cygnus 的G++编译器(http://www.claremontmckenna.edu/math/ALee/g++/full.exe),并保存到E盘(或其它任意盘),格式为E:full.exe。 2、直接运行该文件,可能需要十几分钟的时间(中间会有停顿甚至没有任何提示性图片或者符号,需要耐心等待哦)。       或者Win + R ,输入cmd,按Ent

VS Code 调试go程序的相关配置说明

用 VS code 调试Go程序需要在.vscode/launch.json文件中增加如下配置:  // launch.json{// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information,

Cortex-A7:ARM官方推荐的嵌套中断实现机制

0 参考资料 ARM Cortex-A(armV7)编程手册V4.0.pdf ARM体系结构与编程第2版 1 前言 Cortex-M系列内核MCU中断硬件原生支持嵌套中断,开发者不需要为了实现嵌套中断而进行额外的工作。但在Cortex-A7中,硬件原生是不支持嵌套中断的,这从Cortex-A7中断向量表中仅为外部中断设置了一个中断向量可以看出。本文介绍ARM官方推荐使用的嵌套中断实现机

ARM 虚拟化介绍

0.目录 文章目录 0.目录1.概述 1.1 Before you begin 2.虚拟化介绍 2.1 虚拟化为什么重要2.2 hypervisors的两种类型2.3 全虚拟化和半虚拟化2.4 虚拟机和虚拟CPUs 3.AArch64中的虚拟化4.stage 2 转换 4.1 什么是stage 2 转换4.2 VMIDs4.3 VMID vs ASID4.4 属性整合和覆盖4.5模拟

SylixOS ARM平台下内存对齐访问

1.内存对齐 1.1     内存对齐概要 现代计算机中内存空间都是按照byte划分的,从理论上讲对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 1.2     内存对齐作用和原因 各个硬件平台对存储空间的处理上有很大的不同。一些平

解决服务器VS Code中Jupyter突然崩溃的问题

问题 本来在服务器Anaconda的Python环境里装其他的包,装完了想在Jupyter里写代码验证一下有没有装好,一运行发现Jupyter崩溃了!?报错如下所示 Failed to start the Kernel. ImportError: /home/hujh/anaconda3/envs/mia/lib/python3.12/lib-dynload/_sqlite3.cpython-

VSC++: 括号对称比较

括号的使用规则:大括号,中括号,小括号{[()]};中括号,小括号[()];小括号();大括号、中括号、小括号、中括号、小括号、大括号{[()][()]};大括号,中括号,小括号,小括号{[(())]};大括号,中括号,小括号,小括号{[()()]};小括号不能嵌套,小括号可连续使用。 {[]}、{()}、([])、({})、[{}]、{}、[]、{[}]、[(])都属非法。 char aa[