📄 crtdemo.asm
字号:
;******************************************************
;* 文件名:CrtDemo.asm
;* 创建日期:2001.7.16
;* 作者:陈文尧
;* 功能:测试未来汇编CRT库函数
;* 备注:1.本程序是由Turbo Pascal的一个例子改编而来
;* 2.未来汇编CRT库函数只使用于80*25 16色(模式3)
;******************************************************
include system.inc
;******************************************************
;* 以下代码由汇编专家产生,不要随便修改
;******************************************************
.CODE
ifdef __COM__
org 100h
endif
@@Start:
;------------------------------------------------------
; 初始化数据段
;------------------------------------------------------
InitDS cs
;------------------------------------------------------
; 调用主函数
;------------------------------------------------------
call main
;------------------------------------------------------
; 正常返回DOS
;------------------------------------------------------
ReturnDos
;++++++++++++++++++++++++++++++++++++++++++++++++++++++
;+ 主函数,加入实现程序功能的代码
;++++++++++++++++++++++++++++++++++++++++++++++++++++++
main proc
call Initialize
call MakeWindow
@Continue:
LibCall Getch
;Function keys
cmp al,00h
jz @FunKey
cmp al,CTRL_C
jz @End
cmp al,KEY_ENTER
jz @Crlf
cmp al,KEY_ESC
jz @End
;
;本函数与PutChar对应:前者对于窗口;后者对于整个屏幕
;
LibCall Putch,ax
jmp @Continue
@FunKey:
LibCall Getch
cmp al,ALT_W
jz @MakeWindow
cmp al,ALT_R
jz @RandomText
cmp al,ALT_X
jz @End
cmp al,KEY_UP
jz @Up
cmp al,KEY_LEFT
jz @Left
cmp al,KEY_RIGHT
jz @Right
cmp al,KEY_DOWN
jz @Down
cmp al,KEY_INS
jz @Ins
cmp al,KEY_DEL
jz @Del
jmp @Continue ;Others,then skip
@MakeWindow:
call MakeWindow
jmp @Continue
@RandomText:
call RandomText
jmp @Continue
@Up:
;
;__WhereXY是内部函数(由WhereX、WhereY等调用),但效率比WhereX和WhereY高
;__WhereXY返回值:行在ah或dh,列在al或dl
;这不符合未来汇编库函数规则(规则见Arith.asm),故作为内部函数
;
LibCall __WhereXY
dec ah
jmp short @GotoXY
@Left:
LibCall __WhereXY
dec dx
jmp short @GotoXY
@Right:
LibCall __WhereXY
inc dx
jmp short @GotoXY
@Down:
LibCall __WhereXY
inc ah
@GotoXY:
shr ax,08h
LibCall GotoXY,dx,ax
jmp @Continue
@Ins:
LibCall InsLine
jmp @Continue
@Crlf:
;
;本函数与Crlf对应
;
LibCall PutLn
jmp @Continue
@Del:
LibCall DelLine
jmp @Continue
@End:
LibCall Cls
;
ret
main endp
Initialize proc near
LibCall Cls
LibCall GotoXY,00,24d
LibCall TextBackground,CR_BLACK
LibCall TextColor,CR_WHITE
DisplayMessage Prompt
LibCall Randomize
ret
Initialize endp
MakeWindow proc near
;si=Width,di=Heigh,bx=x,ax=y
LibCall Random,80d-02d
mov si,ax
inc si
inc si
LibCall Random,25d-02d
mov di,ax
inc di
mov ax,80d
sub ax,si
LibCall Random,ax
mov bx,ax
mov ax,24d
sub ax,di
LibCall Random,ax
;bx=x1,ax=y1,si=x2,di=y2
add si,bx
add di,ax
LibCall Window,bx,ax,si,di
;Set color and blackground color
LibCall Random,08h
LibCall TextBackground,ax
LibCall Random,07h
add ax,09h
LibCall TextColor,ax
;
;本函数与Cls对应
;
LibCall ClearScreen
;
ret
MakeWindow endp
RandomText proc near
@Next@Rand:
LibCall Random,100h-20h
add ax,20h
LibCall Putch,ax
LibCall Kbhit
or al,al
jz @Next@Rand
ret
RandomText endp
Prompt db ' Ins-InsLine '
db 'Del-DelLine '
db 1bh,18h,19h,1ah,'-Cursor '
db 'Alt+W-Window '
db 'Alt+R-Random '
db 'Esc-Exit$'
;******************************************************
;* 标志程序结束并指定程序入口
;******************************************************
end @@Start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -