学汇编,记笔记(十三)《汇编语言》王爽著——端口_移位指令

223 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

前言

学习教材:《汇编语言(第4版)》王爽著 此笔记是书中内容+自我总结,方便查阅和复习 请支持原著

CPU通过端口与芯片交换数据,对端口进行统一编址存入端口地址空间

CPU可以直接读取:内部寄存器、内存单元、端口

章末实验14

一、端口读写

端口读指令:in 端口写指令:out

格式:in al(ax),port、out port,al(ax)

当端口是8位时(0255):端口地址直接作为参数传入,且只能使用al传递数据 当端口时16位时(25665535):端口地址只能先存入dx,再作为参数传入,且只能用ax传递数据

二、CMOS RAM芯片

CMOS RAM芯片包含一个实时钟,靠电池供电,关机后时钟可工作、存储信息不丢失

芯片使用70h和71h端口读写,前者存芯片内部单元地址,后者存数据。因此:读写先传内部地址,再交换数据

其中:0~0dh单元用于存储保存时间信息,其他大部分存储电脑配置信息供启动时BIOS读取

CMOS RAM的时间信息

存储信息包含年月日和时分秒,长度都为一个字节,以8421BCD码形式存储

单元地址如下所示:

信息单元地址
0
2
4
7
8
9

检测点14.1

(1)编程读取CMOS RAM的2号单元

(代码片段)

mov al,2
out 70h,al
in al,71h

(2)编程向2号单元写入0

(代码片段)

mov al,2
out 70h,al
mov al,0
out 71h,al

三、移位指令——左移位和右移位

使用shl和shr实现数据的二进制格式左移和右移,其中:左移1位相当于乘以2,右移一位相当于除以2

当只移一位时:shl(shr) reg,1 当移动两位及其以上时:移动位数需要先存入cl,shl(shr) reg,cl

移位结束前,将最后一个移动的位数写入到CF,然后自动补0

检测点14.2

编程用加法和移位指令计算ax=ax*10。提示:ax*10=ax*2+ax*8 (代码片段)

mov bx,ax
mov cl,3
shl bx,cl ;左移三位相当于乘以2的三次方
shl ax,1 ;左移一位
add ax,bx

后记

  • 端口范围不同时,指令格式不同
  • 位移位不同时,指令格式不同