在高中的计算机工程课程中,我们被分配了一个作业,其中我们必须使用加法过程将两个数字除以汇编语言。
我们正在编程的玩具体系结构没有除法指令。该机器具有2的补码加法和按位与/或/异或运算,但不能直接相减:https://www.csie.ntu.edu.tw/~r03944025/intro2015/files/hw/appendix_c
(编者注,教科书未定义文本汇编语言,仅针对具有16个8位寄存器和有条件的if-if-zero指令的该装载/存储机器,定义了机器码操作码和操作数。)>
答案 0 :(得分:1)
因为我不想做你的学校作业,所以我只会给你一些提示:
如何使用加法除法...
这不是禁食方法,但是您可以执行以下操作:
material.shaderModifiers = [.fragment:
"""
float4 backColor = float4(0.0, 0.0, 1.0, 1.0);// the camera screen color
_output.color = _output.color * backColor;
""" ];
如果A和B可能为负,请执行以下操作:
; Calculate C = A / B
Set C to 0
As long as A >= B:
Increment C by 1
Subtract B from A
玩具结构...具有2的补码加法和按位AND / OR / XOR操作...
...以及一条条件跳转指令,如果两个寄存器相等,则该条件跳转指令将执行循环操作。
这非常重要,因为仅使用按位运算和加法,某些运算结果的位0仅取决于操作数的位0。这意味着某些程序的最终输出的位0仅取决于输入的位0。
但是,对于两个除法0x30 / 0x10 = 3和0x20 / 0x10 = 2所有输入的位0为0,但在一种情况下,输出的位0为1,在另一种情况下,输出的位0为0 0。
但不能直接相减
有关您的CPU没有进行的某些操作的一些提示: