mov ah,31h ;结束并驻留(al=返回码,dx=驻留区大小) int 21h code ends
end start ;程序结束
3.典型程序模块和典型编程技巧分析:
这个程序中关键是驻留的实现,这里驻留是通过保存现场,开关中断,恢复现场,设置中断类型,设置驻留区大小几个步骤实现的,这里开中断后只检测了是不是1月18号,如果是则显示是李的生日,不是则不显示。
另外,程序中的case0部分的作用是在屏幕的右上角初始化了一个显示窗口,用于显示当天过生日的同学。这里有CH,CL表示左上角的坐标,DH,DL表示右上角的坐标。
而case部分则是一种逐个输出字符的显示字符串的方法,用?作为字符串结束的标志,利用循环,每次输出一个字符,di加1,直到or al,al语句检测到?输出结束,跳出循环。 4.程序框图:
第3题:
1.设计思想和实施方案:
这个程序要求在屏幕上开3个窗口,在键盘输入字符的时候下面的第3个窗口始终显示,上面2个窗口用户可以选择一个显示,对于3个窗口当列数显示满时都会自动向上卷行。三个窗口显示字符和卷行的操作实际上是完全相同
的,现在还需要做的就是上面1,2两个窗口的切换问题,在这里,本人用“1”,“2”来作为2个窗口切换的功能键,也即当在2中显示时按1就转到了1窗口,当在1中显示时按2就转到了2窗口。另外,用ST1,ST2,ST3分别给3个窗口的输入字符计数,以及时的进行卷行操作。 2.程序清单和程序注释: DATA SEGMENT
ST1 DB 0 ST2 DB 0 ST3 DB 0 DATA ENDS
PROGNAM SEGMENT MAIN PROC FAR
ASSUME CS:PROGNAM,DS:DATA START:
PUSH DS SUB AX,AX PUSH AX
MOV AX,DATA MOV DS,AX
CALL CLEAR_SCREEN ;调用设置显示方式的子程序 MOV DI,0 ;置初始状态的DI为0
INPUT:
MOV AH,0
INT 16H ;从键盘读字符,存在AL中 CMP AL,'2'
JE YI ;设定如果按数字2键则跳转到在2号窗口操作 CMP AL,'1'
JE ER ;设定如果按数字1键则跳转到在1号窗口操作 CMP AL,0DH ;设定如果输入回车则结束程序 JE QUIT
CALL SHANG CALL XIA JMP INPUT YI:
MOV DI,1 ;这里置DI为1 JMP INPUT ER:
MOV DI,0 ;这里置DI为0 JMP INPUT
QUIT:
RET
MAIN ENDP
SHANG PROC NEAR
CMP DI,0 ;DI为0在1号窗口输入字符 JNE OUT3 MOV CL,ST1 ADD CL,10
MOV MOV MOV MOV INT
MOV MOV MOV MOV INT
INC CMP JL PUSH MOV MOV MOV MOV MOV MOV MOV MOV INT
POP
OUT2:
JMP OUT3:
MOV ADD
MOV AH,2 DH,15 DL,CL BH,0
10H AH,0EH
BH,0 BL,70H CX,1
10H ST1 ST1, 20 OUT2
AX ST1,0 AH,6
AL,1 CH,5
CL,10 DH,15
DL,30 BH,7 10H AX EXIT CL,ST2 CL,50 AH,2
;置光标位置1号窗口中 ;BH表示页号 ;BL置前景色 ;显示AH中的字符在光标位置;ST1计在窗口1输入字符数目 20则继续输入 ;存储AX的初始植 ;表示屏幕上卷一行 ;CH,CL表示左上角坐标 ;DH,DL表示右上角坐标
;实现字符显示上卷一行 ;如果字符数小于
MOV DL,CL MOV BH,0
INT 10H ;置光标在2号窗口中
MOV AH,0EH
MOV BH,0 ;BH表示页号 MOV BL,70H ;BL置前景色 MOV CX,1
INT 10H
INC ST2 CMP ST2 , 20 JL OUT1 PUSH AX MOV ST2,0 MOV AH,6
MOV AL,1 MOV CH,5
MOV CL,50 MOV DH,15
MOV DL,70 MOV BH,7 INT 10H
POP AX OUT1: EXIT: RET
SHANG ENDP
XIA PROC NEAR MOV CL,ST3 ADD CL,15
MOV AH,2 MOV DH,22 MOV DL,CL MOV BH,0
INT 10H
MOV AH,0EH
MOV BH,0 MOV BL,70H ;显示AH中的字符在光标位置 ST2计在窗口2输入字符数目 ;如果字符数小于20则继续输入 ;表示屏幕上卷一行 ;CH,CL表示左上角坐标 ;DH,DL表示右上角坐标
;实现字符显示上卷一行 ;读出AX的原值 ;在1,2窗口显示字符子程序结束 ;置光标在3号窗口中 ;BH表示页号 ;BL置前景色
;
INT 10H
INC ST3 ;ST3计在窗口2输入字符数目 CMP ST3, 50 ;如果字符数小于50则继续输入 JL EXT MOV ST3,0 MOV AH,6
MOV AL,1 ;表示屏幕上卷一行 MOV CH,18
MOV CL,15 ;CH,CL表示左上角坐标 MOV DH,22
MOV DL,65 ;DH,DL表示右上角坐标 MOV BH,7
INT 10H ;实现字符显示上卷一行 EXT: RET
XIA ENDP
CLEAR_SCREEN PROC NEAR ;设置显示方式和光标初始位置的子程序 PUSH AX
PUSH BX ;保存寄存器的原始内容 PUSH CX PUSH DX
MOV AX,0003H
INT 10H ;设置显示方式为80X25 16色文本 MOV DX,0 MOV AH,2