教科書の演習として、Intel 8080 のアセンブリでプログラムをコーディングしようとしています。これは、上の行で下向きの 3 つの三角形と下の行で上向きの 2 つの三角形のスケーラブルなイメージを印刷します。正確には、そのようなもの:
*****************************
******* ******* *******
***** ***** *****
*** * *** * ***
* *** * *** *
***** *****
******* *******
*******************
(when user selects the height variable = 5)
と:
*****************************************
*********** *********** ***********
********* ********* *********
******* * ******* * *******
***** *** ***** *** *****
*** ***** *** ***** ***
* ******* * ******* *
********* *********
*********** ***********
****************************
(when user selects the height variable = 7)
とはいえ、アセンブリ初心者の私は、このような実装を 6 つのレジスタのみを使用して実装することを想像するのに非常に苦労しています。また、言語自体の扱いにくさを念頭に置いています。私が思いつくことができる最高のものは次のとおりです。
最初の行は 6*height-1 であることがわかっているので、問題ありません。ただし、問題は後で始まります。追跡する必要があるようです (簡単にするために名前を付けます):
- outer_margin
- 外側の三角形の左右にあるスペースの数。これは行ごとにインクリメントされますが、上部の三角形を描画した後は機能しないため、レジスタに新しい値が必要になります。つまり、三角形の間のスペースです
。inner_spaces
最初に、それらは 3、5、そして下の三角形の一番下に到達するまで 3 になります。問題は、最初の 2 行の後で、より頻繁に表示される必要があること
ですup_star_counter
。行の上の三角形のそれぞれ
- down_star_counter
- 同じですが、一番下の行の三角形
-row
- 下の三角形も出力する一連のラベルの使用をいつ開始するかがわかるように、行を追跡します
- height
- ユーザーが入力した各三角形の高さを保持する変数
これにより、6 つのレジスタ (および空きアキュムレータ) に対して 6 つの値が得られますが、これはあまり楽観的ではありません。また、これの実装は悪夢のようです。ここで欠けているものがあり、タスクを何らかの形で単純化しますか、それとも見た目と同じくらい難しいですか?