Консультация № 85998
08.05.2007, 13:29
0.00 руб.
0 2 2
Подскажите пожалуйста, как сделать программу для ввода с клавиатуры шестизначного числа в 2-ой системе счисления, при этом, сформировав значение этого числа в памяти и произвести вывод этого числа на экран дисплея.

Обсуждение

давно
Старший Модератор
31795
6196
08.05.2007, 17:00
общий
это ответ
Здравствуйте, Ketor!

т.к. Вы не указали в какой виде выводить результат в приложении программа которая вводит 6(или меньше если нажмете ВВОД) цифр 2-ой системы и потом выводит в 2-ой,16-ой и 10-ой системах.
Если в строке start: mov cx,6 вместо 6 поставить 16, то можно переводить числа в диапазоне от 0 до 65535 вместо 0:63
Удачи!

Приложение:
MODEL tiny .186 .code org 100h assume cs:@code ;будем вводить 6 цифр 2-го кода start: mov cx,6 xor dx,dx ;вводим input_numb: mov ah,07h int 21h cmp al,13 jz out_number ;проверяем введеную цифру только 0 или 1 остальное игнорируем cmp al,‘0‘ jl input_numb cmp al,‘1‘ jg input_numb ;0 или 1 выводим mov bl,al int 29h ;формируем число and bx,01h shl dx,1 add dx,bx loop input_numb ;выводим в 2-ой форме out_number: call out_bin_word ;выводим в 16-ой форме call out_hex_word ;выводим в 10-ой форме call out_dec ;выходим из программы ret ;вывод в 2-ой форме out_bin_word: mov al,13;переводим строку int 29h mov al,10 int 29h mov cx,16;выводим 16 бит числа mov bx,dx ;сам вывод out_bin: xor al,al shl bx,1 adc al,‘0‘ int 29h loop out_bin ret ;вывод в 16-ой форме out_hex_word: mov al,13;перевод строки int 29h mov al,10 int 29h mov al,dh;выводим старший байт call out_hex_byte mov al,dl;теперь младший out_hex_byte: push ax;вывод байта shr al,4;старшой половины байта call out_hex_half pop ax;теперь младшую половину out_hex_half: and al,0fh;преобразуем в символ or al,‘0‘ cmp al,3ah;корректируем 16-ю цифру jl out_hex add al,7 out_hex: int 29h ret ;вывод в 10-ой форме out_dec: mov al,13;перевод строки int 29h mov al,10 int 29h xor cx,cx mov ax,dx mov bx,10 out_dec_div: xor dx,dx div bx or dx,30h;остаток от деления push dx;сохраняем в стеке inc cx;считаем кол-во цифр or ax,ax;пока не 0 делим jnz out_dec_div out_dec_out: pop ax;извлекаем из стека int 29h;и выводим псчитанное кол-во цифр loop out_dec_out ret end start
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
09.05.2007, 16:51
общий
это ответ
Здравствуйте, Ketor!
В программе пояснения думаю, что будет понятно
Удачи

Приложение:
title 85998stacksg segment stack dw 32 dup(?)stacksg ends;---data segment string db 6 dup(‘ ‘);Буфер ввода двоичного чила 6-ть знаков shest db ? ;Сформированное шест.число tabl db 0,‘0‘ ;Таблица перевода шестнад. в ascii код db 1,‘1‘ db 2,‘2‘ db 3,‘3‘ db 4,‘4‘ db 5,‘5‘ db 6,‘6‘ db 7,‘7‘ db 8,‘8‘ db 9,‘9‘ db 0ah,‘a‘ db 0bh,‘b‘ db 0ch,‘c‘ db 0dh,‘d‘ db 0eh,‘e‘ db 0fh,‘f‘ messh db 0dh,0ah,‘Число в шестнадцатиричном виде‘ shesstr db 2 dup(‘ ‘),‘$‘ ;Буфер для перевода в ascii-кодdata ends;---code segment assume cs:code,ds:data,ss:stacksg,es:databegin: mov ax,data mov ds,ax sub cx,cx mov cl,6 ;Вводим 6-ть цифр, не меньше, не больше lea si,string;Ввод 6-и символовb10: mov ah,0 int 16h cmp al,31h ;Если меньше 30h то звонок jbe b20 call ah02 jmp b10 ; и повтор вводаb20: ; иначе проверка на больше 31h cmp al,30h jae b30 call ah02 jmp b10b30:;Вывод на экран вводимого символа mov ah,02 mov dl,al int 21h;Преобразование в двоичное число and al,0fh mov [si],al inc si dec cl jne b10 ;Получаем шестнадцатиричное число sub ax,ax mov ch,2 mov cl,05 lea si,stringc10loop: add al,byte ptr[si] mul ch inc si dec cl jne c10loop add al,byte ptr[si] mov shest,al call asciicod ;Процедура перевода шест.числа в ascii-код;Вывод результата на экран mov ah,09 lea dx,messh int 21h mov ah,4ch int 21h;-- Процедурыah02 proc mov ah,02 mov dl,07 int 21h retah02 endpasciicod proc mov si,offset tabl mov di,offset shesstr mov cl,04 mov al,shest ;Ищем совпадения в таблице shl ax,cl shr al,cl mov ch,02 mov cl,16a10loop: cmp ah,byte ptr[si] jne a20 inc si mov ah,byte ptr[si] mov byte ptr[di],ah ;если есть то сохраняем ascii-код inc di dec ch cmp ch,0 je exitloop mov si,offset tabl mov ah,al mov cl,16 jmp a10loopa20: inc si inc si dec cl jmp a10loopexitloop: retasciicod endpcode ends end begin
Форма ответа