如何别名或重命名 gas 或 avr-as 中的寄存器?
How to alias or rename the register in gas or avr-as?
例如:我需要将 temp 别名为 r16 寄存器。
在标准的 atmel 编译器中,它可以通过 .def 指令完成:
.def temp=r16
但在 avr-as(gas) 中它不起作用。
我试过了:
.set temp, r16
#define temp r16
#define temp $r16
此方法不适用于寄存器,仅适用于常量。
我想这样写:
ldi temp,0xff
求求你帮忙)
#define temp r16
这就是我的做法。
但是,如果使用C预处理器指令(如#define
、#ifdef
等),则不能直接将程序传递给as
,必须调用预处理器首先.
如果你是运行as
"indirectly"调用gcc
,你可以使用文件扩展名.S
(大写"S") 而不是 .s
(小写 "s")。这告诉 gcc
汇编文件包含预处理器指令。
或者您可以使用 gcc
命令行选项 -x assembler-with-cpp
。这告诉 gcc
它应该忽略文件扩展名并将文件视为 .S
文件(即使文件名以 .c
结尾)。
这里有三个选项:
1) gcc -o myFile.o -c myFile.S
2) gcc -o myFile.o -x assembler-with-cpp -c myFile.s
3) cpp -o temporaryFile.s myFile.s
as -o myFile.o temporaryFile.s
可以在寄存器位置使用常量。
$ cat t.s
.equiv temp, 16
.text
ldi r16, 0xCC
ldi temp, 0xAA
.end
$ avr-as t.s
$ avr-objdump -d a.out
a.out: формат файла elf32-avr
Дизасемблювання розділу .text:
00000000 <.text>:
0: 0c ec ldi r16, 0xCC ; 204
2: 0a ea ldi r16, 0xAA ; 170
事实上,我使用预处理器将寄存器名称重新定义为常量
#define r16 16 // and so on
所以,我可以在宏中使用算术表达式,例如
//---------------------------------- word add
.macro add_w dst:req, src:req
add \dst, \src $ adc \dst+1, \src+1
.endm
例如:我需要将 temp 别名为 r16 寄存器。 在标准的 atmel 编译器中,它可以通过 .def 指令完成:
.def temp=r16
但在 avr-as(gas) 中它不起作用。
我试过了:
.set temp, r16
#define temp r16
#define temp $r16
此方法不适用于寄存器,仅适用于常量。 我想这样写:
ldi temp,0xff
求求你帮忙)
#define temp r16
这就是我的做法。
但是,如果使用C预处理器指令(如#define
、#ifdef
等),则不能直接将程序传递给as
,必须调用预处理器首先.
如果你是运行as
"indirectly"调用gcc
,你可以使用文件扩展名.S
(大写"S") 而不是 .s
(小写 "s")。这告诉 gcc
汇编文件包含预处理器指令。
或者您可以使用 gcc
命令行选项 -x assembler-with-cpp
。这告诉 gcc
它应该忽略文件扩展名并将文件视为 .S
文件(即使文件名以 .c
结尾)。
这里有三个选项:
1) gcc -o myFile.o -c myFile.S
2) gcc -o myFile.o -x assembler-with-cpp -c myFile.s
3) cpp -o temporaryFile.s myFile.s
as -o myFile.o temporaryFile.s
可以在寄存器位置使用常量。
$ cat t.s
.equiv temp, 16
.text
ldi r16, 0xCC
ldi temp, 0xAA
.end
$ avr-as t.s
$ avr-objdump -d a.out
a.out: формат файла elf32-avr
Дизасемблювання розділу .text:
00000000 <.text>:
0: 0c ec ldi r16, 0xCC ; 204
2: 0a ea ldi r16, 0xAA ; 170
事实上,我使用预处理器将寄存器名称重新定义为常量
#define r16 16 // and so on
所以,我可以在宏中使用算术表达式,例如
//---------------------------------- word add
.macro add_w dst:req, src:req
add \dst, \src $ adc \dst+1, \src+1
.endm