Консультация № 138924
01.06.2008, 13:34
50.00 руб.
0 3 1
Уважаемые эксперты, помогите мне, пожалуйста, выполнить задание для контрольной работы. К языкам программирования я имею самое отдаленное отношение и не представляю где мне может пригодиться Assembler в моей будущей деятельности.
Нужно составить две программки:
1) Программу преобразования двузначного шестнадцатеричного числа в символьном виде в двоичное представление.
Вход: с клавиатуры вводится шестнадцатеричное число из двух цифр, используя функцию DOS 08h Int 21h.
Выход: результат преобразования выводится на экран, используя функцию DOS Int 29h.
2) Составить программу преобразования целого положительного числа, записанного в системе с основанием q=10, в равное ему число в системе с основанием р=22. Ввод данных обеспечить при помощи клавиатуры, вывод данных осуществить на экран.
Буду очень благодарна, если кто-то откликнется на мою просьбу.

Обсуждение

давно
Посетитель
7438
7205
04.06.2008, 15:19
общий
Необходимо уточнить:Программа 1 - выводить в десятичном виде 12h -> 18 или двоичном 12h -> 00010010 ?Программа 2 - основание действительно p=22? Может 2?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Старший Модератор
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
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
05.06.2008, 00:55
общий
Выводить в первой программке надо в двоичном , а во второй, действительно, р = 22!!!Спасибо. Попытаюсь разобраться!
Форма ответа