考虑数据结构,一定形式的数据结构,决定了要采用的算法。因为要显示6个时间数据,本程序以循环为主,依次处理6个数据。主函数调用了以下三个函数:
read:从70h 71h端口读取BCD格式的时间值,存入数据段
convert:把数据段BCD码格式的数据转换成ascii码格式
show:把数据段的ascii码表示的时间数据按顺序输出至屏幕。
代码如下,不知道汇编代码该选哪种代码类型,“;”后未注释
assume cs:code,ds:data
data segment
dw 9,8,7,4,2,0;cmos 的待读取地址单元,由bx指向,其后存储BCD码和ascii码
db 47,47,32,58,58,32; /47 空格32 :58 ,由si指向,时间数字后的格式符
data ends
code segment
main:
mov ax,data
mov ds,ax
mov bx,0
mov si,12;设置数据段
mov cx,6
call read
call convert
mov ax,0b800h
mov es,ax
mov di,160 * 12 + 32 * 2
call show
mov ax,4c00h
int 21h
read:
push ax
push bx
push cx
lpread:
mov ax,[bx]
out 70h,al
in al,71h
mov [bx],ax
add bx,2
loop lpread
pop cx
pop bx
pop ax
ret
convert:
push ax
push bx
push cx
lpconver:
push cx
mov ax,[bx]
mov ah,al
mov cl,4
shr al,cl
and ah,00001111b
add ah,30h
add al,30h
mov [bx],ax
pop cx
add bx,2
loop lpconver
pop cx
pop bx
pop ax
ret
show:
push ax
push bx
push cx
push si
push di
mov ah,29h;显示属性
lpshow:
mov al,[bx]
mov es:[di],ax
add di,2
inc bx
mov al,[bx]
mov es:[di],ax
add di,2
mov al,ds:[si]
mov es:[di],ax
add di,2
inc bx
inc si
loop lpshow
pop di
pop si
pop cx
pop bx
pop ax
ret
code ends
end main
测试效果如下:
谢谢阅读