ASSUME CS:codesg
data SEGMENT
DB "/",":"
data ENDS
stack SEGMENT
DW 0,0
stack ENDS
codesg SEGMENT
start: MOV AX,data
MOV DS,AX
MOV SI,0
MOV AX,stack
MOV SS,AX
MOV SP,4
MOV AX,0b800h
MOV ES,AX
MOV DI,12*160+30*2 ;取屏幕中间位置
MOV BX,0
MOV DL,9
MOV CX,3
NYR: PUSH CX
MOV AL,DL
OUT 70h,AL
IN AL,71h
MOV AH,AL ;假设al中为读出的8位BCD码
MOV CL,4
SHR AH,CL ;ah右移4位,便移除了个位的BCD码
ADD AH,30h
AND AL,00001111b ;al保留下来的便是个位BCD码
ADD AL,30h
MOV ES:[DI+BX],AH
MOV ES:[DI+BX+2],AL
MOV AL,DS:[SI]
MOV ES:[DI+BX+4],AL
ADD BX,6
DEC DL
POP CX
LOOP NYR ;取得年月日
MOV BYTE PTR ES:[DI+16],0 ;去掉日后面的“/”
ADD BX,2 ;中间空格
MOV DL,4
MOV CX,3
MFS: PUSH CX
MOV AL,DL
OUT 70h,AL
IN AL,71h
MOV AH,AL ;假设al中为读出的8位BCD码
MOV CL,4
SHR AH,CL ;ah右移4位,便移除了个位的BCD码
ADD AH,30h
AND AL,00001111b ;al保留下来的便是个位BCD码
ADD AL,30h
MOV ES:[DI+BX],AH
MOV ES:[DI+BX+2],AL
MOV AL,DS:[SI+1]
MOV ES:[DI+BX+4],AL
ADD BX,6
SUB DL,2
POP CX
LOOP MFS ;取得秒分时
MOV BYTE PTR ES:[DI+36],0 ;去掉秒后面的“:”
JMP s ;实时读取时间
MOV AX,4c00h
INT 21h
codesg ENDS
END start
353



被折叠的 条评论
为什么被折叠?



