在大学中学习计算机组成原理时往往使用的实验机是TEC-2。
在TEC-2中,关于SVZC的讨论令人头痛,初学者总是无法弄清每次运算后SVZC的结果。经过反复实验,我将SVZC如何变化的情况初略总结如下。
在TEC-2中接受SVZC的是用GAL20VB芯片做成的。GAL20VB芯片是时序逻辑电路,在实验册后的图中可以清楚地看到GAL20VB芯片有一个引脚是CLK,这就充分说明为什么要在按STEP键后,才可以接受上一次运算的SVZC。GAL20VB芯片接受ALU运算后的SVZC值或接受来自内部总线的SVZC值。
S为符号标志位。在TEC-2中表示本次运算结果的正负,“1”表示负,“0”表示正。在TEC-2中最高位表示符号位。例如:A000H+0001H,S置“1”,因为结果为A001H,最高位为1,所以为负数。又如:5000H+5000H,S置“1”(其余标志位的变化在后面讨论),因为结果为A000H,最高位为1,所以为负数。S位比较容易理解,只要看ALU中的结果的最高位,就能判断S位的值。
V为溢出标志位。在TEC-2中当两个正数相加变为负数或两个负数相加变为正数时产生溢出。例如:5000H+5000H,结果为负数产生溢出,V置“1”。又如:A000H+A000H,结果既产生进位又有溢出,所以C置“1”(在后面讨论),V置“1”。在实验中FFFFH+0001H,结果为0,我们可能会认为发生了溢出,但我们发现结果的SVZC中V并未置“1”,其实原因很简单FFFFH表示-1,-1与1相加结果当然没有溢出。注意当一个正数与一个负数相加不可能产生溢出。
Z为零标志位。当结果为零时,就将Z置“1”,其余均为“0”。例如:FFFFH+0001H,结果为0,Z置“1”。
C为进位标志位。注意在此进位的产生是对所有比特位而言的,包括符号位在内。例如:A000H+A000H,显然最高位产生了进位,C置“1”。值得注意的是,在实验中:8888H-9999H,C也为“1”,这是因为借位和进位在硬件上的实现是一样的,在此有借位,所以C置“1”。
希望这个总结对大家理解TEC-2中的SVZC时有所帮助。