做网站建设给人销售怎样注册网站建立网页
第14章 端口
检测点14.1
(1).编程,读取CMOS RAM的2号单元的内容。
mov al,2 ;向al写入2
out 70,al ;将2送入端口70h
in al,71 ;从端口71h读取2号单元的内容
在CMOS RAM中用6个字节存放当前时间(以BCD码形式存放),地址02中存放的是分。
即从2号单元中读到的内容是当前时间的分钟。如下图所示:
当前分钟为59分
程序运行后al中内容如下:
(2).编程,向CMOS RAM的2号单元写入0。
mov al,2
out 70,al
mov al,0
out 71,al
检测点14.2
编程,用加法和移位指令计算(ax)=(ax)*10
提示,(ax ×10)=(ax)×2+(ax)×8。
如:计算2 ×10 = 20
mov bx,2 ;将2放入bx中
mov cl,3 ;将3放入cl中(移位位数)
shl bx,cl ;将bx中的内容左移3位
mov ax,bx ;将移位后的数据暂存到ax中
mov bx,2 ;将2放入bx
shl bx,1 ;左移1位
add ax,bx ;加到ax中
实验14 访问CMOS RAM
编程,以“年/月/日 时:分:秒"的格式,显示当前的日期、时间。
注意:CMOS RAM中存储着系统的配置信息,除了保存时间信息的单元外,不要向其他的单元中写入内容,否则将引起一些系统错误。
assume cs:codedata segmentdb 9,8,7,4,2,0db '// ::'
data endscode segment
start:mov ax,data mov ds,ax ;ds指向数据段(CMOS RAM时间单元地址)mov ax,0b800h mov es,ax ;es指向显存空间mov di,0 ;使用di访问时间单元地址mov si,0 ;使用si访问显存空间mov cx,6 ;循环6次s:push cx ;cx入栈mov al,ds:[di] ;将时间单元地址送入alout 70h,al ;将时间单元地址送入70h端口in al,71h ;从71h端口读取时间数据送入almov ah,al ;al送入ahmov cl,4 ;4送入cl(移位位数)shr ah,cl ;ah左移4位(分离10位)and al,00001111b ;分离个位add ah,30h ;十位转换成ASCIIadd al,30h ;个位转换成ASCIImov byte ptr es:[160*12+40*2+si],ah ;十位写入显存空间mov byte ptr es:[160*12+40*2+si+2],al ;个位写入显存空间mov al,ds:[di+6] ;取出间隔字符放入almov byte ptr es:[160*12+40*2+si+4],al ;间隔字符写入显存空间inc di ;di+1指向下一个字符add si,6 ;si+6指向下一个显存空间pop cx ;cx出栈loop s ;重新循环mov ax,4c00hint 21hcode ends
end start
将上面程序在DOS中运行后效果如下: