题目:按照主程序与子程序的结构,输入并编写读出CMOS RAM端口程序,以“年/月/日 时:分:秒”的格式,显示当前时间。
源程序:
assume cs:code,ds:data
data segment
db 9,8,7,4,2,0 ;储存各时间位置
db "yy/mm/dd hh:mm:ss",0 ;输出格式
data ends
code segment
start: mov ax,data
mov ds,ax ;data段挂载到ds
mov bx,0 ;bx初始化为零
mov si,6 ;类似于指针,指向输出格式
mov cx,6 ;循环6次
s: push cx ;将循环次数入栈保存
mov al,[bx] ;将ds:[bx]的数据传给al
out 70h,al ;将al的值传到70h端口,找到端口地址
in al,71h ;将71h存的值传给al,得到对应时间
mov ah,al ;保存al的值
mov cl,4 ;循环四次,为下一行右移做准备
shr ah,cl ;二进制右移cl位,得到十位数
add ah,30h ;加30h,得到ASCII码
and al,0fh ;与00001111做与运算,得到个位数
add al,30h ;加30h,得到ASCII码
mov [si],ah ;将ah的值传给ds:[si],例如yy的第一个y
mov [si+1],al ;将al的值传给下一位,yy的第二个y
inc bx ;bx加一,指向第二个时间位置
add si,3 ;跳到下一个位置,yy到mm需要跳三次
pop cx ;将保存的循环次数传回cx
loop s ;循环cx次
mov si,6 ;类似于指针,指向输出格式
mov dl,12 ;保存行数,12行
mov dh,20 ;保存列数,20列
mov cl,17h
call show
mov ax,4c00h
int 21h
;按格式输出
show: push es
push bx
push cx
push si
push ax
mov ax,0b800h
mov es,ax
mov al,160
mul dh
mov bx,ax
mov al,2
mul dl
add bx,ax
mov al,cl
m0: mov cl,[si]
mov ch,0
jcxz m1
mov es:[bx],cl
mov es:[bx+1],al
inc si
add bx,2
loop m0
jmp m1
m1: pop ax
pop si
pop cx
pop bx
pop es
ret
code ends
end start
运行结果截图:
原文地址:https://www.cnblogs.com/godfriend/p/10981990.html
时间: 2024-10-09 03:17:30