题目1:在分段模型机的基础上实现减法运算“7EH-2AH=54H”,其中7EH从I/OL读取,2AH存放在RAM的地址单元[0300H]中,要求运算结果存放在RAM地址单元[0301H]中,并且从I/OH显式。
P000: IN R0, IOL
P001: SUB R0, [0300H]
P004: STA [0301H], R0
P007: OUT [0301H], IOH
P00A: HLT
思路:分段模型机中没有减法指令,需要增加一条减法(SUB)指令,以及停机指令(HLT)。
题目2:在复杂模型机的基础上实现乘法运算MUL R2, R0, R1. 其中R0和R1分别存放被乘数和乘数,从I/OL读取,取值范围为[1, 15]。R2存放乘法运算结果。
思路:采用循环,每次部分积R2加上被乘数R0,乘数R1便减1,直到R1变为0,此时部分积R2即为最终的乘积。Sub,触发Z=1;并且BNC改为BNZ,即Z=1时即跳出循环。
方法一:乘法程序(不判操作数为零):
汇编程序: 机器代码:
P000 IN R0 (1,15) D0
P001 IN R1 (1,15) D1
P002 IN R2 (0) D2
P003 IN R3 (1) D3
P004 ADD R2, R0 52
P005 SUB R1, R3 6D
P006 BNZ 004H 0C 04 00
P009 OUT R2 E2
P00A HLT F0
以上汇编机器代码:D0D1D2D3526D0C0400E2F0
模型机4中的BZC指令格式为:
00001100 XXXXXXXX XXXXXXXX
所以入口地址: 600H
微指令流程:
M600-〉M601-〉M602-〉M418-〉M420(Z=1 M421)
微指令做以下修改:
M418 FC20 FFFFFC (判C=1改为判Z=1)
M420 F801 3FC62D (跳转地址赋给PC)
M421 F801 FFFFED (空操作,跳001)
SUB M6C2 F801 F16E6D (A-B-C 改为A-B)
ADD M6A2 F801 F1666D(A+B+C 改为A+B)
方法二、乘法流程(判0操作数)
汇编指令 机器指令
SUB R1,R3 6D
JC TAG2 0C T2
ADD R2,R0 52
JZ TAG2
TAG1 SUB R1,R3
JC TAG2
ADD R2,R0
JUMP TAG1
TAG2 OUT R2
HLT
微指令修改:
JC(BZC):0C
M418 FC20 FFFFF4 (判C=1)
M420 F801 FFFFED (C~=1, 空操作, NEXT001)
M421 F801 3FC62D (C=1,跳转地址赋给PC)
JZ(STA):00
M400 FC20 FFFFFC (判Z=1)
M420 F801 FFFFED (Z~=1, 空操作, NEXT001)
M421 F801 3FC62D (Z=1,跳转地址赋给PC)
SUB M6C2 F801 F16E6D (A-B-C 改为A-B)
ADD M6A2 F801 F1666D(A+B+C 改为A+B)
亦可以将inc命令改为dec命令,只需将
M720:F8F95F
M721: F0D64D
本文来源:https://www.2haoxitong.net/k/doc/56e03ed3581b6bd97f19eae0.html
文档为doc格式