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