注意点:
1. 明确运算数据的类型(乘除法是否需要扩展等)
2. 明确所用的运算指令
例题:X,Y,Z,V,W均为16位有符号数,计算W=(V-(X*Y+Z-1234))/X
分析:
①确定计算顺序
②明确每一步运算的数据类型
解答:
①X*Y乘积结果32位
②X*Y+Z-1234,Z符号扩展成32位,运算结果仍为32
③(V-(X*Y+Z-1234)),V符号扩展成32位,运算结果仍为32
④(V-(X*Y+Z-1234))/X,被除数32位,除数16位,结果也为16位
MOV AX,X IMUL Y MOV CX,AX MOV BX,DX ;X*Y,结果转移到BX,CX MOV AX,Z CWD ;Z符号扩展 ADD CX,AX ADC BX,DX ;X*Y+Z,考虑进位 SUB CX,1234 SBB BX,0 ;X*Y+Z-1234,1234扩展高16位全为0,考虑借位 MOV AX,V CWD ;V符号扩展 SUB AX,CX SBB DX,BX ;V-(X*Y+Z-1234) IDIV X MOV W,AX