作者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