查看單個文章
舊 2007-05-18, 04:01 PM   #1
k2872869
榮譽勳章

勳章總數
UID -
在線等級:
文章: n/a
精華:
預設 組合語言:要如何延遲

以下是迴力球 要如何使它執行時能延遲迴力球移動速度 能延遲肉眼的看到即可


include bios.h
include dos.h
.model small
.data
x db 2
y db 3
delta_x db 1
delta_y db 1
top db 201,78 dup (205),187,'$'
bottom db 200,78 dup (205),188,'$'
vline db 186,78 dup (' '),186,'$'
.code
begin: mov ax,@data
mov ds,ax
xor ax,ax
print top
mov cx,22
l0: print vline
loop l0
print bottom
l1: write_char 32,1
set_cursor y,x
write_char 09,1
checkx: cmp x,1
je rev_x
cmp x,78
je rev_x
checky: cmp y,1
je rev_y
cmp y,22
je rev_y
addxy: mov al,delta_x
add x,al
mov al,delta_y
add y,al
delay
delay: mov cx,3fffh
delay1: loop delay1
getc
jnz exit
jmp l1
rev_x: neg delta_x
jmp checky
rev_y: neg delta_y
jmp addxy
exit: end_process
.stack
end begin

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
以下是dos.h檔的內容

;*************************************************
;*DOS FUNCTION CALL 01h:讀取按鍵並回映至螢幕上 *
;*傳回: (char)=(AL)=鍵入字元之 ASCII 碼 *
;*************************************************
GETCHAR MACRO char
mov ah,01h
int 21h
mov char,al
ENDM
;***************************************************
;* DOS FUNCTION CALL 02h:印字至螢幕 *
;***************************************************
PUTCHAR MACRO char
mov dl,char
mov ah,02h
int 21h
ENDM
;***************************************************
;*DOS FUNCTION CALL 06h:讀取按鍵不回映不等候 *
;*傳回: ZF=0 (AL)=鍵入字鍵之 ASCII 碼, ZF=1 無按鍵 *
;***************************************************
GETC MACRO
mov dl,0ffh
mov ah,06h
int 21h
ENDM
;***************************************************
;* DOS FUNCTION CALL 09h 在螢幕上顯示一字串 *
;***************************************************
PRINT MACRO string
mov dx,OFFSET string
mov ah,09h
int 21h
ENDM
;***************************************************
;* DOS FUNCTION CALL 0Ah 讀取一字串 *
;***************************************************
INPUT MACRO string
mov dx,OFFSET string
mov ah,0ah
int 21h
ENDM
;*************************************************
;* DOS FUNCTION CALL 4Ch: 結束程式 *
;*************************************************
END_PROCESS MACRO
mov ah,4ch
int 21h
ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
以下是BIOS.h檔內容
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;*************************************************
;* 有用的 BIOS 巨集 *
;*************************************************

;*************************************************
;*INT 10h (AH)=02:設定游標位置 *
;* (DH)=游標列數,範圍在 0-24 之間. *
;* (DL)=游標行數,範圍在 0-79 之間. *
;* (BX)=頁數. *
;*************************************************
SET_CURSOR MACRO row,col
mov dh,row
mov dl,col
mov bx,0
mov ah,2
int 10h
ENDM

;*************************************************
;*INT 10h (AH)=09:由目前游標位置重複顯示一樣的字 *
;* (AL)=字的 ASCII 碼 *
;* (BL)=字的屬性 *
;* (CX)=字數 *
;*************************************************
WRITE_CHAR_ATTR MACRO char,attr,count
mov al,char
mov bl,attr
mov cx,count
mov bh,0
mov ah,09h
int 10h
ENDM
;*************************************************
;*INT 10h (AH)=0A:顯示 cx 個字元,屬性不變 *
;* (AL)=字的 ASCII 碼 *
;* (CX)=字數 *
;*************************************************
WRITE_CHAR MACRO char,count
mov al,char
mov cx,count
mov bx,0
mov ah,0ah
int 10h
ENDM
;*************************************************
;* INT 10h (AH)=0E:在目前游標位置上顯示一字元 *
;* (AL)=字元的 ASCII 碼 *
;*************************************************
TELETYPE_OUT MACRO char
mov al,char
mov bx,0
mov ah,0eh
int 10h
ENDM
;*************************************************
;*INT 16h (AH)=0:讀入下一個鍵 *
;*傳回: (AL)=該鍵的 ASCII 碼 *
;* (AH)=該鍵的 SCAN 碼 *
;*************************************************
KEYBOARD_IO MACRO
mov ah,0
int 16h
ENDM

此帖於 2007-05-18 09:35 PM 被 k2872869 編輯.
 
送花文章: 0, 收花文章: 0 篇, 收花: 0 次
回覆時引用此帖