问题描述
我正在 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,但它仍然是适合用途的红色阴影。