This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
MSP430是简单而简洁的指令集的一个很好的示例、我在课堂中使用它来展示如何创建反汇编器。 为了测试反汇编器、我编写了一些汇编器代码来生成二进制文件、并发现了一些奇怪的问题:
swpb.b R5 ;汇编器接受而不发出警告,即使 B/W 位也相应设置 ;在大多数指令集表中,显示为0和.b 的位没有意义。 硬件有什么作用? sxt.b r6. ;相同的问题 RRC 0 (r0);生成:错误:RRC:尝试旋转 PC 寄存器 ;虽然我知道0(r0)实际上指向操作码后面的字,而不是寄存器 ;这类似于自修改代码,但: RRC 2(r0);没有问题就被接受,这只是略好一些
我在这里弄错了吗?
我可能已经提到了汇编器版本:
GNU 汇编器(Mitto Systems Limited - MSP430-gcc 9.2.0.50) 2.34
版权所有(C) 2020 Free Software Foundation、Inc.
你好、George。
我制作了如下所示的 makefile 文件:
test.hex:test.asm msp430-elf-as -o test.obj test.asm -al=test.lst msp430-elf-ld -ttest.cmd -o test.out test.objcopy -O ihex test.out test.hex
以及用于链接器的简单命令文件:
内存 { ROM (Rx): origin = 0xfc00、length = 1020 RESET_Vector (r):origin = 0xfffe、length = 2 } SECTIONS { .text: { } > ROM RESET_Vector: { SHORT (RESET) } > RESET_Vector }
BTW、我还注意到 call.B 被接受、这毫无意义。
谢谢、
John
感谢您的测试、David。
是的、0x10C6将 B (yte)标志置1 (位6)。
>但是任何编写 swpb.b 的人都需要一些有用的东西、这会有其他问题。
也许、但我希望汇编器能够更彻底地检查语法。 尽管可能有99%的用户只是使用气体进行 C 后处理。
此外、如果在'swpb.b'、'ti.b'、'call.b'和'xt.b'上弹出错误、则会在需要调试之前警告用户出现问题。
我已使用 TI 和 GCC 汇编器尝试了您的测试用例。 它们的行为方式不同。 我不确定哪一个是对的还是错的。 因此、我针对 TI 汇编器提交了问题 EXT_EP-10081。 根据此处发生的情况、我们可能会针对 GCC 汇编器提出另一个问题。 欢迎您使用我的签名中的以下链接关注此问题。
关于直接调用 GCC 汇编器... 我绝对不会那样做。 我很确定调用 MSP430-elf-gcc (或正在使用的任何 GCC 变体)是一种常见的做法、然后根据文件扩展名根据需要处理文件。 扩展名.s 表示汇编文件。 有关更多详细信息、请参阅 GCC 在线文档中的选项控制输出类型。
谢谢、此致、
乔治
要了解该主题为何被视为已解决、请参阅 《CCS 论坛使用指南》中的第一个常见问题解答。
谢谢、此致、
乔治
我同意汇编器应该更彻底地检查语法。 即使其中一些测试是有争议的、汇编器也应该可以轻松地发现这些测试并发出警告。
鉴于 MSP430是一个很好的简单指令集、人们编写汇编代码和直接调用 gas 的情况可能并不少见。
我们的目标是在 MSP430-GCC 的未来版本中改进汇编器语法检查。
此致、