Как псевдоним или переименовать реестр в газ или avr-as? - PullRequest
0 голосов
/ 03 февраля 2019

Например: мне нужно ввести псевдоним temp в регистр r16.В стандартном компиляторе atmel это можно сделать с помощью директивы .def:

.def temp=r16

Но в avr-as (газ) это не работает.

Я пробовал это:

    .set  temp, r16 
    #define temp r16  
    #define temp $r16

Этот метод не работает с регистрами, только с константами.Я хочу написать так:

    ldi temp,0xff

Пожалуйста, помогите)

Ответы [ 2 ]

0 голосов
/ 03 февраля 2019

Можно использовать константу в регистрах.

$ 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
0 голосов
/ 03 февраля 2019
#define temp r16

Вот как я бы это сделал.

Однако, если вы используете инструкции препроцессора C (такие как #define, #ifdef и т. Д.), Выне может напрямую передать программу на as, но сначала нужно вызвать препроцессор.

Если вы запускаете as "косвенно", вызывая 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
...