首先我要指出的是,我不是母语人士,所以请不要介意我的错误:)所以,就这样,我确实遇到了一个简单的汇编命令的大问题,事情是,这个命令是与用户交互的“强大”方式。它来了:
我在Logisim中构建一个CPU(没什么特别的,我正在努力让这个程序感到舒服,我正在努力提高我的“技能”)。有了它,我正在用Java编写汇编转换器(汇编输入,二进制和十六进制输出,适合CPU的指令集)。但我遇到了一个大问题...... ^^
我实际上计划添加一个--PRINT“text” - 命令,汇编转换器会为每个字母生成一个7位ASCII数字并产生如下输出:
装配输入: 打印“你好世界”
CPU的输出
打印h
打印e
PRINT l
PRINT l
打印o
打印(空格)
[...]
这是因为我的CPU一次只能打印一个字符:( 好吧,当尝试执行BRANCH命令时会出现问题。
我的翻译程序中的行例如是Line:2,在这一行中你将打印一个5-char-long的文本。因此,下一个命令将位于第3行,但是,CPU只打印出5个字符,这意味着Programcounter现在指向第8行,而Translator中的第3行实际上位于Programcounter的第8行。
我怎么能解决这个问题?添加一个特殊寄存器,在CPU实际执行的每个“PRINT”命令后递增,并将其添加到要分支的行中?或者有人有更好的方法将字符打印到屏幕上吗?
提前感谢所有答案,
塞莱
答案 0 :(得分:0)
我不确定我是否正确理解这一点。您的汇编程序有一个打印字符串宏,可以扩展为几个“print immidiate”指令(大概是2字节大小)。并且您有一条指令(有条件地)跳过下一条指令。让我们说这个指令叫做ez(在零上执行)。所以这样的代码:
ez print "Hello"
会组装成类似的东西:
1234h ez
1235h print 'H'
1237h print 'e'
1239h print 'l'
123bh print 'l'
123dh print 'o'
123fh ...
并且您希望ez intruction自动跳过五个intsructions而不是一个。对?实现它的一种方法可能是在打印指令中有一位表示没有链接,因此ez指令可以继续跳过指令直到缺少该位。但恕我直言,这对于CPU设计来说似乎有点过于复杂。我认为让程序员知道打印字符串会生成几条指令并要求它们写出来是合理的:
enz bra skip_print
print "Hello"
skip_print: