《汇编语言》第3版 (王爽) 第14章

第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:code

data segment
	db 9,8,7,4,2,0
	db '// ::'
data ends

code 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] ;将时间单元地址送入al
      out 70h,al ;将时间单元地址送入70h端口
      in al,71h  ;71h端口读取时间数据送入al

      mov ah,al ;al送入ah
      mov cl,4  ;4送入cl(移位位数)
      shr ah,cl ;ah左移4位(分离10位)
      and al,00001111b ;分离个位
        
      add ah,30h ;十位转换成ASCII
      add al,30h ;个位转换成ASCII
      

      mov 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] ;取出间隔字符放入al
      mov 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,4c00h
      int 21h

code ends
end start

将上面程序在DOS中运行后效果如下:
在这里插入图片描述

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值