作者tna612 (wcc)
看板ASM
标题Re: [讨论] 关於除法DIV的一些问题
时间Sun Jan 9 17:38:01 2011
小弟这次加上了,辨识负号的功能,
可是结果只有输入正的才会对,输入负的(一正一负OR两个都负数)就会错,
或是无法继续执行。
拜托各位大大解惑
TITLE MASM Template (main.asm)
; Description:
;
; Revision date:
INCLUDE Irvine32.inc
.data
I1 DWORD ?
I2 DWORD ?
Str1 Byte "Input the first value",0
Str2 Byte "Input the second value",0
.code
main PROC
MOV EDX,OFFSET str1
CALL WriteString
CALL ReadDec
MOV I1,EAX
CMP I1,0 // <-------比较是否为负数
JG L3
NEG I1 // <-------如果是就换为正的
L3: MOV EDX,OFFSET str2
CALL WriteString
CALL ReadDec
MOV I2,EAX
CMP I2,0 // <-------比较是否为负数
JG L4
NEG I2 // <-------如果是就会为正的
L4: PUSH I1
PUSH I2
CALL gcdrecursive
CALL WriteDec
EXIT
main ENDP
gcdrecursive PROC
PUSH EBP
MOV EBP,ESP
SUB ESP,4
MOV EBX,[EBP+8]
MOV EAX,[EBP+12]
MOV EDX,0
DIV EBX
MOV EAX,EBX
MOV EBX,EDX
CMP EBX,0
JE L2
JMP L1
L1:PUSH EAX
PUSH EBX
CALL gcdrecursive
L2:MOV ESP,EBP
POP EBP
RET 8
gcdrecursive ENDP
END main
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.166.218.13
1F:推 buganini:被除数是64bit 如果是负的 EDX就不是摆0罗 01/09 18:47
2F:推 buganini:厄.. 我没看清楚XD 01/09 18:50
3F:推 buganini:irvine32里面的ReadDec好像是读无号数= = 01/09 19:07
4F:→ buganini:改ReadInt? 01/09 19:09
5F:→ tna612:恩 可以了!!感谢大大指点! 01/09 20:46
6F:推 qqqlow:除了NEG之外 有没有办法让负号变成正号@@? 01/09 21:39
7F:推 Ross0916:有另外一个指令叫 IDIV 吧 01/10 00:29