![]() |
||
Amateur Member
![]() 加入日期: Aug 2000 您的住址: 公海
文章: 45
|
![]() 引用:
太高深了...不知道asccpu兄,對我最後修改的程式碼有什麼高見...謝謝^^ ....用DEBUG驗證後-D 0B70:00 F 顯示資料段01 02 05 00 00 -G之後還是沒變....... 此文章於 2004-12-31 10:15 PM 被 小P 編輯. |
||||||||
![]() |
![]() |
Master Member
![]() ![]() ![]() ![]() 加入日期: Jan 2002 您的住址: U.S.S AGC
文章: 1,669
|
引用:
.MODEL SMALL .386 <--- 加這才能用386的指令,你用的是MASM?,沒加這MASM內定以x86指令為主。 這行放在此是16位元程式碼,但可使32位元暫存器,若放在.MODEL 之前則是32位元程式碼 .STACK .DATA A DB 1 B DB 2 E DB 5 D DB ? DR DB ? .CODE .STARTUP -MOV AX,4 -IMUL B -MOV BX,3 -IMUL A -ADD AL,BL -ADC AH,BH 以上可以改成 MOVZX AX,A SHL AX,1 ;*2 ADD AL,A ;*3 MOVZX BX,B SHL BX,2 ; *4 ADD AX,BX ;A*3+B*4 --> AX 原本的程式是可以,不過可以不用帶符號運算,因為都是正數,除非其中是負值,則用原本方較方便 但,其中 -ADD AL,BL -ADC AH,BH 直接用 ADD AX,BX 即可 MOV DL,E CBW MOV CX,DX SUB CX,2 IDIV CX 改成 MOVZX BX,E DEC BX DEC BX XOR DX,DX IDIV BX (或DIV BX均可) 為何要把DX歸0?因為你要用16位元除法,據指令說明,當用16位元除法時,除數是DX:AX,除非改用另一方式: MOV BL,E DEC BL DEC BL DIV BL 算完後AX(AL)=商,DX(AH)=餘數,( )內是採用第二方法時 MOV D,AL 我猜這是商 MOV DR,AH 這是餘數 ...... ![]() .EXIT END 少了一些指令下去... (E-2) .... ![]()
__________________
辭源數位化計劃啟始於2014年1月。請拜訪成果。 此文章於 2004-12-31 11:09 PM 被 asccpu 編輯. |
|||
![]() |
![]() |
Amateur Member
![]() 加入日期: Aug 2000 您的住址: 公海
文章: 45
|
asccpu兄說:原本的程式是可以,不過可以不用帶符號運算 <<<<
原本程式是說我最後改的那一個嗎? 但是直接用 ADD AX,BX 後就找不到我的記憶體位址了 |
![]() |
![]() |
Master Member
![]() ![]() ![]() ![]() 加入日期: Jan 2002 您的住址: U.S.S AGC
文章: 1,669
|
引用:
看了一下,有問題: 所有乘除都是ACC暫存器為主(ACC就是AX(AH,AL,EAX) 所以 -MOV AX,4 -IMUL B 對,正確 -MOV BX,3 -IMUL A 這就錯了,AX內容變成(B*4)*A 了 此時BX=3 -ADD AL,BL -ADC AH,BH
__________________
辭源數位化計劃啟始於2014年1月。請拜訪成果。 此文章於 2004-12-31 11:03 PM 被 asccpu 編輯. |
|
![]() |
![]() |
New Member
加入日期: Sep 2004 您的住址: California
文章: 5
|
比起前兩天看到的問C++的
這樣問問題不是好多了嗎 |
![]() |
![]() |
Amateur Member
![]() 加入日期: Aug 2000 您的住址: 公海
文章: 45
|
改過了
MOV AX,4 IMUL B MOV BX,AX <多加這一行 MOV AX,3 IMUL A 可是使用DUBUG還是驗證不出來的說... -d 0b70:0 f 01 02 05 00 00 -g -d 0b70:0 f 01 02 05 00 00 --------------------↑↑↑ 謝謝asccpu 的回覆~但是商數跟餘數還是沒解出來,不知道是什麼問題 |
![]() |
![]() |
Master Member
![]() ![]() ![]() ![]() 加入日期: Jan 2002 您的住址: U.S.S AGC
文章: 1,669
|
-A 100
0CE5:0100 MOV AX,4 0CE5:0103 IMUL BYTE PTR[0200] 0CE5:0107 MOV BX,AX 0CE5:0109 MOV AX,3 0CE5:010C IMUL BYTE PTR[0201] 0CE5:0110 ADD AX,BX 0CE5:0112 NOP 0CE5:0113 NOP 0CE5:0114 NOP 0CE5:0115 MOV BL,BYTE PTR [0202] 0CE5:0119 DEC BL 0CE5:011B DEC BL 0CE5:011D IDIV BL 0CE5:011F NOP 0CE5:0120 NOP 0CE5:0121 NOP -E 200 0CE5:0200 02. 01. 00.5 ;分別是B,A,E值 -T AX=0004 BX=128A CX=000A DX=0000 SP=090E BP=0916 SI=0014 DI=0008 DS=0CE5 ES=5D0A SS=00A7 CS=0CE5 IP=0103 NV UP EI PL NZ AC PE CY 0CE5:0103 F62E0002 IMUL BYTE PTR [0200] DS:0200=02 -T AX=0008 BX=128A CX=000A DX=0000 SP=090E BP=0916 SI=0014 DI=0008 DS=0CE5 ES=5D0A SS=00A7 CS=0CE5 IP=0107 NV UP EI PL NZ AC PE NC 0CE5:0107 89C3 MOV BX,AX -T AX=0008 BX=0008 CX=000A DX=0000 SP=090E BP=0916 SI=0014 DI=0008 DS=0CE5 ES=5D0A SS=00A7 CS=0CE5 IP=0109 NV UP EI PL NZ AC PE NC 0CE5:0109 B80300 MOV AX,0003 -T AX=0003 BX=0008 CX=000A DX=0000 SP=090E BP=0916 SI=0014 DI=0008 DS=0CE5 ES=5D0A SS=00A7 CS=0CE5 IP=010C NV UP EI PL NZ AC PE NC 0CE5:010C F62E0102 IMUL BYTE PTR [0201] DS:0201=01 -T AX=0003 BX=0008 CX=000A DX=0000 SP=090E BP=0916 SI=0014 DI=0008 DS=0CE5 ES=5D0A SS=00A7 CS=0CE5 IP=0110 NV UP EI PL NZ AC PE NC 0CE5:0110 01D8 ADD AX,BX -T AX=000B BX=0008 CX=000A DX=0000 SP=090E BP=0916 SI=0014 DI=0008 DS=0CE5 ES=5D0A SS=00A7 CS=0CE5 IP=0112 NV UP EI PL NZ NA PO NC 0CE5:0112 90 NOP -T AX=000B BX=0008 CX=000A DX=0000 SP=090E BP=0916 SI=0014 DI=0008 DS=0CE5 ES=5D0A SS=00A7 CS=0CE5 IP=0113 NV UP EI PL NZ NA PO NC 0CE5:0113 90 NOP -T AX=000B BX=0008 CX=000A DX=0000 SP=090E BP=0916 SI=0014 DI=0008 DS=0CE5 ES=5D0A SS=00A7 CS=0CE5 IP=0114 NV UP EI PL NZ NA PO NC 0CE5:0114 90 NOP -T AX=000B BX=0008 CX=000A DX=0000 SP=090E BP=0916 SI=0014 DI=0008 DS=0CE5 ES=5D0A SS=00A7 CS=0CE5 IP=0115 NV UP EI PL NZ NA PO NC 0CE5:0115 8A1E0202 MOV BL,[0202] DS:0202=05 -T AX=000B BX=0005 CX=000A DX=0000 SP=090E BP=0916 SI=0014 DI=0008 DS=0CE5 ES=5D0A SS=00A7 CS=0CE5 IP=0119 NV UP EI PL NZ NA PO NC 0CE5:0119 FECB DEC BL -T AX=000B BX=0004 CX=000A DX=0000 SP=090E BP=0916 SI=0014 DI=0008 DS=0CE5 ES=5D0A SS=00A7 CS=0CE5 IP=011B NV UP EI PL NZ NA PO NC 0CE5:011B FECB DEC BL -T AX=000B BX=0003 CX=000A DX=0000 SP=090E BP=0916 SI=0014 DI=0008 DS=0CE5 ES=5D0A SS=00A7 CS=0CE5 IP=011D NV UP EI PL NZ NA PE NC 0CE5:011D F6FB IDIV BL -T AX=0203 BX=0003 CX=000A DX=0000 SP=090E BP=0916 SI=0014 DI=0008 DS=0CE5 ES=5D0A SS=00A7 CS=0CE5 IP=011F NV UP EI PL NZ AC PO NC 0CE5:011F 90 NOP - 商=3,餘2
__________________
辭源數位化計劃啟始於2014年1月。請拜訪成果。 |
![]() |
![]() |
Basic Member
加入日期: Feb 2002
文章: 27
|
看了asccpu的DEBUG寫法後
按照小P的寫法去寫,小P參考一下吧 商和餘都可正確的求出了 .MODEL SMALL .STACK .DATA A DB 1 B DB 2 E DB 5 D DB ? DR DB ? .CODE .STARTUP MOV AX,4 IMUL B MOV BX,AX MOV AX,3 IMUL A ADD AX,BX MOV DL,E SUB DL,2 IDIV DL MOV D,AL MOV DR,AH .EXIT END
__________________
we cannot know the future because we cannot know the present.......uncertainty principle |
![]() |
![]() |