瀏覽單個文章
asccpu
Master Member
 

加入日期: Jan 2002
您的住址: U.S.S AGC
文章: 1,669
引用:
作者小P
太高深了...不知道asccpu兄,對我最後修改的程式碼有什麼高見...謝謝^^


.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, 10:25 PM #12
回應時引用此文章
asccpu離線中