0

我知道如何画水平线

LOOP1 STR R5, #0    ;starting ixel
ADD R5, R5, #1   ;increment of pixel on coordinate
ADD R7, R7 #-1  ;decrement to the desired length counter 
BRp LOOP1    ;keeps looping until register with desired length is zero

显然,无论用户为计数器和坐标位置选择什么,寄存器都会有所不同,但这些只是我之前代码中的数字。操纵该代码以绘制垂直线的方法是什么?我对这个网站上代码的格式并不完全满意,所以如果我在几个方面有错,请原谅。

4

1 回答 1

0

水平线和垂直线的区别在于我们如何增加像素位置。

请注意,二维坐标可以(并且必须)通过类似的公式映射到一维系统rowCoordinate * columSize + columnCoordinate。(内存是一维系统,它没有二维,所以我们使用这种映射。)

因此,正如您所展示的,我们可以通过从 (row,0) 到 (row,columnSize-1) 遍历每个像素来绘制一条水平线。通过上面的映射公式,我们从

(row,c) 到 (row,c+1) 只需将像素地址加 1。

要绘制一条垂直线,我们要改变行位置并保持列位置固定,如下所示:从 (0,col) 到 (rowSize-1,col)。

根据 2d 到 1d 的映射,这意味着从

(r,col) 到 (r+1,col) 我们需要按 columnSize 而不是 1 递增。

于 2020-04-22T00:28:41.807 回答