Re: [討論] 關於除法DIV的一些問題

看板ASM (組合語言)作者 (wcc)時間14年前 (2011/01/09 17:38), 編輯推噓5(502)
留言7則, 4人參與, 最新討論串2/3 (看更多)
小弟這次加上了,辨識負號的功能, 可是結果只有輸入正的才會對,輸入負的(一正一負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

01/09 18:47, , 1F
被除數是64bit 如果是負的 EDX就不是擺0囉
01/09 18:47, 1F

01/09 18:50, , 2F
厄.. 我沒看清楚XD
01/09 18:50, 2F

01/09 19:07, , 3F
irvine32裡面的ReadDec好像是讀無號數= =
01/09 19:07, 3F

01/09 19:09, , 4F
改ReadInt?
01/09 19:09, 4F

01/09 20:46, , 5F
恩 可以了!!感謝大大指點!
01/09 20:46, 5F

01/09 21:39, , 6F
除了NEG之外 有沒有辦法讓負號變成正號@@?
01/09 21:39, 6F

01/10 00:29, , 7F
有另外一個指令叫 IDIV 吧
01/10 00:29, 7F
文章代碼(AID): #1DAO7xby (ASM)
文章代碼(AID): #1DAO7xby (ASM)