Jerri, зачем ты говоришь про Z80, а код приводишь для ВМ1? :)
Какая конечная цель у тебя? Написать код для Спектрума или для БК?
Вид для печати
Jerri, зачем ты говоришь про Z80, а код приводишь для ВМ1? :)
Какая конечная цель у тебя? Написать код для Спектрума или для БК?
Где я говорю про Z80?
если бы мне надо разворачивать байты для z80 к тебе, как к специалисту по z80, я бы обратился в последнюю очередь.
Просто вспомнилось что ты говорил про разворот байтов, однако на БК его применения в играх я его не видел особо,
обычно два набора спрайтов для направлений.
Вот меня твой опыт и заинтересовал.
Вoт странно, почему встроенные инструкции по развороту битов в байте у процессоров такая редкость!
В тех же подпрограммах деления они бы ускорили процесс также…
Вот здесь:
Никаких параграфов в адресации БК нет и ничего никуда выравнивать не надо - вся память линейна и адресуется напрямую.Цитата:
до параграфа
Старшая часть регистра и не обнуляется, и не сохраняется при загрузке байта - вместо этого происходит расширение знака.
О боже.
С таким подходом...
на спектруме память тоже непрерывна, так же как и на комоддоре и прочих компах.
параграф/страница - да как не назови, это деление условное для удобства понимания.
от xx00 до xxFF
вот у тебя есть адрес в регистре R0 например #3f25
если ты загрузишь из (R1) байт #80 в R0
то что у тебя будет в регистре R0? #3f80(старшая часть регистра не обнуляется) или #ff80(происходит расширение знака)?
в мануале ничего про расширения знака нет
Цитата:
MOVB (R1),R0
Источником в этой команде является младший байт ячейки, адрес которой хранится в R1 (т.е. ячейки MEM). (Не забывайте, что адрес слова совпадает с адресом его младшего байта.) Приемником же служит младший байт регистра R0. Байтовая команда, в которой используется регистровый способ адресации, всегда обращается к младшему байту указанного регистра. Старший байт регистра не имеет адреса, и поэтому ассемблер интерпретирует запись R0+1 как ссылку на регистр R1.
Расширение знака, я же написал выше
Не надо мне общеобразовательного, я это знаю
я тебе задал конкретный вопрос: "меняется ли старший байт регистра?"
если у тебя расширение знака то как ты шаришься по таблице Mirror?
у тебя ссылка указывает на середину таблицы?
всё нашел
Цитата:
*1ssdd MOV(B) **0- пересылка: (dst)<-(src); MOVB ss,Rn
(пересылка в регистр общего назначения),
единственная среди байтовых инструкций,
распространяет знаковый бит источника
в старшем байте приемника; при пересылке
байта в регистр результат всегда пересылается
в младший байт регистра. Все остальные
байтовые пересылки работают с байтами в
точности как словные со слоавми.
Естественно.
Если что, в номерах 28 и 29 журнала "Downgrade" есть мои статьи по БКшному ассемблеру с похожими примерами http://dgmag.in
https://lenta.ru/news/2020/04/03/chu/