【发布时间】:2020-12-03 08:37:46
【问题描述】:
我正在编写我的第一个模拟器(Intel 8086 微处理器)。
我被困住了,因为我必须编写一个将 16 位变量加在一起的函数。下面是我要写的函数原型:
uint16_t add(uint16_t reg, uint16_t operand);
例如,如果我们执行:
add(5, 3)
函数应该像这样进行计算:
111
0000000000000101 (= 5)
+ 0000000000000011 (= 3)
----------------
1000 (= 8)
然后返回 8。
要编写这个函数,我需要找到一种方法来访问这两个变量的每一位,然后能够将它们加在一起并将它们放在第三个变量中。
这在 C 中是否可行,如果可以,有人可以告诉我吗?
非常感谢您的回答。
【问题讨论】:
-
嗯。
reg + operand就是这样做的…… -
是的,但它不会完全按照我想要的方式运行。例如,如果发生溢出,运算符 + 将发生段错误。但是使用我的添加功能,我只是要设置 CF 标志。
-
不,操作员
+永远不会出现段错误。您可以轻松检查“溢出”(这实际上是无符号整数的明确定义的“环绕”)并设置您的 CF。如果您将临时结果变量设为uint32_t,那么您可以轻松检查它是否超出uint16_t的范围。 -
所以这是正常的加法,但有进位。在这种情况下,CF 是什么,一些全局变量?
-
我有一个全局变量
uint16_t registers[]。registers[10] = FLAGS。 FLAGS uint16_t 变量的第 0 位是进位。
标签: c emulation add x86-16 16-bit