|
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 |