实验14其中的小问题
assume cs:code, ds:datadata segment
datatime: db'yy/mm/dd hh:mm:ss','$'
s0 : db 9,8,7,4,2,0
data ends
;从CMOS ROM取出数据
;把数据换成十进制
;数据存入内存在存入显存
code segment
start:
mov ax,data
mov ds,ax
mov si,offset s0;用si来传给al内存单元
mov es,ax ;写入内存前的准备工作
mov di,offset datatime
mov ax,0
mov cx,6 ;循环6次
;取出CMOS ROM里面的数据
s:
mov al,ds: ;把内存单元传递给al
out 70h,al ;通过70h端口写入内存单元
in al,71 ;通过71h端口读入BCD码
;si自增
;数据转换为十进制
mov ah,al ;用ah保存十位数码
mov cl,4
shr ah,cl ;ah中是十位数值码
and al,00001111b;al中是个位数值码
add ah,30h ;通过ascii变为十进制
add al,30h ;同上
;写入内存中
mov es:,ah ;十位数值码
mov es:,al ;个位数值码
inc si
add di,2
loop s
;从内存传入到显存
mov ah,2 ;设置光标
mov bh,0 ;第0页
mov dh,12 ;行号
mov dl,3 ;列号
int 10h
mov dx,offset datatime ;ds:dx指向显示时间段地址
mov ah,9 ;从21h中断中调用9号子程序
int 21h
mov ax,4c00h
int 21h
code ends
end start
上面写入内存那一段我看大家的答案是add di,3我没有搞懂为什么di是加三的,我理解的是ah跟al分别为8位寄存器两个都写入内存中也就是占用了一个字的大小也就是两个字节,所以我才写的加2,但是大家的答案都是加3,想请教一下为什么谢谢! 你的年月日格式定义为:
datatime: db'yy/mm/dd hh:mm:ss','$'
= y
= y
= /
= m
di+3是为了跳过分隔符 “/”
xieglt 发表于 2020-8-11 08:53
你的年月日格式定义为:
datatime: db'yy/mm/dd hh:mm:ss','$'
= y
哦对di是往内存写的,也就是上面的格式哈哈哈哈,明白了明白了!谢谢答疑!
页:
[1]