一, mix
尽管knuth对于mix不満,在第3版和他本人的主页上声明即将更换为mmix,但对于初学者如我而言,结全本书先学学mix似乎更为方便,为了学习tacop后面的内容,了解一下mix看来是必须的步骤。
命令格式一般为
OP ADDRESS,I(F)
OP为命令关键字,ADDRESS 为地址,I为变址寄存器,F 为字节描述。
格式也可能为:OP ADDRESS(F),这一点knuth没提,但不要求变址时不写I部分是很正常的,knuth却没想到菜鸟如我者却在开始动不动以为省掉的是ADDRESS.
至于有时可以省掉F 部分是很好理解的,knuth有说明。
装入操作符,(LDA等)存储操作符(STA 等),注意,F部分描述的是内存地址的而不是寄存器的字节,这一点我也糊涂了半天。装的时候顺序是从低往高。
算术运算符:add ,sub , mul ,div
只与rA有关。 与rA和rX都有关。
地址传送操作(ENTA ,INCA ,DECA,等)后面的address部分描述的address 而是数字。
比较操作符:比较的是寄存器和内存的值。
MOVE 由单元M开始移到r1的内容所指的单元,次数为F所指定,事后r1加上F的值。
NUM,将字符代码变为数值代码,M被忽略,n1成1,n2成2,
CHAR,不是NUM的反运算,在n前加3,影响rA和rX.
注意:rX是rA的右边补充。
习题详析:
STZ 1
地址1清0
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
地址1清0
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
本文地址:http://com.8s8s.com/it/it34651.htm