Предположим, я пишу некоторый код на c, и он генерирует некоторую сборку, которая выглядит следующим образом:
.text
main:
mvs $r3, $sp
addi $r3, $r3, -16
mvs $sp, $r3
mvs $r3, $sp
addi $r3, $r3, 3
shri $r3, $r3, 2
shai $r3, $r3, 2
call __main
sti 8($r3), 25
sti 4($r3), 23
sti ($r3), 43
L2: ld $r4, 8($r3)
ld $r5, 4($r3)
add $r4, $r4, $r5
st 8($r3), $r4
ld $r4, 8($r3)
ld $r5, 4($r3)
sub $r4, $r4, $r5
st ($r3), $r4
jmp L2
Как я могу добавить больше ассемблерного кода, прямо между main: и первой строкой?
Цель состоит в том, чтобы установить все регистры в 0, прежде чем запускать любой ассемблерный код, который был создан с помощью газа из кода c. Это сделано для установки значений по умолчанию в регистре, что требуется для конкретного процессора, с которым я работаю.
Я думал об использовании компоновщика gcc и пользовательского объектного файла для сборки проекта с моим пользовательским кодом впереди, но я не знаю, есть ли у меня такая возможность с компоновщиком.
Я подумал об использовании crtbegin.asm, но я думаю, что это на самом деле предназначено для поддержки конструкторов / деконструкторов C ++. Так что это мне совсем не поможет.
Есть идеи?