符号从 8 位扩展到 16 位寄存器得到 0xff00

问题描述

我正在 xilinx 中进行一个“简单的 cpu”项目,需要将值 0xFF00 存储在寄存器中,但汇编器命令一次只能传递 8 位数据。

剩余位通过符号扩展填充。

所以 0xFF 变成了 0xFFFF,0x0F 就是 F (0x000F)。

有没有简单的方法可以实现FF00?或者我需要更多的计算逻辑。 cpu 能够执行所有逻辑功能添加、替换和向左滚动位。

解决方法

我认为您是说您只有 mov reg16,sign_extended_imm8 之类的东西,并且您想要创建 FF00,而这无法直接使用符号扩展的 8 位数字实现。

0x80 符号扩展为 0xFF80,与您想要的值左移一个。

mov reg,0xFF80           # or mov reg,-128
add reg,reg              # shift left by 1,giving FF00
,

我继续存储 0x7C 并向左滚动 6 位。

它花费的时间比所需的要长,但至少会产生正确的输出。

结果是 F800,但它仍然是适合用途的红色阴影。