主题:[讨论]请教多位数加法问题
程序如下:
.386
.model flat,stdcall
option casemap:none
includelib msvcrt.lib
printf proto c:ptr byte,:vararg
.data
op1_1 dword 10002032h
op1_2 dword 21003584h
op1_3 dword 54575456h
op1_4 dword 28645334h
op2_1 dword 81453453h
op2_2 dword 10002548h
op2_3 dword 42015451h
op2_4 dword 18432456h
op3_1 dword ?
op3_2 dword ?
op3_3 dword ?
op3_4 dword ?
szMsg byte "结果为:%d%d%d%d。",0ah, 0
.code
start:
MOV EAX, op1_1
MOV EBX, op1_2
MOV ECX, op1_3
MOV EDX, op1_4
ADD EAX, op2_1
ADC EBX, op2_2
ADC ECX, op2_3
ADC EDX, op2_4
MOV op3_1, EAX
MOV op3_2, EBX
MOV op3_3, ECX
MOV op3_4, EDX
invoke printf, offset szMsg,
op3_4, op3_3, op3_2, op3_1
ret
end start
最后结果出现了负号...我汗啊
结果为:1084716938-1772574553822106828-1857727355。
不是用ADC指令 会把进位算到CF中去吗?
怎么才能把负号消去?请教了
.386
.model flat,stdcall
option casemap:none
includelib msvcrt.lib
printf proto c:ptr byte,:vararg
.data
op1_1 dword 10002032h
op1_2 dword 21003584h
op1_3 dword 54575456h
op1_4 dword 28645334h
op2_1 dword 81453453h
op2_2 dword 10002548h
op2_3 dword 42015451h
op2_4 dword 18432456h
op3_1 dword ?
op3_2 dword ?
op3_3 dword ?
op3_4 dword ?
szMsg byte "结果为:%d%d%d%d。",0ah, 0
.code
start:
MOV EAX, op1_1
MOV EBX, op1_2
MOV ECX, op1_3
MOV EDX, op1_4
ADD EAX, op2_1
ADC EBX, op2_2
ADC ECX, op2_3
ADC EDX, op2_4
MOV op3_1, EAX
MOV op3_2, EBX
MOV op3_3, ECX
MOV op3_4, EDX
invoke printf, offset szMsg,
op3_4, op3_3, op3_2, op3_1
ret
end start
最后结果出现了负号...我汗啊
结果为:1084716938-1772574553822106828-1857727355。
不是用ADC指令 会把进位算到CF中去吗?
怎么才能把负号消去?请教了