4.2.5 实现算术表达式

 

有了ADD,SUB和NEG指令,现在就可以用汇编语言来实现涉及加法、减法和求补运算的算术表达式了。换句话说,我们可以模拟C++编译器遇到类似于下面的表达式时所做的事情:

    Rval = -Xval + (Yval - Zval);

假设表达式使用下面的32位有符号变量:

    Rval SDWORD ?
    Xval SDWORD 26
    Yval SDWORD 30
    Zval SDWORD 40

在翻译一个表达式的时候,先单独翻译每个子项,最后再把各个子项合并起来。首先,我们对Xval的一个副本求反:

    ;first term: -Xval
    mov eax,Xval
    neg eax                 ;EAX = -26

然后将Yval的值复制到寄存器中并减掉Zval:

    ;second term: (Yval - Zval)
    mov ebx,Yval
    sub ebx,Zval        ;EBX = -10

最后,把两个子项相加(分别在EAX和EBX中)并保存结果:

    ;add the terms and store: add eax,ebx
    mov Rval,eax        ;-36