计算机是怎么跑起来的(2)?程序如何驱动硬件工作的?

news2024/12/23 20:47:49

上文计算机是怎么跑起来的?从零开始手动组装微型计算机我们说了,如何手动从来组装一台计算机,那组装完后的计算机上是怎么跑起来程序的呢?程序是如何驱动硬件工作的?

前面我们通过DMA将代码输入到内存的指定位置,然后按下REST引脚连接的开关,让CPU开始从内存第零个地址执行指令,为了能更好的理解代码的含义,我们可以以手工汇编的方式,将上面的机器语言翻译成汇编语言,Z80 CPU的使用手册中就完整的它支持的指令对于的助记词(见下图)

下表列出了本例子上的主要操作符对应的汇编语音以及执行周期数

机器语言

助记符

周期数

00111110 num

LD A,num

7

11010011 num

OUT (num),A

11

11011011 num

IN A,(num)

11

11000011 num

JP num

10

翻译后:

地址                    机器语言     
00000000                00111110 LD A,num
00000001                11001111 207
00000010                11010011 OUt(num),A
00000011                00000010 2
00000100                00111110 LD A,num
00000101                11111111 255
00000110                11010011 OUt(num),A
00000111                00000010 2
00001000                00111110 LD A,num
00001001                11001111 207
00001010                11010011 OUt(num),A
00001011                00000011 3
00001100                00111110 LD A,num
00001101                00000000 0
00001110                11010011 OUt(num),A
00001111                00000011 3
00010000                11011011 IN A,(num) 
00010001                00000000 0
00010010                11010011 OUt(num),A
00010011                00000001 1
00010100                11000011 JP num
00010101                00010000 (00010000 00000000)大端序
00010110                00000000 

最终汇编后的代码:

JP的操作数为什么是两个字节呢?看z80的文档:

下面解释下这段代码:

LD A,207
OUt(2),A
LD A,255
OUt(2),A
LD A,207
OUt(3),A
LD A,0  
OUt(3),A

(1)先向cpu 寄存器A 写一个207,在将207写到pio的2号地址。再向寄存器A写一个255,然后将255再写到pio的2号地址;

(2)向cpu 寄存器A 写一个207,在将207写到pio的3号地址,再向寄存器A 写一个0,将0写到pio的3号地址;

最终目的也就是先后向pio的2号地址写一个207、255,3号地址写一个207、0,这是干啥呢?

2号地址在pio中是端口A的控制寄存器,3号地址是端口B的控制寄存器

为什么输入207?

根据z80 pio文档,10xx1111是控制io的代码,输入207标识要设置端口的io

out(2),207 即是设置端口A的io模式,设成每一位都1

out(3),207 即是设置端口B的io模式,设成每一位都是0

再看z80 pio文档:

mode 0就是输出模式,mode1就是输入模式,也就是:

端口A输入,端口B输出

下一段代码:

IN A,(0) 
OUt(1),A 
JP aaa

从读pio 0号地址的数据到cpu 寄存器A

将寄存器A的数据写入到pio的1号地址

然后再跳到IN A的代码行

也就是反复的将0号地址的数据,弄到1号地址,0号地址标识的pio的端口A数据寄存器,1号地址是B的数据寄存器,从而实现了上一节中通过改变拨测开关控制LED的亮灭。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1041672.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaWeb 学习

1. 基本概念 1.1 Web web:网络,网页 静态 web html,css提供给所有人看的数据始终不会变化 动态 web 淘宝提供给每个人看的数据会有所不同技术栈:Servlet/JSP,ASP,PHP Java 中,动态 web 资…

如何通过优化Read-Retry机制降低SSD读延迟?

近日,小编发现发表于2021论文中,有关于优化Read-Retry机制降低SSD读延迟的研究,小编这里给大家分享一下这篇论文的核心的思路,感兴趣的同学可以,可以在【存储随笔】VX公号后台回复“Optimizing Read-Retry”获取下载链接。 本文中主要基于Charge Trap NAND架构分析。NAND基…

[C++网络协议] 优于select的epoll

1.epoll函数为什么优于select函数 select函数的缺点: 调用select函数后,要针对所有文件描述符进行循环处理。每次调用select函数,都需要向该函数传递监视对象信息。 对于缺点2,是提高性能的最大障碍。因为,套接字是…

python+vue驾校驾驶理论考试模拟系统

管理员的主要功能有: 1.管理员输入账户登陆后台 2.个人中心:管理员修改密码和账户信息 3.用户管理:管理员可以对用户信息进行添加,修改,删除,查询 4.添加选择题:管理员可以添加选择题目&#xf…

读高性能MySQL(第4版)笔记15_备份与恢复(下)

1. 二进制日志 1.1. 服务器的二进制日志是需要备份的最重要元素之一 1.2. 对于基于时间点的恢复是必需的,并且通常比数据要小,所以更容易被进行频繁的备份 1.3. 如果有某个时间点的数据备份和所有从那时以后的二进制日志,就可以重放从上次…

MySQL数据库入门到精通8--进阶篇( MySQL管理)

7. MySQL管理 7.1 系统数据库 Mysql数据库安装完成后,自带了一下四个数据库,具体作用如下: 7.2 常用工具 7.2.1 mysql 该mysql不是指mysql服务,而是指mysql的客户端工具。 语法 : mysql [options] [database] 选…

NumPy数值计算

1、Numpy概念 1.1Numpy是什么? Numpy是(Numerical Python的缩写):一个开源的Python科学计算库使用NumPy可以方便的使数组、矩阵进行计算包含线性代数、傅里叶变换、随机数生成等大量函数 1.2为什么使用Numpy 对于同样的数值计…

Windows打开:控制面板\网络和 Internet\网络连接 显示空白怎么办?

Windows打开:控制面板\网络和 Internet\网络连接 显示空白怎么办? 最近有用户反馈遇到这个问题,问题产生原因:在卸载某个软件的时候,系统提示需要重新启动计算机,但是,启动之后,就…

前端项目练习(练习-002-NodeJS项目初始化)

首先,创建一个web-002项目,内容和web-001一样。 下一步,规范一下项目结构,将html,js,css三个文件放到 src/view目录下面: 由于html引入css和js时,使用的是相对路径,所以…

从聚水潭到金蝶云星空通过接口配置打通数据

从聚水潭到金蝶云星空通过接口配置打通数据 数据源平台:聚水潭 聚水潭SaaSERP于2014年4月上线,目前累计超过2.5万商家注册使用,成为淘宝应用服务市场ERP类目商家数和商家月订单增速最快的ERP。2014年及2015年“双十一”当天,聚水潭SaaSERP平稳…

python的讲解和总结V2.0

python的讲解和总结V2.0 一、Python的历史二、Python的特点三、Python的语法四、Python的应用领域五、Python的优缺点优点a. 简单易学:b. 可读性强:c. 库和框架丰富:d. 可移植性强:e. 开源: 缺点a. 运行速度较慢&#…

C 语言基础题:PTA L1-027 出租

下面是新浪微博上曾经很火的一张图: 一时间网上一片求救声,急问这个怎么破。其实这段代码很简单,index数组就是arr数组的下标,index[0]2 对应 arr[2]1,index[1]0 对应 arr[0]8,index[2]3 对应 arr[3]0&…

springboot 捕获数据库唯一索引导致的异常

在一些业务场景中,需要保证数据的唯一性,一般情况下,我们会先到数据库中去查询是否存在,再去判断是否可以插入新的数据.如果是在高并发的情况下,可能还是会出现重复的情况.这时候可能就需要用到锁.也可以在数据库中设置唯一索引. 如果使用唯一索引,在插入相同数据的情况下会抛出…

【postgresql】ERROR: column “xxxx.id“ must appear in the GROUP BY

org.postgresql.util.PSQLException: ERROR: column "xxx.id" must appear in the GROUP BY clause or be used in an aggregate function 错误:列“XXXX.id”必须出现在GROUP BY子句中或在聚合函数中使用 在mysql中是正常使用的,在postgre…

GAN笔记:利普希茨连续(Lipschitz continuity)

利普希茨连续(Lipschitz continuity)是一个数学概念,用于描述一个函数在其定义域内的变化程度。在生成对抗网络(GAN)中,利普希茨连续性对于鉴别器(Discriminator)的设计和训练具有重…

麻将技术从入门到高手,麻将听牌从基础到进阶

一、教程描述 本套麻将教程,大小8.82G,共有132个文件。 二、教程目录 麻将教程001-麻将的基本概念.mp4 麻将教程002-数牌的特性.mp4 麻将教程003-好坏搭判断.mp4 麻将教程004-拆搭原则.mp4 麻将教程005-听牌攻略.mp4 麻将教程006-进程判断.mp4 …

MySQL高级语句(第二部分)

MySQL高级语句(第二部分)一、视图表 create view1、视图表概述2、视图表能否修改?(面试题)3、基本语法3.1 创建3.2 查看3.3 删除 4、通过视图表求无交集值 二、case语句三、空值(null) 和 无值(’ ) 的区别四、正则表达式五、存储过程1、简介…

【LeetCode热题100】--238.除自身以外数组的乘积

238.除自身以外数组的乘积 思路: 利用索引左侧所有数字的乘积和右侧所有数字的乘积(即前缀和后缀)相乘得到答案 算法: 1.初始化两个空数组L和R,对于给定索引i,L[i]代表的是i左侧所有数字的乘积&#xff…

基于springboot会员制医疗预约服务管理信息系统springboot017

大家好✌!我是CZ淡陌。一名专注以理论为基础实战为主的技术博主,将再这里为大家分享优质的实战项目,本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目,希望你能有所收获,少走一些弯路…

2023最新PS(photoshop)Win+Mac免费下载安装包及教程内置AI绘画-网盘下载

2023最新PS(photoshop)WinMac免费下载安装包及教程内置AI绘画-网盘下载 2023最新PS(photoshop)免费下载安装教程来咯~ 「PhotoShop」全套,winmac: https://pan.quark.cn/s/9d8d8ef5c400#/list/share 所有版本都有 1,复制链接…