add r0,r1
adds r0,r1
adds r8,r0
arm-none-eabi-as -mthumb so.s -o so.o
so.s: Assembler messages:
so.s:2: Error: instruction not supported in Thumb16 mode -- `adds r0,r1'
so.s:3: Error: instruction not supported in Thumb16 mode -- `adds r8,r0'
интересно
add r0,r1
add r0,r1
add r8,r1
00000000 <.text>:
0: 1840 adds r0, r0, r1
2: 1840 adds r0, r0, r1
4: 4488 add r8, r1
интересный.
.thumb
.syntax unified
add r0,r1
add r0,r1
add r8,r1
00000000 <.text>:
0: eb00 0001 add.w r0, r0, r1
4: eb00 0001 add.w r0, r0, r1
8: 4488 add r8, r1
нормально прогресс
.thumb
.syntax unified
add r0,r1
adds r0,r1
adds r8,r1
00000000 <.text>:
0: eb00 0001 add.w r0, r0, r1
4: 1840 adds r0, r0, r1
6: eb18 0801 adds.w r8, r8, r1
хммм.
.thumb
.syntax unified
add r0,r1
adds r0,r1
add r8,r1
00000000 <.text>:
0: eb00 0001 add.w r0, r0, r1
4: 1840 adds r0, r0, r1
6: 4488 add r8, r1
ОК, это просто беспокоит.
.thumb
.syntax unified
add r0,r1
adds r0,r1
add.w r8,r1
00000000 <.text>:
0: eb00 0001 add.w r0, r0, r1
4: 1840 adds r0, r0, r1
6: eb08 0801 add.w r8, r8, r1
Так что получение команды 0x18xx и 0x44xx для генерации не сложно. ассемблер не делает жизнь легкой. если вам нужна конкретная инструкция, вы должны просто поместить там машинный код и сделать с ней.
EDIT вздыхаем попытался предложение Notlikethat в
.thumb
.syntax unified
add.n r0,r1
add.n r8,r1
arm-none-eabi-as -mthumb so.s -o so.o
so.s: Assembler messages:
so.s:5: Error: cannot honor width suffix -- `add.n r0,r1'
неудачу
.thumb
add.n r0,r1
add.n r8,r1
arm-none-eabi-as -mthumb so.s -o so.o
so.s: Assembler messages:
so.s:4: Error: unexpected character `n' in type specifier
so.s:4: Error: bad instruction `add.n r0,r1'
so.s:5: Error: unexpected character `n' in type specifier
so.s:5: Error: bad instruction `add.n r8,r1'
неудачу
.thumb
.syntax unified
adds.n r0,r1
add.n r8,r1
00000000 <.text>:
0: 1840 adds r0, r0, r1
2: 4488 add r8, r1
хорошо, что получил его ...
и надстройку против добавляет, имеет смысл, f или по какой-либо причине версия с высоким регистром добавления 0x44xx, которую вы были после, не изменяет флаги, где выполняется низкий регистр 0x18xx. Этот ассемблерный язык в ARMv7-m ARM показывает это.
EDIT 2, старая рука рука говорит
ограничение Операнд Если низкий регистр указан для и Rm (Н1 == 0 и Н2 == 0), то результат будет непредсказуем. Так что для armv4 и armv5 я бы не пытался сделать вашу команду 0x4408, поскольку она непредсказуема.
В доктрине armv7-m не сказано, что в теории это хорошо для этой архитектуры. не знаю, что говорит armv6m.
2-байтовый указатель большого пальца устанавливает флаги. если вы пишете 'add r0, r1', вы должны получить 16-разрядную инструкцию. – EOF
, который все еще не объясняет, почему ассемблер не переводит 'ADD R0, R1' в' 08 44' – YouYou
О, вы имеете в виду '0x44 0x08'? Взгляните на справочное руководство по архитектуре ARM: * Кодирование T2 ARMv6T2, ARMv7, если и - оба из R0-R7 ARMv4T, ARMv5T \ *, ARMv6 \ *, ARMv7 в противном случае *. Кажется, вы не можете использовать эту кодировку для нижних регистров в thumb1. –
EOF