汇编网首页登录博客注册
unixandlinux的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
最新评论
最新留言
好友圈
友情链接

[2023-08-13 18:22] 第 14 章 检测点 14.1

检测点 14.1

编程:读、写 CMOS RAM 的 2 号单元的内容
说明:1. CMOS RAM 芯片的端口是 8-bits 端口,要通过 AL 寄存器进行读写操作。
   2. CMOS RAM 芯片端口的地址是 70H 和 71H,地址值范围在 255(0FFh)以内,所以在 int、out 指令中使用 CMOS RAM 芯片端口时,直接书写其端口号 70H 或 71H。
   3. CMOS RAM 的 2 号单元存储的是系统时间的分钟数:如果当前系统时间是 17:32,则 2 号单元存储的数据就是 32H —— 注意,不会将分钟数转换为 16 进制数,而是直接的 16 进制数 32H。
   4. 要用 Debug 运行本程序,通过观察 AL 寄存器存储的数据来验证指令的执行是否正确。


assume cs:code

code segment

     ; (1) 读取 CMOS RAM 的 2 号单元的内容
start:  mov al,2  ; 预先存入一个数字到 AL 寄存器,以便传送给 CMOS 芯片的端口
     out 70h,al  ; 将需要访问的 CMOS 芯片单元地址 2 读入到 CMOS 芯片的地址端口 70H。执行该指令后,意味着将要对 CMOS 芯片的 2 号单元进行读写操作
     in al,71h  ; 从 CMOS 芯片的数据端口 71H 读取数据到 AL 寄存器 —— CMOS 芯片会预先将其 2 号单元所存储的数据传送到数据端口 71H。注意,不要将指令名 in 写成 int,否则无法通过编译。

     ; (2) 向 CMOS RAM 的 2 号单元写入 0
     mov al,2
     out 70h,al  ; 再次将需要访问的 CMOS 芯片单元地址 2 读入到 CMOS 芯片的地址端口 70H。执行该指令后,意味着将要对 CMOS 芯片的 2 号单元进行读写操作
     mov al,0
     out 71h,al  ; 将 0 写入 CMOS 芯片的数据端口 71H —— CMOS 芯片会自动将 71H 端口存储的数据传送到 CMOS 芯片内的 2 号单元

     ; 以下 3 行代码将 CMOS RAM 的 2 号单元的内容再次读到 AL 寄存器中。以验证所写入 CMOS RAM 2 号单元的数据是否就是数字 0。
     ; 验证的结果是(在 Ubuntu 18.04 操作系统下运行):(1)当用 DOSBox 执行时,实际读到 AL 寄存器的仍然是当前系统的实时时间分钟数,而不是数字 0。(2)当用 DOSBox-X 执行时,则实际读到 AL 寄存器的数字是 0。
     mov al,2
     out 70h,al
     in al,71h

     mov ax,4c00h
     int 21h

code ends

end start
评论次数(0)  |  浏览次数(224)  |  类型(汇编作业) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码