- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
汇编语言学西笔记14
端口
Pc机系统中,和cpu通过总线连接的芯片除各种存储器外,还有以下三种芯片:
1:各种接口卡--网卡,显卡上的芯片等
2:主板上的接口芯片,cpu通过他们对部分外设进行访问。
3:其他芯片。
这些芯片中,都有由cpu读写的寄存器,这些寄存器他们可能处于不同的芯片中,但是他们有两点是相同的:
1:都和cpu总线相连,当然这种连接是通过他们所在的芯片进行的。
2:cpu对他们进行读写的时候通过控制线向他们所在的芯片发出端口读写命令。
端口的读写
访问端口的时候,cpu通过端口地址来确定端口,因为端口所在的芯片和cpu通过总线相连,在pc系统中cpu最多可以定义64k个端口端口地址范围0-65535.
对端口的访问只有两个指令 in和out.cpu访问端口的时候,我们应该注意:
我们只能使用al或者ax来存放从端口中读入的数据或要发送到端口的数据。访问八位端口时用al,访问16位端口时用ax.
对0-255以内的端口进行读写时端口号放在al中
In al,20h;从端口20h读如一个字节
Out 20h,al ;往20h端口写入一个字节
对于256-65535的端口进行读写时,端口号放在dx中
Mov dx,3fh
In al,dx
Out dx,al
Cmos芯片
Pc机中有个cmos芯片(中文名称:互补型金属氧化物半导体),它是一种低耗电存储器,主要用来存放bios中的设置信息以及时间日期,我们要把它和bios芯片分开该芯片靠电池供电,所以关机后仍能正常进行工作,该芯片只有两个端口,端口地址70h和71h,71h是数据端口,70h是地址端口 例如
读取cmos ram的2号单元的内容
Mov al,2
Out 70h,al
In al,al
向cmos2号单元写入0
Mov al,2
Out 71h,al
Mov al,0
In 70h,al
Shl指令和shr指令
Shl和shr指令是逻辑位移指令,显然l是left的意思,r是right的意思,所以这两个指令分别是逻辑右移和逻辑左移,二者的功能差不错,以一个为例子
Shl
将一个寄存器或内存单元中的数据向左移位,
将最后一位写入cf中,
最低位用0补充
Mov al
Shl al,1
执行后 al=110010000b,cf=0
我们要注意当移动位数大于1时,必须将移动位数放到cl中
例如
Mov al
Mov cl,3
Shl al,cl
Cmos ram中存储的时间信息
Cmos ram中,存放着当前的时间 年,月,日,时,分,秒,这6个信息的长度都为1个字节,这些数据以bcd码存放,例如 数值 26 用bcd码表示 一个字节可以表示两个bcd码,
编程:在屏幕中间显示当前的月份.
分析:我们首先要从cmos的8号单元 读出当前的月份,
首先我们要将8号单元写入地址端口
Mov al,8
Out 70h,al
再从数据端口取出数据,
In al,71h
接下来我们要将数据显示到屏幕上,我们要知道 bcd=十进制数码制+30h,也就是 十进制数对应的asc11码,此时我们就用到我们学习的逻辑循环指令了,完整程序如下:
assume cs:code
code segment
start: mov al,8
out 70h,al
in al,71h
mov ah,al
mov cl,4
shr ah,cl
and al
mov bx,0b800h
mov es,bx
add ah,30h
add al,30h
mov byte ptr es:[160*12+40*2],ah
mov byte ptr es:[160*12+40*2+2],al
mov ax,4c00h
int 21h
code ends
end start
截图如下
原创力文档


文档评论(0)