当前位置: 首页 > 编程日记 > 正文

端口01 - 零基础入门学习汇编语言67

第十四章:端口01

让编程改变世界

Change the world by program


引言

CPU可以直接读写3 个地方的数据

(1)CPU 内部的寄存器; (2)内存单元; (3)端口。 这一章,我们讨论端口的读写。

端口的读写

对端口的读写不能用mov、push、pop等内存读写指令。 端口的读写指令只有两条:in 和 out分别用于从端口读取数据和往端口写入数据。

我们看一下CPU 执行内存访问指令和端口访问指令时候,总线上的信息:

(1)访问内存 (2)访问端口

访问内存

mov ax,ds:[8]     ;假设执行前 (ds)=0

执行时,与总线相关的操作:

CPU通过地址线将地址信息8发出;

CPU通过控制线发出内存读命令,选中存储器芯片,并通知它,将要从中读取数据;

存储器将 8号单元中的数据通过数据线送入CPU。

访问端口

in al,60h      ;从60h号端口读入一个字节

执行时与总线相关的操作:

CPU通过地址线将地址信息60h发出;

CPU通过控制线发出端口读命令,选中端口所在的芯片,并通知它,将要从中读取数据;

端口所在的芯片将60h端口中的数据通过数据线送入CPU。

端口的读写

动画片时间(具体内容请看视频中详解)

[kml_flashembed publishmethod="static" fversion="8.0.0" movie="http://blog.fishc.com/wp-content/uploads/2012/07/14_端口读写.swf" width="400" height="300" targetclass="flashmovie" wmode="transparent"] Get Adobe Flash player [/kml_flashembed] 注意:在in和out 指令中,只能使用 ax 或al 来存放从端口中读入的数据或要发送到端口中的数据。访问8 位端口时用 al ,访问16 位端口时用ax 。

对0~255以内的端口进行读写:

in al,20h ;从20h端口读入一个字节

out 20h,al ;往20h端口写入一个字节

对256~65535的端口进行读写时,端口号放在dx中:

mov dx,3f8h ;将端口号3f8送入dx

in al,dx ;从3f8h端口读入一个字节

out dx,al ;向3f8h端口写入一个字节

CMOS RAM 芯片

PC机中有一个CMOS RAM芯片,其有如下特征:

(1)包含一个实时钟和一个有128个存储单元的RAM存储器。(早期的计算机为64个字节) (2)该芯片靠电池供电。因此,关机后其内部的实时钟仍可正常工作, RAM 中的信息不丢失。 (3)128 个字节的 RAM 中,内部实时钟占用 0~0dh单元来保存时间信息,其余大部分分单元用于保存系统配置信息,供系统启动时BIOS程序读取。BIOS也提供了相关的程序,使我们可以在开机的时候配置CMOS RAM 中的系统信息。 (4)该芯片内部有两个端口,端口地址为70h和71h。CPU 通过这两个端口读写CMOS RAM。 (5)70h为地址端口,存放要访问的CMOS RAM单元的地址;71h为数据端口,存放从选定的CMOS RAM 单元中读取的数据,或要写入到其中的数据。   可见,CPU对CMOS RAM的读写分两步进行。

比如:读CMOS RAM的2号单元:

1、将2送入端口70h

2、从71h读出2号单元的内容

检测点14.1

shl指令和shr指令

shl指令和shr指令是逻辑移位指令,后面的课程中我们要用到移位指令,这里进行一下讲解。

shl逻辑左移指令

功能为:

(1)将一个寄存器或内存单元中的数据向左移位;

(2)将最后移出的一位写入CF中;

(3)最低位用0补充。

例如有如下指令:

mov al,01001000b

shl al,1      ;将al中的数据左移一位

执行后 (al)=10010000b,CF=0。   如果移动位数大于1时,必须将移动位数放在cl中。 比如,指令:

mov al,01010001b

mov cl,3

shl al,cl

执行后(al)=10001000b,那请问,CF的值是多少捏? 因为最后移出一位是0,所以CF=0。   可以看出,将X逻辑左移一位,相当于执行X=X*2。 [caption id="attachment_409" align="aligncenter" width="300"] 逻辑左移[/caption]

shr逻辑右移指令,它和shl所进行的操作刚好相反:

将一个寄存器或内存单元中的数据向右移位;

将最后移出的一位写入CF中;

最高位用0补充。

可以看出,将X逻辑右移一位,相当于执行X=X/2。 [kml_flashembed publishmethod="static" fversion="8.0.0" movie="http://blog.fishc.com/wp-content/uploads/2012/07/14_shl指令.swf" width="400" height="300" targetclass="flashmovie" wmode="transparent"] Get Adobe Flash player [/kml_flashembed]

检测点14.2

[buy] 获得所有教学视频、课件、源代码等资源打包 [/buy] [Downlink href='http://kuai.xunlei.com/d/LEOOTFIPBURI']视频下载[/Downlink]

转载于:https://www.cnblogs.com/LoveFishC/archive/2011/05/06/3847066.html

相关文章:

基于SSM实现二手交易系统

1、使用技术 SpringSpring MVCMybatisMysqlhtmljscss等 2、功能 用户注册用户登录物品推荐物品分类物品搜索物品发布物品详情购买商品我的主页等等 3、效果 4、视频介绍

RemoteFX原理简介

这几天,Windows 7 SP1的BETA版公开测试了,里面有一个功能,RemoteFX,算是softice比较期待的一个功能,总算是揭开了她的神秘面纱,横空出世,来到你身边。它的发布,对于微软桌面虚拟化解…

bzoj1079: [SCOI2008]着色方案(DP)

1079: [SCOI2008]着色方案 题目:传送门 题解: DP刚神多年前讲过的一道神题。 二话不说,上来就是一个六维数组:F[i][a][b][c][d][e]//表示上一次涂的颜色是还剩下i次可用的,a~e表示不同次数的颜色种数。 次数一样的颜色…

dedecms部分文章出现读取附加信息出错的解决办法

问题: 估计是新版本开发的时候,没有考虑旧版,文章内容为空的新闻,新版不在允许文章内容为空的新闻,这样旧版的内容为空的新闻升级后将无法再编辑。 解决:你可以对如下文件进行如下修改:article_…

程序员的周末:纯野的一天

牵强的标题自己写上这个标题都觉得挺牵强的。首先,我算不上是一个纯粹意义上的程序员了。虽然上了一个多月的班,但对于这份职业到底做什么我都还不是特别的清楚。每天做着一些类似文秘的工作,又类似技术支持的工作,还有点类似程序…

postgresql 分组查询第一条数据

SELECT * FROM ( SELECT ROW_NUMBER() OVER (partition BY k.word ORDER BY k."updatedAt" desc) rowId,* from keywords as k ) t WHERE rowId1

关于工作和生活

一、关于工作与生活 我有个有趣的观察,外企公司多的是25-35岁的白领,40岁以上的员工很少,二三十岁的外企员工是意气风发的,但外企公司40岁附近的经理人是很尴尬的。我见过的40岁附近的外企经理人大多在一直跳槽,最后大…

JVM GC 垃圾回收(二)之 判断那些可回收,怎么回收

1、哪些对象可回收? 可行性分析算法 通过一系列GC Roots(1)作为起始点,其到对象之间的引用(2)称为引用链,当对象到GC Roots之间不存在引用链相连, 则此对象是不可用的。如下&#xf…

nginx+lua实现上传文件到OSS

目录 技术点 openResty 下载安装 示例 oss.lua 文件 测试代码 text.lua nginx 配置 技术点 openResty OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并…

使用CEfSharp之旅(7)CEFSharp 拦截 http 请求 websocket 内容

使用CEfSharp之旅(7)CEFSharp 拦截 http 请求 websocket 内容 原文:使用CEfSharp之旅(7)CEFSharp 拦截 http 请求 websocket 内容版权声明:本文为博主原创文章,未经博主允许不得转载。可点击关注博主 &…

sqlserver查询一个表的字段信息

select count(*) from syscolumns where idobject_id(表名) 转载于:https://www.cnblogs.com/dongpo888/archive/2011/05/11/2043370.html

ASP.NET无刷新客户端回调

首先说一下:Page.ClientScript 用于管理脚本、注册脚本和向页添加脚本。 返回结果:一个 System.Web.UI.ClientScriptManager 对象。 ClientScriptManager对象 是一些 在 Web 应用程序中定义用于管理客户端脚本的方法,其中有一个方法重载:stri…

common lisp里的几个操作符

setf 赋值操作符,定义一个全局变量。返回值是最后一个赋值的结果。 let 局部变量操作符。let表达式有两部分组成。第一部分是任意多的变量赋值,他们被包裹在一个()中,第二部分是任意数量的表示式作为 let 的函数体。let 表达式的返回值为 最…

敏捷宣言遵循的十二条原则

敏捷宣言遵循的十二条原则Twelve Principles behind the Agile Manifesto 我们遵循以下原则: We follow these principles: 我们最重要的目标,是通过持续不断地及早交付有价值的软件使客户满意。Our highest priority is to satisfy the customer throug…

微信公众号开发的一些配置

1、开发者ID(AppID) 开发者ID是公众号开发识别码,配合开发者密码可调用公众号的接口能力。 2、开发者密码(AppSecret) 开发者密码是校验公众号开发者身份的密码,具有极高的安全性。切记勿把密码直接交给第三…

javascript-对混合字母/数字数组进行排序

[A1, A10, A11, A12, A2, A3, A4, B10, B2, F1, F12, F3]将其排序为: [A1, A2, A3, A4, A10, A11, A12, B2, B10, F1, F3, F12] var reA /[^a-zA-Z]/g; var reN /[^0-9]/g;function sortAlphaNum(a, b) {var aA a.replace(reA, "");var bA b.replace…

国王验毒酒问题

国王召开宴会,一共有1000桶葡萄酒。邪恶的刺客在其中一桶酒里下了致命的毒。人们只知道有且仅有一桶酒被下毒,却不知道是哪一桶。现在你可以拿小白鼠做实验,小白鼠可以同时喝下多个桶的取样结果,且无视稀释效果喝到就死&#xff0…

Nodejs核心模块之net和http的使用详解

前言 net和http模块都是node核心模块之一,他们都可以搭建自己的服务端和客户端,以响应请求和发送请求。 net模块服务端/客户端 这里写的net模块是基于tcp协议的服务端和客户端,用到net.createServer和net.connect实现的一个简单请求与响应的d…

NODEJS 使用 XLSX模块导出excel文件

参考:https://www.itranslater.com/qa/details/2582439815438402560 生成excel /*** 用于排序* param a* param b* returns {number}*/ function sortAlphaNum(a, b) {let reA /[^a-zA-Z]/g;let reN /[^0-9]/g;let aA a.replace(reA, "");let bA b.re…

poj 3352

题意:一个连通的无向图,求至少需要添加几条边,救能保证删除任意一条边,图仍然是连通的。 思路:边的双连通图。其实就是要求至少添加几条边,可以使整个图成为一个边双连通图。用tarjan算法(求割点割边)求出l…

oracle删除大表的数据的方法

今天在公司中碰到访问表数据(test 表)速度非常慢,简单的一个select 语句花了10多分钟, 后来查询一下表的数据量,一共有278万多条数据,而且这个数据表的数据大都过期了,对于现在的业务没什么用。可悲的是这个表竟然也没…

ClickHouse 学习

DDL 添加数据库字段 alter table user_tags add column last_subject String; alter table user_tags add column class_trust_valids Int8; 删除列 ALTER TABLE [db].name [ON CLUSTER cluster] DROP COLUMN ... 日期函数 当toDate 遇到空的串报异常时 select toDate();…

zTree实现节点修改的实时刷新

一、应用场景 在实际应用中会遇到动态操作树各节点的需求,在增加树节点后如何实时动态刷新树就十分有必要了。二、项目实践 比如要在test1234节点下新建子节点,首先要选中test1234节点,添加成功后,根据test1234结点的TID去后台请求…

magento常用软件

常见问题: 1. 装完插件导致后台配置出现 Access denied 信息,需要重置账号权限,方可恢复正常。 2. 大多数无法安装插件时,请删除 /downloader/pearlib/pear.ini 文件,最后到 Connect Manager 里保存下设置&#…

连接惠普打印机(通过WIFI)

第一步 找到打印机型号 第二步 到惠普官方网站下载对应驱动 第三步 安装驱动 第四步 安装驱动后选择WIFI连接(IP在打印机显示屏幕上显示,如果输入打印机屏幕IP连接失败;需要获取打印机真正的IP地址,在HP设备工具箱中获取&#xff…

ADO.NET的连接模式

1、连接模式:客户机一直保持和数据库服务器的链接,适合数据传输量少,系统规模不大、客户机和服务器在同一网络内的环境。 使用连接模式下数据访问的步骤如下: a、使用connection对象连接数据库 b、使用command(命令&am…

App调用safar

/调用safar打开网页 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:"http://www.cnblogs.com/foxmin"]]; 调用app store (省略号后面加的是产品的id等一些参数) // [[UIApplication sharedApplication] openURL:[NSURL URLWithString:"i…

Spring Boot 整合Redis 实现缓存

本文提纲一、缓存的应用场景二、更新缓存的策略三、运行 springboot-mybatis-redis 工程案例四、springboot-mybatis-redis 工程代码配置详解运行环境:Mac OS 10.12.xJDK 8 Redis 3.2.8Spring Boot 1.5.1.RELEASE一、缓存的应用场景 什么是缓存?在互联网…

Sqlite3支持的数据类型 日期函数 Sqlite3 函数

Sqlite3支持的数据类型 NULL INTEGER REAL TEXT BLOB 但实际上,sqlite3也接受如下的数据类型: smallint 16 位元的整数。 interger 32 位元的整数。 decimal(p,s) p 精确值和 s 大小的十进位整数,精确值p是指全部有几个数(digits)大小值&…

Element el-switch 组件样式修改 将文字显示到组件内

Element el-switch 现在的样式无法将文字显示到组件内 &#xff0c;需要自己修改样式。具体如下 <el-switch:disabled"sitem.select.length-1"class"switch"v-model"sitem.or"active-color"#13ce66"inactive-color"#409EFF&qu…