因此,作为我教科书的练习,我正在尝试为英特尔 8080 编写一个汇编程序,该程序将打印三个三角形朝下在上排和两个朝上在下排的可缩放图像。准确地说是这样的:
*****************************
******* ******* *******
***** ***** *****
*** * *** * ***
* *** * *** *
***** *****
******* *******
*******************
(when user selects the height variable = 5)
和:
*****************************************
*********** *********** ***********
********* ********* *********
******* * ******* * *******
***** *** ***** *** *****
*** ***** *** ***** ***
* ******* * ******* *
********* *********
*********** ***********
****************************
(when user selects the height variable = 7)
但是,作为一个汇编新手,我很难想象只使用六个寄存器来实现这样的事情,并且还要记住语言本身的不友好性。我能想到的最好的是:
我们知道第一行是 6*height-1 所以没问题。不过,问题稍后开始:似乎我们必须跟踪(为简单起见,我会给它们一些名称):
-outer_margin
外部三角形左右两侧的空格数。它随着每一行递增,但在绘制上三角形后它将不起作用,因此我们需要在寄存器中添加一个新值
-inner_spaces
三角形之间的空格。首先,它们会是 3、5,然后是 3,直到我们到达下方三角形的底部——问题是它们必须在前两行之后出现得更频繁
——up_star_counter
跟踪要打印的星星该行中的每个上部三角形
- down_star_counter
- 相同,但底行中的三角形
-row
- 跟踪行,以便我知道何时开始使用一组标签,这些标签也将打印底部三角形
- height
- 保存每个三角形高度的变量,由用户输入
这为我们提供了六个寄存器(和自由累加器)的六个值,这看起来不太乐观。此外,这似乎是一场噩梦。我在这里遗漏了什么可以以某种方式简化任务还是和看起来一样难?