工具与软件:
当我注意到一些奇怪的东西时、我正在尝试一些东西。 首先、GCC 实用程序 msp430-elf-objdump 显示出20位立即值为16位。
441c: 80 18 70 12 pushx.a #-21846 ;#0xaaaa 4420: aa aa
扩展字(0x1880)显然有位7被设定、所以值应该为0x1aaaa。
更糟糕的是、当我在 FR5969上执行该指令时、堆栈上的上部字是零、而不是1。 如果我在按下寄存器之前将立即值加载到寄存器中、我将获得预期的20位值。
我仔细检查了文档、结果发现大家可以通过 pushx 使用20位直接值。 汇编器会在不添加警告的情况下接受该行。 但反汇编器和 CPU 会忽略扩展字中的这些位。