程式題目:將螢幕分成5列不同顏色,然後中間慢慢開出視窗再出現學號姓名!
--------------------------------------------------------
;延遲時間1秒的巨集程式
Delay MACRO
PUSH AX
PUSH BX
MOV AX,40000
MOV BX,40000
B1:
DEC AX
CMP AX,0
JNE B2
JMP B3
B2:
DEC BX
CMP BX,0
JNE B2
MOV BX,40000
JMP B1
B3:
POP BX
POP AX
endM
.MODEL SMALL
.STACK 100H
.DATA
MSG1 DB '59513042 $'
MSG2 DB 'NAME:FASING SN $'
AC DW 4000
BC DW 4000
.CODE
MAIN PROC
MOV AX,0B800h
MOV DS,AX
MOV SI,0 ;將DS指向彩色螢幕模式第1個字元起始位址B8000H
MOV CX,400 ;彩色螢幕一頁的字元有25列80行,此設定該5列400個字元為所希望設的ASCII字元及字元屬性
L1:
MOV [sI],4720h
ADD sI,2 ;
LOOP L1 ;印出5列 (同種顏色,ASCII碼20H其字元為空白)
MOV CX,400
L2:
MOV [sI],2720h
ADD sI,2
LOOP L2 ;印出另種顏色
MOV CX,400
L3:
MOV [sI],1720h
ADD sI,2
LOOP L3 ;同上
MOV CX,400
L4:
MOV [sI],6720h
ADD sI,2
LOOP L4 ;同上
MOV CX,400
L5:
MOV [sI],3720h
ADD sI,2
LOOP L5 ;同上
MOV AH,6 ;將指定的螢幕視窗範圍上捲(共捲9列)
MOV CX,081AH
MOV DX,1034H
MOV BH,43H
MOV AL,1
INT 10H
INT 10H
INT 10H
INT 10H
INT 10H
INT 10H
INT 10H
INT 10H
INT 10H
MOV AH,2
MOV DH,12
MOV DL,35
XOR BH,BH
INT 10H
MOV AX,@DATA
MOV DS,AX
LEA DX,MSG1
MOV AH,9
INT 21H
MOV AH,2
MOV DH,13
MOV DL,35
XOR BH,BH
INT 10H
Delay
MOV AH,9
LEA DX,MSG2
INT 21H
MOV AH,1 ;純屬不想用debug執行給老師看 ,懶人方法
INT 21H
MOV AH,4CH
INT 21H
MAIN ENDP
END MAIN
------------------------
這是我寫的程式,但是我想將延遲時間這個巨集程式指令插入在螢幕上捲的程式中讓它慢慢的一列一列上捲 在組譯時卻有錯誤!請告訴我為何?及修改! 可以先RUN一次我寫的程式看看! 請看.LST檔來除錯,因為我所看到的錯誤訊息是這巨集程式有Redefinition of symbol 和 Reference to multidefined symbol的訊息,但我這延遲程式本身沒寫錯,因為我在最下面的程式有再呼叫可以使用,請看我最下面呼叫的地方有用紅色表示!
2007-11-14 06:45:39 · 2 個解答 · 發問者 eric 7 in 電腦與網際網路 ➔ 程式設計
我已了解錯誤的地方在於巨集程式中最好別加label,因為我這程式呼叫了2次,而呼叫時會直接把巨集程式copy插進來,所以呼叫2次便有label重覆的問題。現在我已把最下面的那行delay的呼叫給去除,而中間紅色那段 INT 10H ,AH=6 改成了用LOOP 來跑9次 並在中間加入delay 來讓它螢幕慢慢上捲。 但是這程式只執行到上捲完後卻沒再執行了,因為我接下來的程式是要印出字串。
所以請幫我解決這問題,及告訴我是為何?
2007-11-14 10:03:01 · update #1