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

相关文章

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手

VS配置好Qt环境之后但无法打开ui界面的问题解决

《VS配置好Qt环境之后但无法打开ui界面的问题解决》本文主要介绍了VS配置好Qt环境之后但无法打开ui界面的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目UKeLvb录找到Qt安装目录中designer.UKeLvBexe的路径找到vs中的解决方案资源

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     内存对齐作用和原因 各个硬件平台对存储空间的处理上有很大的不同。一些平