📄 课堂测试参考答案——请不要删,并请相互转告!.txt
字号:
课堂测试题二答案
一、简答题
1. INT 1Ch的执行过程
(1) SP=SP-2,SS:[SP]<- PSW
(2) SP=SP-2,SS:[SP]<- INT 1CH下一条指令的CS
(3) SP=SP-2,SS:[SP]<- INT 1CH下一条指令的ip
(4) tf=0,if=0
(5) cs=0000h:[1ch*4+2],ip=0000h:[1ch*4] ;或者其他的说法
然后转入该中断处理程序
2. h->l:
除法溢出〉断点中断〉INTR(可屏蔽中断)
二、编写子程序或宏,实现:
1. 在屏幕l行,m列显示属性为Attr的字符,重复三次。
DISP_CHAR PROC NEAR
;IN BL=Attr,DH=l,DL=m,AL=CHAR
PUSH BX
PUSH AX
MOV BH,0
MOV AH,2
INT 10H ;SET CUESOR
POP AX
POP BX
MOV CX,3
MOV AH,9
INT 10H
RET
DISP_CHAR ENDP
或者:
DISP_CHAR PROC NEAR
;IN BL=Attr,DH=l,DL=m,AL=CHAR
PUSH ES
PUSH AX
MOV AX,0B800H
MOV ES,AX
MOV AL,DH
MOV CL,80*2
MUL CL ;AX=160*L
SHL DL,1 ;m*2
XOR DH,DH
ADD AX,DX ;AX=L*160+M*2
MOV DI,AX
MOV CX,3
POP AX
MOV AH,BL ;AH=Attr,AL=CHAR
CLD
REP MOVSW
POP ES
RET
DISP_CHAR ENDP
2. Getstring()
;参见侧试一的子程序
三、编写TSR,定时早8点响铃。
要点:(1) TSR设计.
(2) 将问题分解为IR(定时比较、响铃),MAIN.共三个部分
CODE SEGMENT PARA
ASSUME CS:CODE,DS:CODE
INT1C_H PROC FAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
PUSH BP
PUSH DS
PUSH ES
STI
CALL COMPARE
JNC RETURN
CALL BEEP
RETURN: CLI
POP ES
POP DS
POP BP
POP DI
POP SI
POP DX
POP CX
POP BX
POP AX
IRET
INT1C_H ENDP
BEEP PROC NEAR
MOV AH,2
MOV DL,07H ;BELL
INT 21H
RET
BEEP ENDP
COMPARE PROC NEAR
;调用INT 1ah/AH=2,获得时间
;比较hh=08,mm=00,ll=00则CF=1;
;参见P197(熊老师书)
MOV AH,2
INT 1AH ;CH=HH,CL=MM,DH=LL
CMP CH,08H
JNZ L1
CMP CL,00H
JNZ L1
CMP DH,00H
JNZ L1
STC
RET
L1: CLC
RET
COMPARE ENDP
H_LEN EQU $-0
MAIN PROC FAR
MOV AX,CODE
MOV DS,AX
LEA DX,INT1C_H
MOV AX,251CH
INT 21H
MOV AX,3100H
MOV DX,(H_LEN+15)/16+10H
INT 21H
MAIN ENDP
CODE ENDS
END MAIN
MAIN PROC FAR
MOV AX,DATA
MOV DS,AX
MOV ES,AX ;对串处理,最好先在主程序中设置好ES
LEA DI,S1
CALL Getstr ;字符串首地址在ES:DI中,以00h结尾。CX=长度
MOV LEN1,CX
LEA DI,S2
CALL Getstr ;字符串首地址在ES:DI中,以00h结尾。CX=长度
MOV LEN2,CX
LEA SI,S1
LEA DI,S2
CALL Strcmp ;比较s1--ds:si,s2--es:di
;返回:AX=0,相等;AX=ffffh(-1),s1<s2;AX=1,s1>s2
CLD
LEA DI,S1_S2 ;初始条件
CMP AX,1
JBE L1 ;s1<=s2
;ELSE l2: s1>s2
L2: LEA SI,S2
MOV CX,LEN2
REP MOVSB
LEA SI,S1
MOV CX,LEN1
REP MOVSB
JMP SHORT L3
L1: LEA SI,S1
MOV CX,LEN1
REP MOVSB
LEA SI,S2
MOV CX,LEN2
REP MOVSB
L3: MOV AX,4200H
INT 21H
MAIN ENDP
Getstr PROC NEAR
;标准的自程序
;IN:ES:DI=addr
;RETURN CX=LEN ASCIIZ STRING;ESC EXIT
CLD
XOR CX,CX
LP1: INC CX
MOV AX,0
INT 16H
STOSB
CMP AL,1BH ;ESC
JNZ LP1
MOV BYTE PTR ES:[DI],00H
RET
;也可以用AH=1/INT 21h来输入,可以自己设置结束条件(如0Dh)
Getstr ENDP
Strcmp PROC NEAR
;标准的子程序
;IN:DS:SI=s1;ES:DI=s2,
;RETURN AX=-1,0,1: s1<,=,>s2
PUSH SI
PUSH DI
CLD
;熊老师书P142,有两种方法
LP2: LODSB
CMP AL,ES:[DI]
JA PL1
JB PL2
CMP AL,0
JZ PL3
INC DI
JMP SHORT LP2
PL1: MOV AX,0FFFFH ;S1<S2
JMP SHORT PL4
PL2: MOV AX,1 ;s2>S2
JMP SHORT PL4
PL1: MOV AX,0 ;S1=S2
JMP SHORT PL4
PL4: POP DI
POP SI
RET
Strcmp ENDP
CODE ENDS
END MAIN ;关键是条理要清晰
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -