Как бы вы нарисовали вертикальную линию в симуляторе L C -3, как Pennsim? - PullRequest
0 голосов
/ 22 апреля 2020

Я знаю, как рисовать горизонтальные линии, выполняя

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

Очевидно, регистры будут разными для того, что пользователь выберет для счетчика и координат, но это были просто цифры из моего предыдущего кода. Как можно было бы манипулировать этим кодом для рисования вертикальной линии? Я не совсем доволен форматированием кода на этом сайте, но прошу извинить меня, если я ошибаюсь в некоторых областях.

1 Ответ

0 голосов
/ 22 апреля 2020

Разница между горизонтальной линией и вертикальной линией заключается в том, как мы увеличиваем положение пикселя.

Отметим, что двумерная координата может (и должна) отображаться в одномерной системе по формуле, подобной * 1003. *. (Память - это одномерная система, у нее нет двух измерений, поэтому мы используем этот тип отображения.)

Итак, как вы показали, мы можем нарисовать горизонтальную линию, пройдя каждый пиксель из ( row, 0) to (row, columnSize-1). По приведенной выше формуле сопоставления мы go из

(строка, c) в (строка, c + 1) просто добавляем 1 к адресу пикселей.

To Нарисуйте вертикальную линию, мы хотим изменить положение строки и сохранить фиксированное положение столбца, как в: от (0, столбец) до (rowSize-1, столбец).

В соответствии с отображением от 2d до 1d , это означает, что для перехода от

(r, col) к (r + 1, col) нам нужно увеличивать на columnSize вместо 1.

...