32060624_王克_asmhomework_5_1.asm
来自「汇编语言 参考书 包含作业与答案 从入门到精通 通俗易懂」· 汇编 代码 · 共 169 行
ASM
169 行
;a proc to show date&time
;there is also a TSR.
print_string macro string
push ax
push dx
mov dx,offset string
mov ah,9h
int 21h
pop dx
pop ax
endm
print_char macro char
push ax
push dx
mov dl,char
mov ah,2h
int 21h
pop dx
pop ax
endm
;********************************************************
.model small
stack segment stack
WORD 100 DUP(?)
stack ends
DATA segment para
msg_date byte 'Date: ','$'
msg_time byte 0dh,0ah,'Time: ','$'
count_buffer byte 5 DUP(0),'$'
DATA ends
CODE segment para
assume cs:code, ds:data, ss:stack
main proc far
mov ax,data
mov ds,ax
mov es,ax
call show_date
call SHOW_TIME
mov ax,4c00h
INT 21H
RET
main endp
;******************************************************
show_date proc near
;push word ptr row
;mov row,0
;mov col,64
;call SET_CURSOR
mov ah,2ah ;取得系统日期
int 21h ;AL星期,DL日,DH月,CX年
push cx
push dx ;保存取得的日期
push dx
push ax
mov dx,offset msg_date
mov ah,09h
int 21h
pop ax
;add col,6
;call SET_CURSOR
xor ah,ah ;暂不显示星期几
call deal_num
mov dl,' '
mov ah,02h
int 21h
;add col,3
;call SET_CURSOR
pop dx
xor ah,ah
mov al,dh ;输出月
call deal_num
;add col,2
;call SET_CURSOR
mov dl,'/'
mov ah,02h
int 21h
pop dx
xor ah,ah
mov al,dl ;输出日
call deal_num
;add col,4
;call SET_CURSOR
mov dl,' '
mov ah,02h
int 21h
pop cx
mov ax,cx ;输出年
call deal_num
;pop word ptr row
ret
show_date endp
;*******************************************************
SHOW_TIME proc near
mov ah,2ch
INT 21h ;CH:CL hour:minute,DH:DL second:1/100s
print_string msg_time
xor ah,ah
mov al,ch
call DEAL_NUM
print_char ':'
xor ah,ah
mov al,cl
call DEAL_NUM
print_char ':'
xor ah,ah
mov al,dh
call DEAL_NUM
RET
SHOW_TIME ENDP
;*******************************************************
DEAL_NUM PROC NEAR ;将一个字转换成十进制并输出子程序
push ax
push bx
push cx
push dx
push di
MOV CX,5
MOV BX,10
MOV DI,OFFSET count_buffer+4 ;从后往前保存
next:
XOR DX,DX ;将DX清零
DIV BX
OR DL,30H ;也可用ADD DL,30H
MOV BYTE PTR [DI],DL ;将16进制的数转换到ASCII中对应的数,0的ASCII码为 30H (48D)
CMP AX,0
JZ PRINT ;当商为0时,直接去打印,可不打印高位的0.
DEC DI
LOOP next
PRINT:
MOV DX,DI ;从DI开始打印,因为RESULT不一定够5位
MOV AH,9
INT 21H ;调用DOS的21号中断的9号功能,将DB输出
pop di
pop dx
pop cx
pop bx
pop ax
RET
DEAL_NUM ENDP
;*********************************************************
code ends
end main
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?