давно
Старший Модератор
31795
6196
04.06.2008, 20:54
общий
это ответ
Здравствуйте, Леваневская Александра!
Программа в приложении.
Выполняет обе задачи, с небольшими изменениями:
<font color=blue>;устанавливаем шестнатиричную систему вводимого числа
mov si,16
. . .
;устанавливаем двоичную систему выводимого числа
mov si,2</font>
В указанных строках Вам нужно поставить нужные Вам системы исчисления.
Вывод числа в 22-ой системе выполнен по аналогии с 16-ой системой исчисления, все что по своему значению больше цифры "9" заменяется на букву латинского алфавита.
Удачи!
Приложение:
MASM;IDEAL or MASMMODEL tiny.186CODESEGorg 100h;переходи в текстовый режимstart: mov ax,3 int 10h;выводим сообщение о вводе нужного числа mov ah,9 mov dx,offset dbEnterNumber int 21h;устанавливаем шестнатиричную систему вводимого числа mov si,16;в этом регистре будет накапливатися введенное число xor di,di;подпрограмма ввода числа call InputNumber;выводим сообщение о полученном результате mov ah,9 mov dx,offset dbResult int 21h;начинаем выводить введенное число mov ax,di;устанавливаем двоичную систему выводимого числа mov si,2;сбрасываем количество цифр в числе xor cx,cx;получаем младшую цифру числаokNext: xor dx,dx div si;и запоминаем её в стеке push dx;увеличиваем счетчик цифр в стеке inc cx;повторяем деление пока не будет 0 or ax,ax jnz okNext;начинаем вывод числа, извлекаем из стекаokOut: pop ax;переводим в символьный вид add al,30h;проверка только цифры cmp al,‘9‘ jbe OutOk;корректируем символьный вид цифр для системы исчисления больше чем десятичная add al,7;выводимOutOk: int 29h loop okOut ret;;подпрограмма ввода числа;вводим без эхоInputNumber: mov ah,8 int 21h;проверяем нажатие клавиши ввод cmp al,13 jz okStop;контролируем диапозоны символов call CheckNumber;если нажатая клавиша не в нужном диапозоне повторяем ввод jc InputNumber;проверяем если нажатая клавиша превысила нужную систему исчисления, то повторяем ввод push si pop cx cmp ah,cl ja InputNumber;выводим введенную цифру int 29h;меняем местами символьное и числовое представление числа xchg al,ah;сбрасываем символьное представление числа xor ah,ah;меняем местами ранее введеной число и посследнюю цифру xchg di,ax;ранее введенноечисло умножаем на систему исчисления xor dx,dx mul si;суммируем число и повторяем ввод add di,ax jmp short InputNumber;заканчиваем подпрограммуokStop: ret;выводимые сообщенияdbEnterNumber db 13,10,‘Enter Number:$‘dbResult db 13,10,‘Result:$‘;подпрограмма контроля нажатых клавишCheckNumber: mov ah,al;все что меньше не число cmp al,‘0‘ jb noNumber;все что больше не цифры cmp al,‘f‘ ja noNumber;все что меньше цифра cmp al,‘9‘ jbe okNumber;все что больше цифра 16-ой системы cmp al,‘a‘ jae okSmall;все что больше не цифра cmp al,‘F‘ ja noNumber;все что больше цифра 16-ой системы cmp al,‘A‘ jb noNumber jmp short okBig;корректируем на малелькую бувкуokSmall: sub al,20h sub ah,20h;корректируем на 16-ю системуokBig: sub ah,07h;корректируем введенную цифруokNumber: and ah,0fh ret;если не цифра нужной системы устанавливаем флаг ошибкиnoNumber: stc ret end start
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.