嗨,伙计们,我希望你们做得很好。我正在自学组装。我想知道如何表达一个复杂的数学表达式。enter image description here
我试过这么做。我尝试为每个数字分配一个寄存器,但穆尔指令保存了Result。有没有人知道我该如何一步一步地表达这个完整的表达?enter image description here
我在抄写练习时犯了一个错误,公式如下:
嗨,伙计们,我希望你们做得很好。我正在自学组装。我想知道如何表达一个复杂的数学表达式。enter image description here
我试过这么做。我尝试为每个数字分配一个寄存器,但穆尔指令保存了Result。有没有人知道我该如何一步一步地表达这个完整的表达?enter image description here
我在抄写练习时犯了一个错误,公式如下:
1条答案
按热度按时间9udxz4iz1#
要将复杂的数学表达式转换为汇编语言,有8个简单的步骤:
a)使用“纸笔数学”将表达式简化为最简单的形式。举一个随机的例子,如果复杂的表达式是“x =(y+3)2 + 4/2 + 2”,你可以这样做:
B)通过用中间变量替换片段,将(简化的)表达式拆分成多个小表达式;使得每个小表达式有一个运算符。例如,“x =(y+6)*y + 4”将变为:
c)写评论。对于上面的例子,它可能看起来像:
d)在注解中添加开始和结束条件。这可能来自调用约定(如果它是一个单独的函数),也可能依赖于以前的代码(如果它是一个更大的函数的一部分)。对于上面的例子,它可能看起来像:
e)在注解中添加有关范围和数据类型的信息。请注意,当您获得经验,这可能是可选的;但这是避免bug(整数溢出等)的好方法。对于上面的例子,它可能看起来像:
f)找到合适的说明,做什么的评论说。对于上面的例子,它可能看起来像:
g)测试它是否工作(汇编程序是否给予你一个错误?它在执行时是否会给予您正确的结果?)
(h)寻找机会来优化或改进它。对于上面的例子(来自Peter下面的评论),
imul bl
(而不是imul ax,bx
)将正常工作,避免了对dx
的破坏,如果在此代码之前或之后的代码需要dx
,这可能会使事情变得更容易/更快,并使代码更干净。