Юный техник - для умелых рук 1989-07, страница 13LDAX D SBB В STAX D INX D LDA DEL+2 MOV C,A LDA DEL+3 восстановлено исходное значение регистров DE ;если перенос установлен, значит ;делитель стал больше делимого •.запомнено состояние переноса ; подсчет числа вычитаний делителя ;из делимого ; HL —адрес результата DELI: INR М JNZ R3 1NX Н INR М JNZ R2 INX Н INR М DCX Н R2: DCX Н R3: POP PSW JMP R1 ВОССТАНОВЛЕНИЕ ОСТАТКА KD: LDA DEL MOV С,А LDA DEL+1 MOV В,А LDAX D ADD С STAX D INX D LDAX D ADC В STAX D INX D LDA DEL+2 MOV C,A LDA DEL+3 MOV B,A LDAX D ADC С STAX D INX D LDAX D ADC В STAX D DCX D DCX D DCX D ;DE — адрес остатка RET ПРЕОБРАЗОВАНИЕ ЧИСЕЛЛюди привыкли работать с десятичными числами, а вычислительные машины работают только с двоичными, поэтому, если требуется отображать результаты работы ЭВМ в десятичном виде или преобразовывать вводимые десятичные числа в двоичный формат, необходимы специальные программы. В вычислительной технике есть понятие двоично-десятичного числа. Двоично-десятичным числом называется число, в котором каждые четыре бита представляют десятичную цифру от 0 до 9. Например, двоичное число 00001111 в двоично-десятичном виде будет 00010101. Суть описываемой программы преобразования двоичного числа в двоично-десятичное заключается в том, что двоичное число, которое в обычном виде выглядит так: двоичное число: бит7-27+бит6-26+бит5-25+бит4-24+ битЗ-23+бит2-22+бит1-2'+бит0-2° преобразуется к виду: десятичное число: ((((((бит7-2+бит6)-2+бит5)-2+бит4)-2+ битЗ)-2+бит2)-2+бит1)-2+битО. ПРЕОБРАЗОВАНИЕ ДВОИЧНОГО ЧИСЛА ;В ДВОИЧНО-ДЕСЯТИЧНОЕ ;BCD2B - программа перевода двухбайтного ;двоичного числа в двоично-десятич-;ное. Двоичное число передается ;в регистрах HL, результат работы: ;А —десятки тысяч, ;В — тысячи и сотни, ;С - десятки и единицы. ;BCD1B —программа перевода однобайтного ;числа в двоично-десятичный код. ;Двоичное число записывается ;в регис тр Н, регистр L сбрасывается. ;Результат работы: ;А—разряды сотен, ;В —разряды десятков и единиц. BCD2B: MVI Е,17 установка счетчика ;первого цикла CALL CONV вычисление младшего двоично-десятичного байта MOV С,А вычисленный результат сохранен MVI ЕД7 -установка счетчика ;второго цикла JMP PROD BCD1B: MVI Е,9 установка счетчика ;для программы ;BCD1B CALL CONV вычисление двух ;старших байтов MOV В,А ;запомнен промежуточный двоично-десятичный результат MOV A,L ;установкастаршего ;двоично-десятич-;ного байта RET CONV: XRA А ;сброс регистра А ;в нуль SBIT DCR Е уменьшение на 1 ;счетчика ;числа циклов RZ DAD Н ;сдвиг старших разрядов в перенос ADC А DAA ;двоично-десятич- ;ная коррекция JNC SBIT двоично-десятичный байт больше ;99? INX Н ;да JMP SBIT Обратите внимание, как в строке с меткой CONV: устанавливается в нуль регистр А. Операция ИСКЛЮЧАЮЩЕЕ ИЛИ аккумулятора с самим собой обнулит его, а также сбросит и бит переноса. Приведенные программы полезны, если необходимо выводить на экран результаты вычислений. А как быть, если необ ходимо преобразовать однобайтное или двухбайтное десятичное число в двоичное? Это не сложно. Для этого надо выделить биты, определяющие десятки тысяч, и умножить их на 10000, затем выделить биты, определяющие тысячи, и умножить на 1000, выделить сотни и умножить на 100, выделить десятки и умножить на 10, и, наконец, выделить единицы. Сложение всех этих чисел даст нужный результат. Все эти действия выполняет следующая программа. ;вход в программу: ;А — десятки тысяч, ;В —тысячи и сотни, ;С —десятки и единицы, результат работы: ;HL —двоичное число. DVH: LXI D.10000 CALL UMNOG
ЗАКЛЮЧЕНИЕ Разберитесь, как работают эти программы, поскольку изучение хорошо прокомментированных программ позволяет быстро научиться писать программы самим. И еще совет: если вы хотите всерьез заниматься вычислительной техникой, собирайте различные прикладные программы — математические вычисления, обработка данных и т.п. Это позволит вам со временем сформировать полезную библиотеку программ. М. ИванюшинMOV В,А LDAX D SBB С STAX D INX D LDAX D SBB В STAX D DCX D DCX D DCX D PUSH PSW ;если установлен ;признак равенства ;нулю, значит, в ре- ! ;зультате выполнения команды ;INR М ;возник перенос и ,его надо учесть ;увеличен на едини-;цу следующий байт результата ;восстановление исходного значения регистров HL восстановлен текущий перенос ;для правильного выполнения сложения в цикле R1 13
|