Armed with the ADD, SUB, and NEG instructions, we have the means to implement arithmetic expressions involving addition, subtraction, and negation in assembly language.
B1: Implementing Arithmetic Expression ( i )
Armed with the ADD, SUB, and NEG instructions, we have the means to implement arithmetic expressions involving addition, subtraction, and negation in assembly language.
In other words, we can simulate what a C++ compiler might do when reading an expression such as
Rval = -Xval + (Yval - Zval);
Based on the above arithmetic expression, we can construct the assembly program by the following steps:
The following signed 32-bit variables will be used:
Rval SDWORD ? Xval SDWORD 26 Yval SDWORD 30 Zval SDWORD 40
When translating an expression, evaluate each term separately and combine the terms at the end.
First, we negate a copy of Xval:
; first term: -Xval mov eax, Xval neg eax ; EAX = -26
Then Yval is copied to a register and Zval is subtracted:
; second term: (Yval - Zval) mov ebx, Yval sub ebx, Zval ; EBX = -10
Finally, the two terms (in EAX and EBX) are added:
; add the terms and store: mov Rval, eax add Rval, ebx ; Rval = -36
B2: Let's Coding - arithmetic
Complete the template file by typing the program based on the description above in part "B1: Implementing Arithmetic Expression".
Debug the program by pressing
- Select [Debug] → [Windows] → [Autos].
- Select [Debug] → [Windows] → [Registers].
- Determine the output of the program by inspecting the content of the related registers.
Step by step
Solved in 2 steps