计算机系统要素:第四章 机器语言

来源:互联网 发布:眼镜清洗机牌子知乎 编辑:程序博客网 时间:2024/05/27 20:36

所谓机器语言,就是底层硬件能认同的语言,可以被看作是一种约定的形式,它利用处理器和寄存器来操控内存。
那么内存是什么?——用来储存数据和指令的硬件设备,可以通过提供它的地址来描述,比如几号存储柜。
谁来操控——处理器,通常称为中央处理器或者CPU,是执行一组固定基本操作的设备。这些操作通常包括算术操作和逻辑操作,内存读取操作和控制操作。当然内存操作的是二进制数值,它们来自寄存器或者指定的内存单元。
这里有个疑问,在第二章中构建的寄存器和内存单元是一样的组成单元,为何读取寄存器比内存快?
我个人理解:cpu中集成了寄存器,紧挨着处理器,相当于处理器的一个高速本地内存,使得处理起来能快速的操作数据和指令,而想要去得到内存的数据,先需要找到这个内存单元的地址,再对内存单元操作。
cpu要能一统所有硬件,需要所有硬件都能听懂,所以在之前我们要学会它们的语言(当然,也是我们人类发明的)。
计算机只能听懂0和1,所以与机器交流起来。。。。。。
算了,鉴于二进制相当晦涩,通常会在机器语言中同时使用二进制码和助记符,就是一种能人能看懂的符号,在经过编译器翻译成机器语言,比如add翻译过来就是1010这样的 。
在本章中要学的就是HACK语言,它包括了两种指令:一种是地址指令,也称为A—指令;另一种是计算指令,C-指令。
举个栗子:@i表示i这个变量的内存地址,M=1,表示把1赋给i.m总是代表一个内存单元中的数值。(要继续问为啥,我想没必要挖下去了,就相当于问你为啥叫张三一样)
@100
D=D-A;//D=i-100
指令代码的描述是对以下三种问题的回答:
(a)计算什么?
(b)将计算后的值存储到什么地方;
(c)下一步要干什么。

 在书中,有个关于助记符表的地方,我认为有个小错,就是在对内存操作时a=1,不明白的可以看看书(p67中文版 计算机系统要素) 

具体细节不做多解释,介绍项目:
编写并测试 乘法 和I/O处理程序

(1)乘法
通过加减法和移位来实现的;把除法转成乘法,乘法转成加法,减法也转成加法。
模拟CPU运算乘法的步骤:
假设计算3*3
原码是0011 * 0011(以4位存贮单元,因为是原码,最高位不代表符号位)
CPU中的乘法器过程如下:
3个寄存器分别存放乘数0011 被乘数 0011 一个部分积初始值为0
1、首先判断乘数寄存器(目前为0011)的最低位为1。如果为1则将部分积的值通过加法器加上被乘数0011。因此此步结束后部分积寄存器内容为0011
2、将乘数寄存器右移一位,同时将部分积寄存器也右移一位。同时乘积寄存器最低位溢出丢弃。部分积寄存器高位补0,低位溢出后填充到乘数寄存器。因此,部分积寄存其原来的值0011变成了0001。乘数寄存器0011变成了1001(这里低位的1溢出,最高位被部分积溢出的1填充)
3、判断乘数寄存器最低位(0001).为1。将部分积通过加法器加上被乘数0011。因此此不结束后部分积寄存器内容是(0001+0011=0100).
4、乘数寄存器右移一位,同时将部分积寄存器也有右移一位。同第2步。因此部分积寄存器原来的值0100变成了0010。乘数寄存器1001变成了0100,低位1溢出,最高位被部分积溢出的0填充。
5、判断乘数寄存器低位为0不做加法操作直接做第2步的移位操作。既有了部分积变成0001,乘数变成了0010。
6、判断乘数寄存器低位为0不做加法操作直接做第2步的移位操作。既有了部分积变成0000,乘数变成了1001;此时所有乘数全部处理完毕。
7、最终结果将部分积作为高位,乘数寄存器作为低位得到值为00001001 换算成10进制得到9

@ShiftM = 1@2M = 0@i           //i = 0M = 0(FOR)        //i < 16@iD = M              @16D = D - A@ENDD;JGE@1           //R2 = R2 + {R0 & [0 - (R1 & Shift)]}D = M@ShiftD = D & MD = -D@0D = M & D@2M = M + D@0           //R0 << 1D = MM = M + D@Shift       //Shift << 1D = MM = M + D@i            //i++M = M + 1@FOR0;JMP(END)

(2)I/O处理程序 (长按下键时屏幕会3点变黑,无键按下时,清除)
首先来一段测试程序:(实现屏幕中的3点变黑)

 (BEGIN)@SCREEN  //屏幕的基地址  D=AM=1//1为黑  0为白@3D=D+AA=DM=1(END)@BEGIN0;JMP

图中两点变黑

(BEGIN)@KBD       //键盘基地址是否有值,没有就跳转到清屏D = M@CLEAND;JEQ                  //有键按下@SCREEN          //涂黑 D = AM = 1@1D=D+AA=DM=1@2D=D+AA=DM=1@END0;JMP(CLEAN)          //无键盘按下 @SCREEN          //涂白 D = AM = 0@1D=D+AA=DM=0@2D=D+AA=DM=0(END)@BEGIN0;JMP

汇编转机器语言
按下键变黑

阅读全文
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 员工提出辞职公司不同意怎么办 员工提出辞职后即不来上班怎么办 打架把对方打成轻伤害怎么办 被刑拘了家人该怎么办 看守所在押人员检查出乙肝怎么办 孩子不写作业老师该怎么办 孩子老师向我表白该怎么办 幼儿园老师打孩子家长该怎么办 老师对孩子太苛刻该怎么办 孩子不敢上学怕老师该怎么办 学生上课迟到老师该怎么办 看守所转监狱不收怎么办 己判实刑有病看守所不收怎么办 判决书生效前看守所不收怎么办 法院判实刑看守所不收怎么办 派出所立案后送拘留所了怎么办 打架斗殴被关在看守所了怎么办 在看守所羁押期间患癌症怎么办 无法偿还借款拘留15天后怎么办 离婚起诉被告人被羁押怎么办 事实不清的案件怎么办 交通事故没时间去做笔录怎么办 偷东西被拘留家长该怎么办 在香港被拘留了怎么办 发票认证机卡了怎么办 交罚款的单子丢了怎么办 父亲行政拘留考警察政审不过怎么办 非法经营罪立案后不批刑拘怎么办 12分扣完了怎么办2018 驾驶证c1扣14分怎么办 车辆被扣12分怎么办 两个违章扣12分怎么办 车辆违章扣12分怎么办 一下扣了20分怎么办 违章扣了100多分怎么办 车子累计扣12分怎么办 起诉了对方不来怎么办 在监狱里被打伤了怎么办 初三要体检没去怎么办 羁押人在看守所没判刑怎么办? 在看守所关两年了还没有判刑怎么办