【发布时间】:2021-07-21 21:32:39
【问题描述】:
我正在 xilinx 开发一个“简单 cpu”项目,需要将值 0xFF00 存储在寄存器中,但汇编程序命令一次只能传递 8 位数据。
剩余位通过符号扩展填充。
所以 0xFF 变成 0xFFFF 而 0x0F 就是 F (0x000F)。
有没有简单的方法可以实现FF00?或者我需要更多的计算逻辑。 cpu 能够执行所有逻辑功能,将位添加、替换和滚动到左侧。
【问题讨论】:
-
这是 16 位,决定是 12 位还是 16 位。
-
16,我的错误是想到了函数的操作数
-
您的 ISA 是什么?你使用了什么指令?你可能有类似负载鞋面的东西吗?
-
0xFF00 不能是 8->16 位符号扩展的结果,因为高字节不是低字节高位的副本。我打算标记这个sign-extension,但听起来它实际上是关于在 -128 .. 127 范围之外构造任意 16 位常量,分为两半(假设对位模式进行 2 的补码解释)。或者你是说你只有一个
mov reg16, sign_extended_imm8用于 mov-immediate,并且想以某种方式获得 0xFF00? -
一个明显的可能性是
mov reg, 0xFF80和add reg,reg左移1。(即mov reg, -128并通过左移或添加到自身将其加倍为-256。)IDK你有什么实际的助记符,但大概 mov 和 add 是不言自明的。