编译后的 AVR 汇编二进制文件似乎不包含我的指令?
Compiled AVR assembly binary does not seem to contain my instructions?
所以我使用他们网站上的 AVR 指令集 PDF 手动编写了 "assembled" 下面的 asm。
ldi r17, 0 ; 1110 0000 0001 0000
ldi r18, 3 ; 1110 0000 0010 0011
ldi r16, 0 ; 1110 0000 0000 0000
loop:
sbrc r18, 0 ; 1111 1101 0010 0000
add r16, r17 ; 0000 1111 0000 0001
lsl r17 ; 0000 1100 0001 0001
lsr r18 ; 1001 0101 0010 0110
brne loop ; 1111 01-- ---- ----
again:
rjmp again ; 1001 010- ---- 110-
; ---- ---- ---- ----
然而,当我实际上 assemble 使用 Avra 的文件并将生成的 .hex
文件转储为二进制文件时,我得到了这个:
0011101000110000
0011001000110000
0011000000110000
0011000000110000
0011001000110000
0011000000110000
0011000001000110
0100001100001101
0000101000111010
0011000100110000
0011000000110000
0011000000110000
0011000000110000
0011000100110000
0100010100110000
0011001000110011
0100010100110000
0011000000110000
0100010100110000
0011001000110000
0100011001000100
0011000000110001
0011000001000110
0011000100110001
0011000001000110
0011001000110110
0011100100110101
0100010000111001
0100011000110111
0011010000110101
0000110100001010
0011101000110000
0011001000110000
0011000000110001
0011000000110000
0011000001000110
0100011001000011
0100011000110010
0011000000001101
0000101000111010
0011000000110000
0011000000110000
0011000000110000
0011000000110001
0100011001000110
0000110100001010
0000110100001010
当我将十六进制文件闪存到 Arduino 时它运行良好(给定的 asm 没有提供任何输出,但我已经让 asm 关闭 led 等,它工作正常所以我假设这也一样)。
有人能告诉我这是怎么回事吗?为什么有这么多额外的位,为什么我找不到任何说明?
我不知道你为什么决定采用 ASCII 文本“.hex”文件并将其转换为二进制数字串,除非你想让我们的生活更艰难。
我已将那些神秘的行转换回 .hex
来源:
:020000020000FC
:1000000010E023E000E020FD010F110F2695D9F745
:02001000FFCF20
:00000001FF
什么是“.hex”文件 - 例如,您可以阅读 in Wikipedia。
第一行:02 0000 02 0000 FC设置初始段偏移量(0).
第二行:10 0000 00 10E023E000E020FD010F110F2695D9F7 45 - 这是包含您的代码的地方。如果需要,您可以将突出显示的字符串转换为二进制文件:
1110000000010000
1110000000100011
1110000000000000
1111110100100000
0000111100000001
0000111100010001
1001010100100110
1111011111011001
如您所见,您的所有代码都完好无损。
所以我使用他们网站上的 AVR 指令集 PDF 手动编写了 "assembled" 下面的 asm。
ldi r17, 0 ; 1110 0000 0001 0000
ldi r18, 3 ; 1110 0000 0010 0011
ldi r16, 0 ; 1110 0000 0000 0000
loop:
sbrc r18, 0 ; 1111 1101 0010 0000
add r16, r17 ; 0000 1111 0000 0001
lsl r17 ; 0000 1100 0001 0001
lsr r18 ; 1001 0101 0010 0110
brne loop ; 1111 01-- ---- ----
again:
rjmp again ; 1001 010- ---- 110-
; ---- ---- ---- ----
然而,当我实际上 assemble 使用 Avra 的文件并将生成的 .hex
文件转储为二进制文件时,我得到了这个:
0011101000110000
0011001000110000
0011000000110000
0011000000110000
0011001000110000
0011000000110000
0011000001000110
0100001100001101
0000101000111010
0011000100110000
0011000000110000
0011000000110000
0011000000110000
0011000100110000
0100010100110000
0011001000110011
0100010100110000
0011000000110000
0100010100110000
0011001000110000
0100011001000100
0011000000110001
0011000001000110
0011000100110001
0011000001000110
0011001000110110
0011100100110101
0100010000111001
0100011000110111
0011010000110101
0000110100001010
0011101000110000
0011001000110000
0011000000110001
0011000000110000
0011000001000110
0100011001000011
0100011000110010
0011000000001101
0000101000111010
0011000000110000
0011000000110000
0011000000110000
0011000000110001
0100011001000110
0000110100001010
0000110100001010
当我将十六进制文件闪存到 Arduino 时它运行良好(给定的 asm 没有提供任何输出,但我已经让 asm 关闭 led 等,它工作正常所以我假设这也一样)。 有人能告诉我这是怎么回事吗?为什么有这么多额外的位,为什么我找不到任何说明?
我不知道你为什么决定采用 ASCII 文本“.hex”文件并将其转换为二进制数字串,除非你想让我们的生活更艰难。
我已将那些神秘的行转换回 .hex
来源:
:020000020000FC
:1000000010E023E000E020FD010F110F2695D9F745
:02001000FFCF20
:00000001FF
什么是“.hex”文件 - 例如,您可以阅读 in Wikipedia。
第一行:02 0000 02 0000 FC设置初始段偏移量(0).
第二行:10 0000 00 10E023E000E020FD010F110F2695D9F7 45 - 这是包含您的代码的地方。如果需要,您可以将突出显示的字符串转换为二进制文件:
1110000000010000
1110000000100011
1110000000000000
1111110100100000
0000111100000001
0000111100010001
1001010100100110
1111011111011001
如您所见,您的所有代码都完好无损。