一, mix<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
儘管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