[2011-06-25 13:58] 课程设计二
assume cs:code
code segment
s: jmp near ptr Uistart
Pick0 db '1) Reset Pc',0 ;重启
Pick1 db '2) Start system',0 ;开始引导的原有系统
pick2 db '3) clock',0 ;查看时间
pick3 db '4) set clock',0 ;设置时间
help1 db 'Picking=1, 2, 3, 4, Up , Do Recognize=Enter',0
;帮助信息
Time db '00/00/00 00:00:00',0
;存放row中读取的本地时间 格式:年/月/日 时:分:秒 动态刷新
tableA1 dw pick0,pick1,pick2,pick3,help1,Time
;偏移地址表
Array1 db 32,9,32,11,32,13,32,15,06,22
;列行表
color1 db 5 dup (6,0)
;颜色表
tableS1 db 2,3,4,5,48h,50h,1ch
;1 2 3 4 up down enter 键的扫描码表
tableP1 dw Countkx,Countkx,Countkx,Countkx,ControlUp,ControlDo,ControlEnter
;按键子列程的偏移地址表
tableE1 dw Enter1,Enter2,Enter3,Enter4
;确认子列程偏移地址表
topp1 dw 0 ;记录选项顶
Port db 9,0,0,8,0,0,7,0,0,4,0,0,2,0,0,0,0 ;存放端口的地址
colorT1 db 0 ;存放颜色参数
tablek1 db 0bh,2,3,4,5,6,7,8,9,0ah,35h,27h,39h,1ch,0eh,1
;0-9 / : 空格 回车 退格 esc 键的扫描码表
topc dw 0
tableA2 dw chark1,chark1,chark1,chark1,chark1,chark1,chark1,chark1,chark1,chark1,chark1,chark1,chark1,EnterM,backspace,Esc4
;0-9 / : 空格 回车 退格 esc 键的扫描码 的处理程序地址
;--------------------------------------- 启动程序数据段-----------------------------------------
Uistart: call Pure
ui0: push cs
pop ds
mov bx,0
mov cx,5
uis1: push cx
mov si,tableA1[bx]
mov dx,word ptr Array1[bx]
mov cl,color1[bx]
call show
add bx,2
pop cx
loop uis1
;----------------------------------- 初始化启动程序界面 -------------------------------------------
Exa0: mov ah,0
int 16h
mov bx,0
mov cx,8
Goon0: cmp tableS1[bx],ah
je Pro0
inc bx
loop Goon0
jmp short Exa0
;--------------------------------------- 判断按键 -----------------------------------------
pro0: add bx,bx
jmp word ptr tableP1[bx]
;---------------------------------------调用相应处理程序------------------------------------
Countkx: push bx
mov bx,topP1
mov color1[bx],6
pop bx
mov color1[bx],0ah
mov topP1,bx
jmp short ui0
;---------------------------数值键的事件处理---------------------------
ControlUp: sub topP1,2
cmp topP1,0fffeh
je bugUp
mov bx,topp1
mov color1[bx+2],6
mov color1[bx],0ah
jmp near ptr Uistart
bugup: mov color1[0],6
mov color1[6],0ah
mov topP1,6
jmp near ptr ui0
;---------------------------- 控制键Up的事件处理----------------------------
ControlDo: add topP1,2
cmp topP1,8
je bugDo
mov bx,topP1
mov color1[bx-2],6
mov color1[bx],0ah
jmp near ptr Uistart
bugDo: mov color1[6],6
mov color1[0],0ah
mov topP1,0
jmp near ptr ui0
;------------------------------- 控制键Do的事件处理------------------------------------
ControlEnter: mov bx,topp1
jmp word ptr tableE1[bx]
;-------------------------------- Enter键的事件处理列表 ----------------------------------
Enter1: mov ax,0ffffh
push ax
mov ax,0
push ax
retf
;--------------------------- 重启 ----------------------------------------
Enter2: mov bx,0
mov es,bx
mov bx,7c00h ;存放磁盘数据的内存地址
mov al,1 ;需要读取的扇区数
mov ch,0 ;磁道号
mov cl,1 ;扇区号
mov dh,0 ;面
mov dl,80h ;驱动器号
mov ah,2 ;2号子程序 功能:读
int 13h ;调用 13h中断列程
mov ax,0
push ax
mov ax,7c00h
push ax
retf
;------------------------------- 引导现有操作系统 -------------------------
Enter3: call Pure
mov colorT1,2 ;颜色计数器
Stime: mov bx,0 ;循环6次从 coms ram 中读取时间信息写入内存time 段并调用show 显示
mov cx,6
Otime: push cx
mov al,Port[bx]
out 70h,al
in al,71h
mov ah,al
mov cl,4
shr ah,cl
add ah,30h
and al,00001111b
add al,30h
mov time[bx],ah
mov time[bx+1],al
add bx,3
pop cx
loop Otime
push cs
pop ds
mov si,tableA1[10]
mov cl,colorT1
mov dl,32
mov dh,13
call show
call wp
in al,60h
cmp al,3bh
jne Cross
inc colorT1
Cross: cmp al,1h
jne Stime
jmp near ptr uistart
;-----------------------------------查看本地时间----------------------------------
Enter4: call Pure ;清屏
timeM: mov bx,0
mov ah,0 ;调用16h号中断的0号子程序 功能从键盘缓冲区读取一个键盘输入返回,如果键盘缓冲区没有数据则循环等待
int 16h ;返回的结果ah 存放扫描码 al 存放ascii码
mov cx,16
Goon1: cmp ah,tablek1[bx] ;用ah中的扫描码循环比较tablek1段中的扫描码等于则调用相应的处理程序
je pr1
inc bx
loop goon1
jmp short timeM
;--------------------------------------- 检测键位 ------------------------------------
pr1: add bx,bx
jmp word ptr tableA2[bx] ;将比较结果tablek1中某个扫描码的偏移地址的1次幂得到相应tablep1段中处理程序的偏移地址
;----------------------------------------- 调用处理程序表中对应的处理程序 --------------------------------------------------
chark1: cmp topc,16
ja timeM
mov si,topc ;用 topc 一个内存字单元模拟sp使用来记录栈顶,每次按下键盘的数字键 topc 加1,按下backspace键topc 减1
mov Time[si],al ;将 al 中的ascii码送入内存 time 段中
inc topc ;记录栈顶
;---------------------------------------------- 0-9 空格 / : 键的事件处理程序 ---------------------------------------
charShow: mov di,0b800h
mov es,di
mov di,13*160+32*2 ;将按下的数字键的ascii码送入到显存
mov bx,0
shows: cmp bx,topc
jne noemptr
mov byte ptr es:[di],' '
jmp short timeM
noemptr: mov al,Time[bx]
mov ah,2
mov es:[di],ax
mov byte ptr es:[di+2],' '
inc bx
add di,2
jmp short shows
;-------------------------------------------- 显示增加或删除的字符 ------------------------------------------------------
EnterM: cmp topc,0 ;判断topc 字符记录栈顶的字符个数是否为0是则返回timeM
je timeM
mov bx,0 ;否则循环6次把time中的ascii码,转换为bcd码后写入cmos ram 中
mov cx,6
bcd: push cx
mov al,Port[bx]
out 70h,al
mov ah,time[bx]
sub ah,30h
mov cl,4
shl ah,cl
mov al,time[bx+1]
sub al,30h
add al,ah
out 71h,al
add bx,3
pop cx
loop bcd
mov topc,0 ;程序返回之前将 topc 计数器清空否则下次进入会发生错误
jmp near ptr uistart
;---------------------------------------- enterm 的事件处理 -------------------------------------
backspace: cmp topc,0 ;判断topc 字符记录栈顶的字符个数是否为0是则返回timeM
je re1
dec topc ;否则字符个数减1后跳转到 charshow 显示字符
jmp short charShow
re1: jmp near ptr timeM
;----------------------------Enter4 程序内的 backspace 的事件处理 ----------------
esc4: jmp near ptr uistart
;----------------------------------------- esc4 返回主界面 ----------------------------------------
;----------------------------------- Enter4 修改本地时间 ----------------------------------
;----------------------------- 子列程show -------------------------------
show: push ax
push cx
push dx
push es
push di
push si
mov di,0b800h ;es:di指向显示的位置
mov es,di
mov ax,160
mul dh
mov dh,0
add dx,dx
add ax,dx
mov di,ax
mov al,cl
show0: mov cl,ds:[si] ;ds:si传递过来的参数
mov ch,0
jcxz rets
mov ch,al
mov es:[di],cx
add di,2
inc si
jmp short show0
rets: pop si
pop di
pop es
pop dx
pop cx
pop ax
ret
;--------------------------------- 子列程Pure(作用清屏)---------------------------------
Pure: push ax
push cx
push ds
push si
;压栈关联寄存器
mov si,0b800h ;初始化需要清屏的显存地址
mov ds,si
mov si,0
mov al,' ' ;给ax寄存器赋空字符然后把它传送到显存达到清屏的效果
mov ah,7
mov cx,2000 ;ax为16为寄存器对应一个显存字单元所以 循环次数=25行*(160列/2)
p: mov [si],ax
add si,2
loop p
pop si
pop ds
pop cx
pop ax
ret
;------------------------------------ wp 功能延时 ----------------------------------
wp: push ax
push dx
mov dx,400h
mov ax,0
dts: sub ax,1
sbb dx,0
cmp ax,0
jne dts
cmp dx,0
jne dts
pop dx
pop ax
ret
endSP: nop
Bst: mov bx,7e0h
mov es,bx
mov bx,0
mov ax,offset endSp - offset s
mov dx,0
mov cx,512
div cx
inc al
mov ch,0
mov cl,2
mov dh,0
mov dl,0
mov ah,2
int 13h
mov ax,7e0h
push ax
mov ax,0
push ax
retf
;--------------------------------------------- 启动程序结束 -----------------------------------------
Intro0 db ' Everyone likes me to call to allow Bin, just contact compilation',0
Intro1 db 'the language selected teacher WangShuang to edit collected materials',0
Intro2 db 'language this book the very good logical arrangement was clear from',0
Intro3 db 'shallow go into deeply followed the sequence and advanced gradually',0
Intro4 db 'the boring and dull and monotonous style of traditional teaching material',0
Intro5 db 'that the vivid interest breaks, it is a requiredteaching material to is a',0
Intro6 db 'raw recruit this.We really appreciate here the confidencethat Wang Shuang.',0
Intro7 db 'Lao gives me study to edit collected materials language. My QQ:172605328',0
Intro8 db 'welcome everyone swap compilation the language progress together.',0
;安装界面显示的介绍信息
Hint0 db 'Please select validation or cancel(Enter/Esc)',0
;安装界面显示的确认或取消选项提示信息
Hint1 db 'This procedure will write to lead procedure in your soft pan',0
Hint2 db 'ma yoveraly your data to invite circumspect to look for!(Y / N)',0
;警告信息
Hint3 db 'Whether exit to install procedure!(Y/ N)',0
;退出信息
Hint4 db 'Write to lead procedure completion to please to press the Enter return!',0
;完成提示信息
Array0 db 3,4,3,5,3,6,3,7,3,8,3,9,3,10,3,11,3,12,18,22
;安装程序列行表
tableA0 dw Intro0,Intro1,Intro2,Intro3,Intro4,Intro5,Intro6,Intro7,Intro8,Hint0,Hint1,Hint2
;介绍信息和确认或取消选项和提示信息的偏移地址表
start: call Pure
push cs
pop ds
mov bx,0
mov cx,10
uiS: push cx
mov si,tableA0[bx]
mov dx,word ptr Array0[bx]
mov cl,2
call show
add bx,2
pop cx
loop uis
;----------------------------------------- 安装界面自序信息及提示 ----------------------------------
JudgeI: in al,60h ;循环检测键盘端口60h 调用相应程序响应事件
cmp al,1ch
je EnterI
cmp al,1h
je EscI
jmp short JudgeI
;----------------------------------------- 判断按键 -----------------------------
EnterI: call pure
push cs
pop ds
mov si,tableA0[14h]
mov dh,12
mov dl,10
mov cx,2
enters: push cx
mov cl,4
call show
add dh,2
mov si,tableA0[16h]
pop cx
loop enters
; ----显示一条警告信息
exm1: in al,60h
cmp al,15h
je keyy0
cmp al,31h
je keyy
jmp short exm1
keyy0: call pure
push cs
pop es
mov bx,offset bst
mov al,1
mov ch,0
mov cl,1
mov dh,0
mov dl,0
mov ah,3
int 13h
mov bx,offset s
mov ax,offset endsP-offset s
mov dx,0
mov cx,512
div cx
inc al
mov ch,0
mov cl,2
mov dh,0
mov dl,0
mov ah,3
int 13h
push cs
pop ds
mov si,offset Hint4
mov cl,2
mov dh,12
mov dl,5
call show
x1: in al,60h
cmp al,1ch
je keyy1
jmp short x1
;------------------------------------------ enter 键的事件处理 ------------------------------
escI: call pure
push cs
pop ds
mov si,offset Hint3
mov dl,20
mov dh,13
mov cl,2
call show
exm0: in al,60h
cmp al,15h
je keyy1
cmp al,31h
je keyy
jmp short exm0
keyy: jmp near ptr start
keyy1: call pure
;------------------------------------------------ esc 键事件处理 ----------------------------------------------------------
mov ax,4c00h
int 21h
;----------------------------------------------- 安装程序返回 --------------------------------------------------
code ends
end start
code segment
s: jmp near ptr Uistart
Pick0 db '1) Reset Pc',0 ;重启
Pick1 db '2) Start system',0 ;开始引导的原有系统
pick2 db '3) clock',0 ;查看时间
pick3 db '4) set clock',0 ;设置时间
help1 db 'Picking=1, 2, 3, 4, Up , Do Recognize=Enter',0
;帮助信息
Time db '00/00/00 00:00:00',0
;存放row中读取的本地时间 格式:年/月/日 时:分:秒 动态刷新
tableA1 dw pick0,pick1,pick2,pick3,help1,Time
;偏移地址表
Array1 db 32,9,32,11,32,13,32,15,06,22
;列行表
color1 db 5 dup (6,0)
;颜色表
tableS1 db 2,3,4,5,48h,50h,1ch
;1 2 3 4 up down enter 键的扫描码表
tableP1 dw Countkx,Countkx,Countkx,Countkx,ControlUp,ControlDo,ControlEnter
;按键子列程的偏移地址表
tableE1 dw Enter1,Enter2,Enter3,Enter4
;确认子列程偏移地址表
topp1 dw 0 ;记录选项顶
Port db 9,0,0,8,0,0,7,0,0,4,0,0,2,0,0,0,0 ;存放端口的地址
colorT1 db 0 ;存放颜色参数
tablek1 db 0bh,2,3,4,5,6,7,8,9,0ah,35h,27h,39h,1ch,0eh,1
;0-9 / : 空格 回车 退格 esc 键的扫描码表
topc dw 0
tableA2 dw chark1,chark1,chark1,chark1,chark1,chark1,chark1,chark1,chark1,chark1,chark1,chark1,chark1,EnterM,backspace,Esc4
;0-9 / : 空格 回车 退格 esc 键的扫描码 的处理程序地址
;--------------------------------------- 启动程序数据段-----------------------------------------
Uistart: call Pure
ui0: push cs
pop ds
mov bx,0
mov cx,5
uis1: push cx
mov si,tableA1[bx]
mov dx,word ptr Array1[bx]
mov cl,color1[bx]
call show
add bx,2
pop cx
loop uis1
;----------------------------------- 初始化启动程序界面 -------------------------------------------
Exa0: mov ah,0
int 16h
mov bx,0
mov cx,8
Goon0: cmp tableS1[bx],ah
je Pro0
inc bx
loop Goon0
jmp short Exa0
;--------------------------------------- 判断按键 -----------------------------------------
pro0: add bx,bx
jmp word ptr tableP1[bx]
;---------------------------------------调用相应处理程序------------------------------------
Countkx: push bx
mov bx,topP1
mov color1[bx],6
pop bx
mov color1[bx],0ah
mov topP1,bx
jmp short ui0
;---------------------------数值键的事件处理---------------------------
ControlUp: sub topP1,2
cmp topP1,0fffeh
je bugUp
mov bx,topp1
mov color1[bx+2],6
mov color1[bx],0ah
jmp near ptr Uistart
bugup: mov color1[0],6
mov color1[6],0ah
mov topP1,6
jmp near ptr ui0
;---------------------------- 控制键Up的事件处理----------------------------
ControlDo: add topP1,2
cmp topP1,8
je bugDo
mov bx,topP1
mov color1[bx-2],6
mov color1[bx],0ah
jmp near ptr Uistart
bugDo: mov color1[6],6
mov color1[0],0ah
mov topP1,0
jmp near ptr ui0
;------------------------------- 控制键Do的事件处理------------------------------------
ControlEnter: mov bx,topp1
jmp word ptr tableE1[bx]
;-------------------------------- Enter键的事件处理列表 ----------------------------------
Enter1: mov ax,0ffffh
push ax
mov ax,0
push ax
retf
;--------------------------- 重启 ----------------------------------------
Enter2: mov bx,0
mov es,bx
mov bx,7c00h ;存放磁盘数据的内存地址
mov al,1 ;需要读取的扇区数
mov ch,0 ;磁道号
mov cl,1 ;扇区号
mov dh,0 ;面
mov dl,80h ;驱动器号
mov ah,2 ;2号子程序 功能:读
int 13h ;调用 13h中断列程
mov ax,0
push ax
mov ax,7c00h
push ax
retf
;------------------------------- 引导现有操作系统 -------------------------
Enter3: call Pure
mov colorT1,2 ;颜色计数器
Stime: mov bx,0 ;循环6次从 coms ram 中读取时间信息写入内存time 段并调用show 显示
mov cx,6
Otime: push cx
mov al,Port[bx]
out 70h,al
in al,71h
mov ah,al
mov cl,4
shr ah,cl
add ah,30h
and al,00001111b
add al,30h
mov time[bx],ah
mov time[bx+1],al
add bx,3
pop cx
loop Otime
push cs
pop ds
mov si,tableA1[10]
mov cl,colorT1
mov dl,32
mov dh,13
call show
call wp
in al,60h
cmp al,3bh
jne Cross
inc colorT1
Cross: cmp al,1h
jne Stime
jmp near ptr uistart
;-----------------------------------查看本地时间----------------------------------
Enter4: call Pure ;清屏
timeM: mov bx,0
mov ah,0 ;调用16h号中断的0号子程序 功能从键盘缓冲区读取一个键盘输入返回,如果键盘缓冲区没有数据则循环等待
int 16h ;返回的结果ah 存放扫描码 al 存放ascii码
mov cx,16
Goon1: cmp ah,tablek1[bx] ;用ah中的扫描码循环比较tablek1段中的扫描码等于则调用相应的处理程序
je pr1
inc bx
loop goon1
jmp short timeM
;--------------------------------------- 检测键位 ------------------------------------
pr1: add bx,bx
jmp word ptr tableA2[bx] ;将比较结果tablek1中某个扫描码的偏移地址的1次幂得到相应tablep1段中处理程序的偏移地址
;----------------------------------------- 调用处理程序表中对应的处理程序 --------------------------------------------------
chark1: cmp topc,16
ja timeM
mov si,topc ;用 topc 一个内存字单元模拟sp使用来记录栈顶,每次按下键盘的数字键 topc 加1,按下backspace键topc 减1
mov Time[si],al ;将 al 中的ascii码送入内存 time 段中
inc topc ;记录栈顶
;---------------------------------------------- 0-9 空格 / : 键的事件处理程序 ---------------------------------------
charShow: mov di,0b800h
mov es,di
mov di,13*160+32*2 ;将按下的数字键的ascii码送入到显存
mov bx,0
shows: cmp bx,topc
jne noemptr
mov byte ptr es:[di],' '
jmp short timeM
noemptr: mov al,Time[bx]
mov ah,2
mov es:[di],ax
mov byte ptr es:[di+2],' '
inc bx
add di,2
jmp short shows
;-------------------------------------------- 显示增加或删除的字符 ------------------------------------------------------
EnterM: cmp topc,0 ;判断topc 字符记录栈顶的字符个数是否为0是则返回timeM
je timeM
mov bx,0 ;否则循环6次把time中的ascii码,转换为bcd码后写入cmos ram 中
mov cx,6
bcd: push cx
mov al,Port[bx]
out 70h,al
mov ah,time[bx]
sub ah,30h
mov cl,4
shl ah,cl
mov al,time[bx+1]
sub al,30h
add al,ah
out 71h,al
add bx,3
pop cx
loop bcd
mov topc,0 ;程序返回之前将 topc 计数器清空否则下次进入会发生错误
jmp near ptr uistart
;---------------------------------------- enterm 的事件处理 -------------------------------------
backspace: cmp topc,0 ;判断topc 字符记录栈顶的字符个数是否为0是则返回timeM
je re1
dec topc ;否则字符个数减1后跳转到 charshow 显示字符
jmp short charShow
re1: jmp near ptr timeM
;----------------------------Enter4 程序内的 backspace 的事件处理 ----------------
esc4: jmp near ptr uistart
;----------------------------------------- esc4 返回主界面 ----------------------------------------
;----------------------------------- Enter4 修改本地时间 ----------------------------------
;----------------------------- 子列程show -------------------------------
show: push ax
push cx
push dx
push es
push di
push si
mov di,0b800h ;es:di指向显示的位置
mov es,di
mov ax,160
mul dh
mov dh,0
add dx,dx
add ax,dx
mov di,ax
mov al,cl
show0: mov cl,ds:[si] ;ds:si传递过来的参数
mov ch,0
jcxz rets
mov ch,al
mov es:[di],cx
add di,2
inc si
jmp short show0
rets: pop si
pop di
pop es
pop dx
pop cx
pop ax
ret
;--------------------------------- 子列程Pure(作用清屏)---------------------------------
Pure: push ax
push cx
push ds
push si
;压栈关联寄存器
mov si,0b800h ;初始化需要清屏的显存地址
mov ds,si
mov si,0
mov al,' ' ;给ax寄存器赋空字符然后把它传送到显存达到清屏的效果
mov ah,7
mov cx,2000 ;ax为16为寄存器对应一个显存字单元所以 循环次数=25行*(160列/2)
p: mov [si],ax
add si,2
loop p
pop si
pop ds
pop cx
pop ax
ret
;------------------------------------ wp 功能延时 ----------------------------------
wp: push ax
push dx
mov dx,400h
mov ax,0
dts: sub ax,1
sbb dx,0
cmp ax,0
jne dts
cmp dx,0
jne dts
pop dx
pop ax
ret
endSP: nop
Bst: mov bx,7e0h
mov es,bx
mov bx,0
mov ax,offset endSp - offset s
mov dx,0
mov cx,512
div cx
inc al
mov ch,0
mov cl,2
mov dh,0
mov dl,0
mov ah,2
int 13h
mov ax,7e0h
push ax
mov ax,0
push ax
retf
;--------------------------------------------- 启动程序结束 -----------------------------------------
Intro0 db ' Everyone likes me to call to allow Bin, just contact compilation',0
Intro1 db 'the language selected teacher WangShuang to edit collected materials',0
Intro2 db 'language this book the very good logical arrangement was clear from',0
Intro3 db 'shallow go into deeply followed the sequence and advanced gradually',0
Intro4 db 'the boring and dull and monotonous style of traditional teaching material',0
Intro5 db 'that the vivid interest breaks, it is a requiredteaching material to is a',0
Intro6 db 'raw recruit this.We really appreciate here the confidencethat Wang Shuang.',0
Intro7 db 'Lao gives me study to edit collected materials language. My QQ:172605328',0
Intro8 db 'welcome everyone swap compilation the language progress together.',0
;安装界面显示的介绍信息
Hint0 db 'Please select validation or cancel(Enter/Esc)',0
;安装界面显示的确认或取消选项提示信息
Hint1 db 'This procedure will write to lead procedure in your soft pan',0
Hint2 db 'ma yoveraly your data to invite circumspect to look for!(Y / N)',0
;警告信息
Hint3 db 'Whether exit to install procedure!(Y/ N)',0
;退出信息
Hint4 db 'Write to lead procedure completion to please to press the Enter return!',0
;完成提示信息
Array0 db 3,4,3,5,3,6,3,7,3,8,3,9,3,10,3,11,3,12,18,22
;安装程序列行表
tableA0 dw Intro0,Intro1,Intro2,Intro3,Intro4,Intro5,Intro6,Intro7,Intro8,Hint0,Hint1,Hint2
;介绍信息和确认或取消选项和提示信息的偏移地址表
start: call Pure
push cs
pop ds
mov bx,0
mov cx,10
uiS: push cx
mov si,tableA0[bx]
mov dx,word ptr Array0[bx]
mov cl,2
call show
add bx,2
pop cx
loop uis
;----------------------------------------- 安装界面自序信息及提示 ----------------------------------
JudgeI: in al,60h ;循环检测键盘端口60h 调用相应程序响应事件
cmp al,1ch
je EnterI
cmp al,1h
je EscI
jmp short JudgeI
;----------------------------------------- 判断按键 -----------------------------
EnterI: call pure
push cs
pop ds
mov si,tableA0[14h]
mov dh,12
mov dl,10
mov cx,2
enters: push cx
mov cl,4
call show
add dh,2
mov si,tableA0[16h]
pop cx
loop enters
; ----显示一条警告信息
exm1: in al,60h
cmp al,15h
je keyy0
cmp al,31h
je keyy
jmp short exm1
keyy0: call pure
push cs
pop es
mov bx,offset bst
mov al,1
mov ch,0
mov cl,1
mov dh,0
mov dl,0
mov ah,3
int 13h
mov bx,offset s
mov ax,offset endsP-offset s
mov dx,0
mov cx,512
div cx
inc al
mov ch,0
mov cl,2
mov dh,0
mov dl,0
mov ah,3
int 13h
push cs
pop ds
mov si,offset Hint4
mov cl,2
mov dh,12
mov dl,5
call show
x1: in al,60h
cmp al,1ch
je keyy1
jmp short x1
;------------------------------------------ enter 键的事件处理 ------------------------------
escI: call pure
push cs
pop ds
mov si,offset Hint3
mov dl,20
mov dh,13
mov cl,2
call show
exm0: in al,60h
cmp al,15h
je keyy1
cmp al,31h
je keyy
jmp short exm0
keyy: jmp near ptr start
keyy1: call pure
;------------------------------------------------ esc 键事件处理 ----------------------------------------------------------
mov ax,4c00h
int 21h
;----------------------------------------------- 安装程序返回 --------------------------------------------------
code ends
end start
评论次数(0) |
浏览次数(637) |
类型(汇编作业) |
收藏此文 |