MIX

MIX简介:

MIX的标识码是1009,采用罗马数字即标识为MIX(M表示1000,IX表示9)
MIX可看做是二进制,也可看成是十进制等等。
在MIX中存储的每个字节的值不超过64个;
两个相邻的字节可以表示0 ~ 2 12-1;
三个相邻的字节可以表示0 ~ 2 18-1;
四个相邻的字节可以表示0 ~ 2 24-1;
五个相邻的字节可以表示0 ~ 2 30-1;
一个计算机字由五个字节和一个符号组成,符号部分只有 + 和 - 。

MIX组成:

MIX中含有9个寄存器:
A寄存器(累加器):有五个字节和一个符号组成,用途:算术运算和对于数据操作
± A1 A2 A3 A4 A5
X寄存器(扩充):有五个字结合一个符号组成,用途:是rA右边的扩充,用于存放一个乘积或被除数的十个字节,或用于存放A右移的信息
± X1 X2 X3 X4 X5
I  寄存器(变址寄存器):I1,I2,I3,I4,I5,I6各拥有两个字节和一个符号,用途:计数和访问可变的内存地址
± 114 115
J 寄存器(转移地址):拥有两个字节,符号总为 +,用途:总是保存最新的“转移”操作之后的指令的地址。
MIX还包含有:
一个溢出开关(表示 开 或 闭 的一位);一个比较指示器(有三个值:LESS,EQUAL,GREATER);
内存(4000字的存储单元,每个字有五个字节和一个符号);输入输出设备(卡片,磁带,磁盘等等)。
对于字的描述:允许的字段是在一个计算机字中相邻的那些字段,它们用(L:R)表示,具体在机器中由8L+ R来表示

MIX指令:

及其运作还需要相关的指令
指令格式:
0 1 2 3 4 5
± A A I F C
其中的C是指出执行的操作是什么,即操作码;F 字节保存对于操作码的修改F = 8L + R;
±AA 表示地址;
I 是是变址说明,它用于修改有效地址,I = 0 ,则不修改  ±AA 
否则字节包含 1 和 6 之间的值 i ,而且在实现指令操作之前,编制寄存器 Ii 的内容加到 ±AA上;
结果用于地址。这个变址过程是每一个指令发生。
另一个特殊的符号M(内存单元,指向单元中的每一个指令):只是特定的变址已经出现之后的地址,如果变址寄存器和地址  ±AA 相加产生出在两个字节中放不下的一个结果,则M的值是无定义的,将CONTENTS(M)表示内存中存放的值。
记号:
为了易于阅读的方式来讨论指令,我们将使用记号  OP ADDRESS, I (F)
其中OP是对指令的操作码(C部分);
ADDRESS是±AA部分;
I 和 F分别表示 I 字段和 F 字段。
如果 I 为零,则省略,如果 F描述(0:5)整个字,则省略。
当把一个字分成一个以上的字段时,就说他是被“组装”的。

MIX操作符:

装入操作符:
LDA(装入A),C = 8;F = 字段。
CONTENTS(M)的指定字段代替A以前的内容。对于一个部分字段被用做一个输入的所有操作,如果符号被用做字段的一部分则用之,否则把它理解为 + 。当它被装入是,这个字段在寄存器中右对齐。
LDX(装入X)。C = 15;F = 字段
LDi (装入i )。C = 8 + i;F = 字段,一个变址寄存器仅含两个字节(而不是五个)和一个符号,总是假定字节1,2,3为0。如果它的结果是置字节1,2,3为0之外的任何值,则LDi 指令无定义。
LDAN(把负的装入A)。C = 16;F = 字段。
LDXN(把负的装入X)。C = 23;F = 字段。
LDi  N(把负的装入i )。C = 16 + i;F = 字段。
存储操作符(与装入是相反方向的操作):
STA(存A)。C = 24;F = 字段。
从A中最右边取出字段,填充到M指定的区间内,符号不变,除非是字段的一部分。
STX(存X)。C = 30;F = 字段。
STi  (存i )。C = 24 + i;F = 字段。
对于rIi 存储的只有三个字节,在执行时在符号位之后填充两个0字段补足5个字段
STJ (存J)。C = 32;F = 字段。
符号总为+外,其余与STi 相同。
STZ (存0)。C = 33;F = 字段。
符号为+,将M指定字段清零。
算术运算符:
对于(0:6)的字段描述可以表示浮点运算,但是书中主要写的是关于整数的计算。
此处描述的的字段是(0:5),使用V表示CONTENTS(M)特定的字段。
ADD(加法)。C = 1;F = 字段。
V被加到rA上。如果相加溢出,则保留低位存入A中,置溢出开关;否则溢出开关不变
SUB(减法)。C = 2;F = 字段。
从rA减去V的值。
MUL(乘法)。C = 3; F = 字段。
10个字节的乘积,V乘上rA,替代寄存器A和X原来的值。rA和rX的符号都被置成乘积的代数符号
DIV (除法)。 C = 4;F = 字段。
把rA和rX的值作为10字节的数,采用rA的符号,得到rAX,除之以V的值。如果V = 0 或者如果商的值多于5个字节(这等于条件 | rA|  >= | V |),用不确定的信息填满寄存器A和X并置溢出开关。
否则把商± flood(rAX / V)放置在rA中把余数(±  | rAX|  mod | V |) 放置在rX中。之后rA的符号是商的符号,rX的符号是原rA的符号。
地址传送操作符:
在下列操作中,(可能带变址的)“地址”M被用作一个符号的数,而不作为内存中一个单元的地址。
ENTA(进入A)。C = 48;F = 2。//M中存入的是 rI 寄存器的地址。
把量M装入rA中。如果M = 0,则装入指令的符号。
例子:“ENTA 0”把rA置成0,并有+的符号。“ENTA 0 , 1”把rA置成变址寄存器1当前的内容,但-0变成+0。 “ENTA -0 , 1”则将+0变成-0。
ENTX(进入X)。C = 55;F = 2。
ENTi (进入i  )。C = 48 + i ;F = 2。和ENTA类似,但装入相应的寄存器。
ENNA(进入负A)。C = 48;F = 3。
ENNX(进入负X)。C = 55;F = 3。
ENNi (进入负i  )。C = 48 + i;F = 3。
INCA(A增值)。C = 48;F = 0。把量M加到rA中;这个动作等价于包含M的值的一个内存字执行ADD。溢出机制同ADD。
INCX(X增值)。C = 55;F = 0。
INCi (i 增值 )。C = 48 + i;F = 0。一定不能溢出;如果溢出,则指令无效。
DECA(A减值)。C = 48;F = 1。
DECX(X减值)。C = 55;F = 1。
DECi (i  减值)。C = 48 + i;F = 1。
比较操作符:
CMPA(比较A)。C = 56;F = 字段。
rA的特定字段同CONTENTS(M)相同字段的值进行比较。如果F字段不包括符号位,则两个字段都被认为是非负;否则在比较中要把符号考虑在内。(当F是(0:0)时,将总是出现相等,因为负零等于正零)
CMPX(比较X)。C = 63;F = 字段。
CMPi (比较  i)。C = 56 + i;F = 字段。在M的字节1,2,3被当作0(原文是变址寄存器,感觉有误)。
转移操作符:
通常指令是顺序执行的;也就是单元P中的指令被执行过后接着执行的指令通常是在单元P + 1中找到的指令。但是有若干“转移”指令允许这一顺序被中断。把J寄存器置为下一指令的地址,可以使用“存J”指令设置将被使用的另一指令的地址字段以便返回程序原来的位置。每当一个转移真正出现于一个程序中时,J寄存器就被改变,除非转移操作符JSJ,而且J寄存器据不会为无转移所改变。
JMP(转移)。C = 39;F = 0。
无条件转移,下一条指令取自单元M。
JSJ(转移,保持J不变)。C = 39;F = 1。
除了rJ内容不变,和JMP相同。
JOV(溢出转移)。C = 39;F = 2。
如果溢出开关置位,则把它复位并出现一个转移(JMP),否则什么事情也不发生。
JNOV(无溢出时转移)。C = 39;F = 3.
如果溢出开关赋为,则出现一个转移,否则将它复位。
JL,JE,JG,JGE,JNE,JLE(小于转移,相等时转移,大于转移,大于等于转移,不相等时转移,小于等于转移)。C = 39;分别地F = 4,5,6,7,8,9。与比较操作符一起使用。
JAN,JAZ,JAP,JANN,JANZ,JANP(A为负时转移,A为0时转移,A为正时转移,A非负时转移,A非0转移,A非正时转移)。C = 40;分别地F =  0,1,2,3,4,5。
JXN,JXZ,JXP,JXNN,JXNZ,JXNP (X为负时转移,X为0时转移,X为正时转移,X非负时转移,X非0转移,X非正时转移)。C = 47;分别地F =  0,1,2,3,4,5。
JiN,JiZ,JiP,JiNN,JiNZ,JiNP (i 为负时转移,i 为0时转移,i 为正时转移,i 非负时转移,i 非0转移,i 非正时转移)。C = 40 + i;分别地F =  0,1,2,3,4,5。
其他操作符:
SLA,SRA,SLAX,SRAX,SLC,SRC(A左移,A右移,AX左移,AX右移,AX循环左移,AX循环右移)。C = 6;分别地F = 0,1,2,3,4,5。
这些移位指令,其中M指定移位MIX的字节个数;M必须是非负的,对于SLA,SRA,SLAX,SRAX,在一边把0移进寄存器中,另一边移出字节。SLC,SRC,其中在一端移出字节进入到另一端。
MOVE(移动)。C = 7;F = 数。
由F所指定的字数被移动,由单元M开始移动由变址寄存器 1的内容所指定的单元。一次传送一个字,在本操作结束时,rI1的值加上F的值。但是如果F = 0,则什么是也不做。标准的F为1。
每次移动结束,M加一,传送的地址也加一,直到循环F次。
NOP(空操作)。C = 0。无操作出现,因此饶过本指令,忽略F 和 M的值。
HLT(停机)。C = 5;F = 2。
机器停机。重启时,实际效果等价于NOP。
输入输出操作符(具体设备不表):
IN(输入)。C = 36;F = 设备。
OUT(输出)。C = 37;F = 设备。
IOC(输入输出控制)。C = 35;F = 设备。
JRED(就绪转移)。C = 38;F = 设备。
JBUS(忙碌转移)。C = 34;F = 设备。
转换操作符:
NUM(转换成数值)。C = 5;F = 0。
CHAR(转换成字符)。C = 5;F = 1。

计时:

为了给出MIX程序的效率的定量信息,对于每一MIX操作都指定了对于执行时间。
ADD,SUB,所有LOAD操作,所有MOVE要求1个单位时间加上每移动一个字再花费2个单位时间。MUL,NUM,CHAR各要求10个单位时间而DIV要求12个单位时间。所有剩下的其他操作花费1个单元时间,再加上在执行IN,OUT,TOC或HLT指令时计算机可能空闲的时间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值