Получил задание: Z=260/2+2X+18-2Y, Z - 2 байта Вопросы: 1. Как число 260 закинуть в регистровую пару HL, что бы потом поделить отдельно H (2/2=1) и L (60/2=30). Как потом их "склеить", что бы было 130? И вообще, я правильно думаю? 2. Сложение с двойной точностью, это как? Assembler для процессора Intel 8080.
"Поделить отдельно" -- никак. Делится всё число. Другое дело, что, если оно занимает несколько байтов, обрабатывать их приходится последовательно. Если говорить о 8080, то, где бы ни хранилось само число, для деления (фактически -- сдвига вправо) его придётся побайтово загружать в аккумулятор: с другими регистрами команды сдвига не работают. Подробностей не помню, последний раз с 8080 имел дело в 1991-м.
Как занести число 260 в HL? Пишу lxi h,260, получаю H=1, L=4. Пишу так: Код (Text): org 0800h lxi h,met hlt met:db 260 end Получаю H=8, L=4, M=16. При met:dw 260 - M=4. Пишу mvi m,260, не получаю ничего.
Код (Text): ld hl,260 srl h ; /2 rrc l add hl,(2X - 2Y + 18) Умножение на 2 это сдвиг влево на один разряд регистра. Но так как при сдвиге возникает перенос, то хз что с ним делать. Мнемоники z80, в отсталых вузах юзают ссср аналоги, можно посмореть тут http://www.codenet.ru/progr/asm/z80i8080.php
Мы юзаем МП КР580ВМ80, а точнее его кривой эмулятор. Команды полностью такие как у i8080. Код (Text): srl h ; /2 Не нашел такой команды. Деление на 2 я раньше делал так: Код (Text): stc ; Cy < 1 cmc ; Cy < Cy rar ; циклический сдвиг вправо Пишу так: Код (Text): org 0800h lhld met hlt met:db 260 end Получаю L=16. В таблице команд нашел: P.S. в лекциях такого не было, препод отсутствует 2 недели и я хочу разобраться сам
Число 260 записано в _десятичной_ системе счисления. При переводе в шестнадцатеричную будет 104 -- именно это Вы и получаете в регистровой паре, так что команда выполнена абсолютно верно. В один байт уместь его, как легко видеть, невозможно -- это число имеет 9 значащих битов.
Ок. Уже хорошо. Как его на 2 поделить-то? Если H/2 и L/2, то выйдет 12H, чего не есть 130. Нашел что значит srl у z80 - SHIFT RIGHT LOGICAL, то есть логический сдвиг вправо? Оо
srl - в моем ассемблере нету такой команды Есть такие: RLC - сдвиг влево RRC - сдвиг вправо RAL - циклический сдвиг влево RAR - циклический сдвиг вправо
Код (Text): org 0800h lxi h,260 mov a,h stc cmc rar mov h,a mov a,l rar hlt end Получаю A=82H, но рядом в десятеричной показывает -130. Почему минус? После mov m,a в M записалось 130, без минуса.
82 hex = 130 dec, проверил в калькуляторе. http://www.google.com/search?hl=ru&q=130+hex Завтра продолжу думать...