zoukankan      html  css  js  c++  java
  • 计算机程序设计艺术学习笔记1

    MIX的学习

    这应该是第三次看这本书吧。说实话前两次没怎么看下去,能力不足是主要原因,还有就是没有太多的时间来深入研究这本书。

    现在,大四了,虽然很迷茫为了要做个啥,但无所谓了,反正与其抓耳挠腮地迷茫,不如静下心来读书吧。刚好趁着这个时间,来读下这边巨著。

    这套书是在亚马逊打折的时候买的,全英文的,不知道是心理原因还是实际就如此,觉得有些比其它书要重。

    此次学习,我选择了MIX,前面内容没课是因为以前看过,像上了点新鲜的东西。

    学过点汇编的应该看着都没什么问题。

    这儿我有个非常巨大的疑问?为什么作者要自己设计一种语言呢?书中的一句话:the language of MIX has been designed to be powerful enough to allow brief programs to be written for most algorithms。让我想起了UNIX时代许多大牛会为自己的软件设计些恰到好处的内在语言,这些可以让软件使用更方便,但是学习时间长。我觉得是这个原因让作者设计了一个MIX吧。

    MIX的寄存器:

    A-register (累加器)五个字节和一个标志位(每个字节只有6位,文中也说了这与现在的8位不同)

    X-register (扩展寄存器)五个字节和一个标志位

    I-register (索引寄存器)一个有6I-register,每个2字节和一个标志位

    J-register(跳转寄存器) 两字节,

    rA主要用于数据的计算操作,rX主要是给rA寄存器扩展使用。从右边扩展rArI主要是用于计数和指向变量内存。rJ简简单单跳转用的。

     

    部分字段

    可以通过(L:R)来表示一个字的一部分(五位加一个标志位)。L是左边的开始位置,R是右边结束位置,LR中间的是可用部分。通常通过8*L+R的结果来表示。

    比如13,表示(1:5)也就是第1位到第五位的全部数据。

     

     

     

     

     

     

     

     

     

    指令格式

    0

    1

    2

    3

    4

    5

    -/+

    A

    A

    I

    F

    C

     

    l C是表示操作的。比如8,代表LDA,意思是载入到Ar中。

    l F是表示8*L+R那个值

    l -/+AA是表示地址

    l I中的数组是0-6,如果是0那个-/+AA表示的数据不变,如果是1-6,意味着-/+AA数据在运算前会加上相应的Ir中的数据。

    此外,在指令中M表示地址,CONTENTS(M)表示的是地址对于的内容。

     

    书写格式(notation

    这个地方的翻译找的中文书,书上写着记号,我感觉不妥。根据第一句话:to discuss instructions in readable manner, we will use the notation to denote an instruction above。这就有点像汇编指令,和机器内码的关系。

     

    格式为:OP  ADDRESS , I(F)

    其中:

    u OP对于这指令中的C

    u ADDRESS 是指令中的-/+AA 

    u I是指令中的I

    u F是指令中的F

    取值操作

    下面将逐个介绍各自操作,也就是对应指令中的C。有点汇编知识的基本没问题。

    l LDAload AC=8F=field

    rA中的数值,用地址指向的数值替换。

    例如:

    2000地址中的内容是 - 80 3 5 4 

    运行指令:LDA  200035)后

    Ar中的内容是+ 00 3 5 4- 80 没有包含在field

    l LDXload X) C=15F=filed

    rX中的数值,用地址指向的数值替换。

    l LDiload iC=8+iF=field

    rIi中的数值,用地址指向的数值替换。

    l LDANload A negativeC =16;F=field.

    l LDXNload X negative) C=23 ;F=field.

    l LDiN (load i negative) C=16+i;F=field.

     

    后三个指令,从字面上也能看出与前三个的区别,同样是载入数据功能,只是数据载入后符号位变取反。

     

    存值操作

    l STAstore A)。C=24;F=field

    rA的数据,存放到对应地址的内存的指定位置中。从rA的右侧开始放入指定位置。有多少位置就放多少,余下的舍弃。

    例如:

    rA中的数据是:+ 6 7 8 9 0

    2000中数据是:- 1 2 3 4 5

    STA 20002:4)指令执行后。rA的数据只能放到2-4之间的位置,所以讲 8 9 0 三放入。

    2000中数据是:- 1 8 9 0 5

     

    l STXstore XC=31:F=field

    l STistore iC=24+i;F=field

    l STJ(store J) C=32;F=field

    l STZ(store zero) C=33 ;F =field

    除了最后一个,其他都与STA差不多的操作,只是针对不同寄存器。

    最后一个,其实就是将指定内存清零。

     

    算术操作

    l ADD C=1;F=field

    将数据加上rA,然后存到rA中。如果数值过大,超过了rA的范围,那么溢出位将会被设为on。就如果在rA前面有个虚拟的1,这样数值就表示正确了。

    例如:

    ADD 2000(55)

    2000号地址中的第五个字节加到rA

    l SUB(subtract) C=2;F=field

    rA中的数值减去VV指的是对于地址中的值。如上面例子中的2000(5:5)

    l MUL(multiply)C=3;F=field

    这是要用到rX了,乘上rA,多出的放到rX中,注意rX是在rA的右边,也就是数据的地位。

    l DIV(divide) C=4;F=field

    好像没得说,做除法。

     

    地址转移操作

    l ENTA(enter A) C=48;F=2

    将数据载入rA中,有点像LDA操作。

    例如:

    ENTA 0 :意思是个rA设置为零

    ENTA 0,1:意思是将rIi的数据载入rA中,但是-0变成+0

    l ENTX(enter X) C=55;F=2

    l ENTi(enter Ii) C=48+i;F=2

    ENTA类似。

    l ENNA(enter negative A) C= 48;F=3

    l ENNX(enter negative X) C=55;F=3

    l ENNi(enter negative i)C=48+i;F=3

    后三个指令与前三个指令功能相同,但是数据符号位会取反。

    l INCA(increase A) C=48; F=0

    “INCA 1” 每次rA中增加1

    l INCX(increase X) C=55;F=0

    l INCi(increase i) C= 48+i F=0

    INCA类似

    l DECA(decrease A) C=48;F=1

    l DECX(decrease X) C=55;F=1

    l DECi(decrease i) C=48+i;F=1

    INC相似,不过这个是减去,而不是加上。

     

    比较操作

    l CMPA(compare A) C=56;F=field

    rA和指定内存中的数据进行比较。

    l CMPX(compare X)C=63;F=field

    rX和指定内存中的数据进行比较。

    l CMPi(compare i) C=56+i;F=field

    rIi和指定内存中的数据进行比较。

     

     

     

     

     

     

     

    跳转操作

     

    l JMP(jump) C=39 ;F=0

    无条件跳转。

    l JSJ(jump, save J) C=39;F=1

    无条件跳转,但是rJ的内容不变

    l JOV(jump on overflow)C=39;F=2

    溢出位开(on)的时候跳转。

    l JNOV(jump on no overfolw)C=39;F=3

    溢出位为关(off)的时候跳转

    l JL,JE,JG,JGE,JNEJLE(jump on less,equal,greater - or - equal, unequal, less - or - equal)C=39;F=4,5,6,7,8,9 与操作一一对应。

    比较标志位满足上述指令条件时跳转。

    l JAN,JAZ,JAP,JANN,JANZ,JANP(jump A negative,zero , positive ,nonnegative,nonzero,

    Nonpositive)C=40;F=0,1,2,3,4,5,一一对应。

    rA中数据满足指令对应的条件时跳转。

    l JXN……与上同,只是对于rX的跳转指令

    l JiN……与上同,只是对于rIi的跳转指令

    (T..T看的时候感觉一丢丢,总结起来好多啊,打得我着实蛋疼。)

    基本的操作差不多了,下面还有一些操作,下次有空整理。累死了。

  • 相关阅读:
    树状数组与线段树基础
    阿里云服务器低价购买及域名解析
    ENVI5.3安装教程(含软件下载)
    05 ArcGIS JS API 4.12版本监听view-change事件
    jQuery的AJAX请求成功,但是跳转到error的解决方法
    04 ArcGIS JS API 4.12加载天地图
    02 Portal for ArcGIS 10.7安装部署教程(linux环境)
    10 webpack4.0学习笔记——热替换_devServer
    09 webpack4.0学习笔记——配置文件_HtmlWebpackPlugin使用
    08 webpack4.0学习笔记——配置文件_DefinePlugin使用
  • 原文地址:https://www.cnblogs.com/MitiskySean/p/3482251.html
Copyright © 2011-2022 走看看