《计算机程序设计艺术》学习笔记(一)

一,       mix

   尽管knuth对于mix不満,在第3版和他本人的主页上声明即将更换为mmix,但对于初学者如我而言,结全本书先学学mix似乎更为方便,为了学习tacop后面的内容,了解一下mix看来是必须的步骤。

命令格式一般为

        OP ADDRESSIF

OP为命令关键字,ADDRESS 为地址,I为变址寄存器,F 为字节描述。

格式也可能为:OP ADDRESSF),这一点knuth没提,但不要求变址时不写I部分是很正常的,knuth却没想到菜鸟如我者却在开始动不动以为省掉的是ADDRESS.

    至于有时可以省掉F 部分是很好理解的,knuth有说明。

    装入操作符,(LDA等)存储操作符(STA 等),注意,F部分描述的是内存地址的而不是寄存器的字节,这一点我也糊涂了半天。装的时候顺序是从低往高。

    算术运算符:add ,sub ,     mul ,div

      只与rA有关。   与rArX都有关。

    地址传送操作(ENTA ,INCA ,DECA,等)后面的address部分描述的address 而是数字。

    比较操作符:比较的是寄存器和内存的值。

        MOVE 由单元M开始移到r1的内容所指的单元,次数为F所指定,事后r1加上F的值。

       NUM,将字符代码变为数值代码,M被忽略,n11,n22

      CHAR,不是NUM的反运算,在n前加3,影响rArX.

注意:rXrA的右边补充。

习题详析:

 STZ    1     

地址10

 ENNX  1

rX=-1

 

 STX   1(0:1)

-

1

0

0

0

0

地址1

 SLAX   1

-

0

0

0

0

0

-

0

0

0

1

0

rA                             rX

 ENNA   1

rA=-1

 INCX   1

-

0

0

0

0

63

       rX

 ENT1   1

r1=1

 SRC   1

-

63

0

0

0

0

-

1

0

0

0

0

 rA                rX

 

 ADD   1

-

0

0

0

0

0

    rA    overflow

 DEC1  -1

r1=2;

 STZ   1

-

0

0

0

0

0

地址10

 CMP   1

比较rA和地址1, 相等,因为正0和负0相等。

 MOV -1, 1(1)

将地址1的内容移到地址2(由r2指定)。只移这一个,事后r2=3;

 NUM   1

-

0

0

0

0

0

-

1

0

0

0

0

   10000=2*64*64+28*64+16

 

-

 

0

2

28

16

-

1

0

0

0

0

   rA                          rX

 

 CHAR   1

-

30

30

30

30

30

-

31

30

30

30

30

  rA                            rX

 HLT   1

 

              

 

 

你可能感兴趣的:(《计算机程序设计艺术》学习笔记(一))