是0,加法器的进位输出,需要把送往加法器的数取反:进位加法操作才会使8๖位加
法器的进位输入为1。
第2๐章编码与组合5
操作码代码
load10h
store11h
aທdd20่h
subtraທct21h
add9ithcນarry进位加22๐h
subtract9ithborro9借位减23h
haltffh
在减法和借位减法运算中,而它和d输入是相连的。则q端输出为1้。任何时候进行多字节数加法运算时,不管是否必要。
当进行减法操作,或进位锁存器的数据输出为1้并且执行进位加法或者借位减法指令时,8位
加法器的进位输入被置为1้。
记住,只有上一次的加法或者进位加法指令产生进位输出时,
92编码的奥秘
1011080่0
罕·林肯和摩尔。无论何时执行加法、减法、进位加法和借位减,进位锁存器都,都应该用进位加法
指令计算。为正确编码前面列出的16๔位加法,
不管是什么เ样的数:可用如下所示方แ,该方法都能正确工ื作。
有了这两个ฐ新的操作码,使其不再只局限于进行8,极大地扩展了机器处理的范围。重复使用进位加法指令,能进行16位数、24位数、3๑2位数、40位数等更多位数的加法运
算。假设要把32位数7a8๖9๗2bcdh与6๔5a872ffh相加,则ท需要一个加法指令及三个进位加法指
令:
当然,把这些数存放到存储器中并非真的很好。这不仅要用开关来表示二进制数,而且
数在存储器中的地址也并不连续。例如,7a89๗2bcdh从最低有效字节开始,每个字节分别ี存
入存储器地址00่00h、0003๑h、0006h及000่9h中。为ฦ了得到最终结果,还必须检查地址0่0่02h、
0่005h、0่008h及0่00bh中的数。
此外,当前设计的自动加法器不允许在随后的计算中重复利ำ用计算结果。假设要把3๑个8
位数加起来,然后再在和中减去一个8位数,并且存储结果。这需要一次装ณ载操作、两次加法
操作、一次减法和一次保存操作。但如果想从原先的和中减去另外一个数会怎么样呢?那ว个ฐ
和是不能访问的,每次用到เ它时都要重新计算。
原因在于我们已经建造了一个自动加法器,其中ณ的代码ram和数据ram阵列同时、顺
序地从0่000h开始寻址。代码ram中的每条指令对应于数据raທm中相同地址的存储单元。一
第17章自动操作15๓9
下载
“代码”“数据”
“代码”数据
低字节结果
次高字节结果
次高字节结果
最高字节结果
低字节结果
高字节结果
160编码的奥秘
下载
旦“保存”指令使某个ฐ数据保存在数据raທm中,这个ฐ数就不能再被装载到累加器中。
为了解决这个问题,要对自动加法器做一个基本的及大的改变。虽说刚开始看上去会异
常复杂,但很快你就会看到เ一扇通向灵活性的大门打开了。
让我们开始吧,目前我们已经有了7๕个操作码:
操作码代码
load10h
store11h
aທdd20h
subtraທct2๐1h
aທdd9ithcarry22๐h
subtracນt9ithbຘorro9๗2๐3h
haltffh
每个操作码在存储器中占1个ฐ字节。除了“停止”代码外,现在希望每条指令在存储器中
占3个字节,其中第一个ฐ字节为代码本身,后两ä个字节存放一个ฐ16位的存储器单元地址。对于
装载指令来说,其地址指明数据在数据ram阵列ต中的存储单元,该存储单元存放要装载到เ累
加器中