2017-02-07 8 views
2

Может ли кто-нибудь объяснить, что именно получается по каждой инструкции LDA, ROL, STA дает результаты?LDA/ROL/STA - Инструкции объяснения

C=1 (carry flag is 1) 

LDA A #$08 0008 | 01 
ROL A  0009 | 02 
STA A $10 000A | 03 // A result is $11 
      000B | 04 
      000C | 05 

Я думаю об этом:

LDA A #$08 0008 - Store 0000 into memory 
ROL A  0009 - Get a data 0x08 from accumulator 0000 0100 add carry +1 = 0000 1011 
STA A $10 000A - get a result 0000 1011 = $11 

Верно ли, объяснения?

ответ

4

Я не совсем понимаю, листинга, но инструкции работают следующим образом:

LDA #$08 нагрузки $ 08 в аккумулятор, установив N и Z флаги в соответствии со значением загруженным.

ROL A вращает аккумулятор слева на 1 бит, помещая старый флаг переноса в бит 0 и помещая старый бит 7 в флаг переноса. $ 08 сдвинутый левый 1 бит равен $ 10, а так как флаг переноса равен 1, конечное значение равно $ 11. (Флаги N и Z также устанавливаются в соответствии с новым результатом.)

STA $10 хранит значение аккумулятора в памяти по адресу $ 10, оставляя аккумулятор неизменным. Флаги не затронуты.

(Это не принято писать что-то вроде LDA A #$08. - тот факт, что А участвующая известно из мнемоники, LDA быть коротким для L габаритной D ccumulator ROL A, с другой стороны, написано так, потому что ROL также может получить доступ к памяти. Синтаксис языка ассемблера 6502 просто не соответствует современным стандартам.)

6502.org имеет некоторые хорошие справочные материалы - например, http://www.6502.org/tutorials/. Если вы сделали программирование на ассемблере на других системах, вам, вероятно, будет полезно перейти только с листа данных, например, https://en.wikipedia.org/wiki/MOS_Technology_6502#Further_reading.

1

Том дал хорошее описание. Я хотел бы добавить, что некоторые ассемблеры используют «A» для операций на аккумуляторе (например, ROL A), а некоторые нет (только ROL).

Так вот прокомментировал разборку:

SEC  ;I added this to set C=1 
LDA #$08 ;Loads immediate value 08 into A and sets status flags (as every instruction does) 
ROL  ;Rotates (like a shift) A left through the carry, so C=0, A=0x11 
STA $10 ;Stores A into memory address $10, so $10=11 

Вы можете протестировать программу в различных тренажерах или эмуляторов, которые имеют отладчиков - просто пошагово и наблюдать эффекты каждой команды. Это лучший способ узнать.

Скопируйте вышеуказанную разборку и вставьте ее в here. Нажмите «Собрать», установите флажок «Отладчик» и нажмите «Шаг». Веб-страница - это книга, которая поможет вам программировать 6502 со встроенными тренажерами.

Альтернативно this simulator here не так уж плохо.

Clicking this link загрузит вашу программу в более продвинутый симулятор, который показывает каждый цикл.

Конечно, есть много других загружаемых эмуляторов старых компьютеров, где вы можете взаимодействовать в командной строке для ввода сборки, а затем использовать эмулятор для его отладки. Для этого требуется немного больше обучения, но, возможно, стоит того. Например. AppleWin - разумный выбор, поскольку он довольно прост в использовании.

+0

Спасибо! Это лучше –

 Смежные вопросы

  • Нет связанных вопросов^_^