请教访问CMOS RAM显示当前日期时间的一个代码
本帖最后由 遒羽 于 2013-3-4 20:00 编辑;以“年/月/日 时:分:秒”的格式,显示当前的日期,时间assume cs:code
code segment
start: mov ax,0
mov al,9;先访问年
mov si,0
mov cx,6 ;6种数据循环6次
s: push cx
push ax
out 70h,al
in al,71h
mov ah,al
mov cl,4
shr ah,al
and al,00001111b
add ah,30h
add al,30h
mov bx,0b800h
mov es,bx
mov byte ptr es:,ah
mov byte ptr es:,al
pop ax
dec ax ;指向前一数据单元
jmp s1
s0: pop cx
add si,6
loop s
mov ax,4c00h
int 21h
s1: cmp ax,10 ;
ja,s0
cmp ax,0
je s0
cmp ax,6
ja s2 ;ax>6,跳到年月日那边显示‘/’
je s3 ;ax=6,跳到日结尾显示空格
je s4 ;ax<6,跳到时分秒那边显示‘:’
s2: mov byte ptr es:,'/'
jmp s0
s3: sub ax,2
jmp s0
s4: sub ax,1
mov byte ptr es:,';'
jmp s0
code ends
end start请教 :代码中03 mov ax,0是不是用来指示当前屏幕显示的位置??
代码中22 dec ax ;指向前一数据单元 怎么 解释??ax一开始存放0,自减一次有什么意义呢??
代码中33 s1循环中为什么用cmp ax,10????
谢谢!!
代码11: shr ah,al 应该是 shr ah,cl 吧 左移四位
mov ax,0 mov al,9
我习惯 mov ax,9 ok
好像 写mov ax,0这个没用吧
上一个指向9
现在减一 当然指向前一个 单元8了
就我认为 好像真没啥用 ax 会大于10吗?
话说 如果 只写mov al,9 还真没准 大于10;
s3 少写 打印空格的内容了吧 看来是我错了 什么都不打就是空格:L
还有你上边19;20 行不需要 si吗???
1.ax 开始存 9 年
2.减一次 1 是8 月>6 跳 s2
3.再减一次 是7 日>6 跳 s2
4.再减一次 是6 等于6跳到 s3 又减了个 2 是4 时
5.再减一次 是3 小于6跳到 s4 又减了个 1 是2 分 s4这里应该是 jl吧小于吗不是
6.再减一次 是1 小于6跳到 s4 又减了个 1 是0 分
7.再减一次 小于零 跳 s0 cx =0 退出 loop s
结束
半生缘 发表于 2013-3-4 19:51 static/image/common/back.gif
代码11: shr ah,al 应该是 shr ah,cl 吧 左移四位
mov ax,0 mov al,9
我习惯 mov ax,9 ok
多谢你的精彩回答!!
页:
[1]