疾风之狼 发表于 2017-8-8 16:17:01

ARMIPS assembler使用说明


ARMIPS assembler是一款ARM/MIPS汇编工具,他是命令行工具,支持ARM7/ARM9/MIPS R3000/MIPS R4000

ARMIPS assembler作者是Kingcom,目前发展到0.9版本

Kingcom's website:http://aerie.wingdreams.net

ARMIPS assembler源代码可去https://github.com/Kingcom/armips获得

更新版本可去http://buildbot.orphis.net/armips获得

ARMIPS assembler特点支持加载ROM并自动编译代码到ROM,省了使用16进制编辑器复制代码进ROM,进行ROM HACK更方便了。

ARMIPS命令行用法:

Usage: armips <FILE>

Optional parameters:
-temp <TEMP>         Output temporary assembly data to <TEMP> file
-sym<SYM>          Output symbol data in the sym format to <SYM> file
-sym2 <SYM2>         Output symbol data in the sym2 format to <SYM2> file
-root <ROOT>         Use <ROOT> as working directory during execution
-equ<NAME> <VAL>   Equivalent to '<NAME> equ <VAL>' in code
-strequ <NAME> <VAL> Equivalent to '<NAME> equ "<VAL>"' in code
-erroronwarning      Treat all warnings like errors

File arguments:
<FILE>               Main assembly code file

-temp <TEMP>参数是将临时汇编数据输出到<TEMP>文件
-sym <SYM>参数是将sym格式符号输出到<SYM>文件,这格式支持no$psx和no$gba
-sym2 <SYM2>参数是将sym2格式符号输出到<SYM2>文件,这格式支持pcsx2和ppsspp
-root <ROOT>参数是指定执行期间要使用的工作目录
-equ <NAME> <VAL>参数用法不明
-strequ <NAME> <VAL>参数用法不明
-erroronwarning参数是当出现任何警告时被视为错误,防止继续编译

<FILE>是汇编代码文件,可用记事本之类编辑

注释说明:
注释可在单行指令后面“;”和“//”添加
“/* */”式也接受

例子:
.open"1234.gba",0x08000000;//打开1234.gba文件,并将起始地址定义为0x08000000

.close;/*关闭文件*/

标签说明:
标签名可以包含A~Z字母和数字、下划线。但是它不能以数字开头,所有标签名称不区分大小写。

数值说明:
“0xA”和“0Ah”是16进制数值
“0o12”和“12o”是8进制数值
“1010b”和“0b1010”是2进制数值

equ说明:
格式:text equ value
说明:用一个text代替value
例子:
address1 equ 0x12345678
ldr r0,=address1
.pool

函数说明:

.open函数:
格式:
.open "ROM FileName",offset
.open "Old FileName","New FileName",offset
说明:.open函数打开ROM文件,并将ROM文件起始地址设置为offset地址。但结果指定了2个文件,汇编器会将文件复制到第二个路径。

例子:
.open "1234.gba",0x08000000

.close函数和.closefile函数:
格式:
.close
.closefile
说明:关闭文件。

.org函数和.orga函数:
格式:
.org RamAddress
.orga FileAddress
说明:
前面用.open函数设置过offset地址的话,那么可以用.org函数设置offset输出地址。

.orga函数可指定ROM文件的输出地址。

.create函数和.createfile函数
格式:
.create "FileName",offset
.createfile "FileName",offset
说明:创建一个文件,如果文件是存在,他会覆盖掉。

.area函数
格式:
.area SizeEquation[,fill]
.endarea
说明:如果你要向某地址写入一定字节数值,就用.area函数,SizeEquation是能写入最大字节数,超过就编译失败

例子:向0x100地址写入0x5,0x6,0x7,0x8单字节数据
org 0x100
.area 0x8
byte 0x5,0x6,0x7,0x8
.endarea

.align函数
格式:.align num
说明:写零字节,num为零字节数量,用16进制表示。

.pool函数
格式:.pool
说明:如果代码中有“ldr rx,=value”,就要用.pool对齐。
例子:
ldr r0,=0x12345678;
....
.pool

.fill函数
格式:
.fill length[,value]
defs length[,value]
说明:填充一定长度单字节数值,如果未指定value,而填充零字节数值;length和value用16进制表示。

.skip函数:
格式:.skip length
说明:跳过指定长度单字节数值,length用16进制表示。

写单字节:
.byte value[,...]
.db value[,...]
.ascii value[,...]
.asciiz value[,...]
dcb value[,...]

写双字节:
.halfword value[,...]
.dh value[,...]
dcw value[,...]

写四字节:
.word value[,...]
.dw value[,...]
dcd value[,...]

写doublewords:
.doubleword value[,...]
.dd value[,...]
dcq value[,...]

写浮点数:
.float value[,...]
.double value[,...]

ARM的ARM模式和THUMB模式定义:
.arm|ARM模式
.thumb|thumb模式

设置架构:
.psx|PlayStation 1(MIPS R3000)
.ps2|PlayStation 2(EmotionEngine)
.psp|PlayStation Portable(Allegrex)
.n64|Nintendo 64(MIPS R4000)
.rsp|Nintendo 64(RSP)
.gba|GameBoy Advance(ARM7,默认是thumb模式)
.nds|Nintendo DS(ARM9,默认是ARM模式)
.3ds|Nintendo 3DS(ARM11,默认是ARM模式)
.arm.big|
.arm.little|

常用函数就写这些了,还有大量函数说明没写,更多说明看readme.md吧。
页: [1]
查看完整版本: ARMIPS assembler使用说明