Что означает адрес в опкоде 0x3a LDA addr intel 8080

LDA — это простой код операции, который загружает в аккумулятор (регистр a) указанные данные в процессоре Intel 8080. В этом состоянии (0x3a адрес LDA) говорится, что оператор загружает адрес в аккумулятор. Но я не мог узнать, что он указывает как адрес.

‹- (adr) — это операция, которую выполняет 0x3a, и она использует 3 байта памяти. Я мог бы хранить данные в последних 2 байтах операции как привет и низкий добавить в стеке, но аккумулятор составляет всего 1 байт, поэтому я не могу. Спасибо.


person Community    schedule 01.09.2019    source источник


Ответы (1)


Инструкция LDA a16 считывает байт с адреса a16 (у 8080 16-битная шина) и сохраняет это значение в регистр A.

Эта инструкция закодирована как три: 0x3a lo hi, являющиеся lo и hi двумя байтами, составляющими адрес.

Если вы хотите сохранить непосредственное (постоянное) значение в A, вы должны вместо этого использовать инструкцию MVI A, x, так как x является постоянным значением. Эта инструкция закодирована как: 0x3e x, всего два байта, как и следовало ожидать.


Похоже, вы путаете адрес памяти и содержимое памяти. 8080 имеет 16-битную адресную шину и 8-битную шину данных. Это означает, что он может обращаться к памяти с адреса от 0x0000 до 0xffff (16 полных битов) или 65536 различных адресов, но каждый из этих адресов может хранить один байт со значением от 0x00 до 0xff (8 бит). Это добавляет до 64 килобайт памяти.

Теперь, когда вы хотите прочитать значение из памяти, вам нужно указать адрес значения, которое вы читаете (помните, адрес 16 бит, значение 8 бит). Таким образом, вам нужно каким-то образом закодировать адрес в инструкции, используя 2 байта. ЦП Intel использует схему с прямым порядком байтов, поэтому для кодирования адреса младшие 8 бит хранятся в первом байте, а старшие 8 бит — во втором. И это то, что делает код операции LDA, и именно поэтому он имеет длину 3 байта.

person rodrigo    schedule 01.09.2019
comment
Я примерно понимаю, что вы пишите. Спасибо. Но я все еще не понимаю, как мне получить адрес из 2 байтов данных, потому что, насколько я знаю, он должен быть 1 байтом. Поэтому я не могу писать в коде. Кроме того, регистр A составляет всего 1 байт. - person ; 01.09.2019
comment
@Bukalemur: я не знаю вашего аппаратного обеспечения, но у 8080 16-битные адреса, а в одном байте 8 бит, поэтому для кодирования адреса вам нужно 16/8 = 2 байта: один для младших 8 бит (lo) и еще один для старших 8 бит (hi). - person rodrigo; 01.09.2019
comment
@Bukalemur: Может быть, вы запутались, потому что каждый адрес памяти содержит 8 бит, а сам адрес 16 бит? - person rodrigo; 01.09.2019
comment
Да вот что я запутался. Насколько я понимаю, мне нужно поместить адрес в регистр А, но сам адрес 16 бит - person ; 01.09.2019
comment
@Bukalemur: Ах, но тогда это легко объяснить... позвольте мне добавить к ответу через минуту... - person rodrigo; 01.09.2019