Я добавил свою собственную инструкцию для спайка RIS C -V, как этот учебник . Он сказал, что мне нужно перестроить цепочку инструментов, которая занимает слишком много времени для меня.
Поэтому я попытался выяснить, как использовать мою инструкцию без перестройки цепочки инструментов, и из здесь выяснил, что это может использоваться:
Эта директива разрешает представление инструкций цифрой c и заставляет ассемблер вставлять операнды в соответствии с одним из форматов инструкций для '.insn' (RIS C - V-форматы). Например, инструкция 'add a0, a1, a2' может быть записана как '.insn r 0x33, 0, 0, a0, a1, a2' .
Однако , Я попытался в примере вызвать add a0, a1, a2
, используя .insn r 0x33, 0, 0, a0, a1, a2
, и появляется сообщение об ошибке:
riscv64-unknown-elf-gcc hello.c myasm.S -o hello
myasm.S: Assembler messages:
myasm.S:8: Error: unknown pseudo-op: `.insn'
Моя версия на ассемблере
riscv64-unknown-elf-as --version
GNU assembler (GNU Binutils) 2.29
Copyright (C) 2017 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or later.
This program has absolutely no warranty.
This assembler was configured for a target of `riscv64-unknown-elf'.
Это из-за моего набора инструментов? Или я неправильно использую директиву?
Любая помощь будет признательна.
Здравствуйте. c
#include <stdio.h>
extern int aw(int x, int y);
int main() {
int result = 0;
result = aw(0xC0, 0x0B); //0xAB
printf("Result 0x%x\n",result);
return result;
}
myasm .S
.section .text
.global aw
.type aw, @function
aw:
.insn r 0x33, 0, 0, a0, a0, a1
ret