Я читаю это руководство по эмуляции Intel 8080 Emulator 101, и когда я читаю код, чтобы проверить, что я написал , Я наткнулся на это
case 0x36: //MVI M,byte
{
//AC set if lower nibble of h was zero prior to dec
uint16_t offset = (state->h<<8) | state->l;
state->memory[offset] = opcode[1];
state->pc++;
}
break;
из книги под названием «Программирование на языке ассемблера Intel 8080/8085» я прочитал о MVI в этом
Эта инструкция копирует данные, хранящиеся во втором байте, в ячейку памяти, адресуемую H и L. M - это символическая ссылка на пару регистров H и L.
поэтому я предполагаю, что смещение - это ячейка памяти, адресуемая H и L, но почему мы делаем это таким образом? Это (state->h<<8) | state->l
Спасибо
M
- это соглашение для парыH
иL
, а регистрыH
иL
объединены (через<<
и|
) для получения 16-битного смещения. Что ты хочешь узнать еще раз? - person vladr   schedule 24.11.2012<<
и|
дает нам 16-битное смещение? - person hakuna matata   schedule 24.11.2012h
во второй (h igh) байт (и 0 в младший байт), а|
объединяет его с l ow byte (значениеl
), производя необходимое смещение. Изучите порядок байтов и побитовые операции. - person DCoder   schedule 24.11.2012