![]() |
|
|
![]()
|
|
| Ruterian |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 68 Регистрация: 9.1.2004 Где: Вязьма, Минск Репутация: нет Всего: нет |
Вот. Делаю такое в первый раз. Все работает. Нельзя ли ее упростить? Лучше раскритикуйте, но не молчите :-)
cseg segment byte assume cs:cseg,ds:cseg .286 org 100h start: ; Конвертор ASCII слова в HEX-значение (1 байт) start1: ; Вход - AX ; выход - AH mov ax, 3030h call ascii2hex int 20h ;----- вот, собственно процедура ---------- ascii2hex: push bx push cx push dx mov bl,ah ;Разделяем ASCII символы. Помещаем первый символ в BL mov dl,al ;а второй - в DL... cmp bl,40h ;сравним, т.к. ASCII символы букв начинаются с 41h jg bolshe ;ага, это у нас буква - переходим к ее обработке cmp bl,30h jl er_name sub bl,30h ;если это цифра - отнимаем 30h, т.к. ASCII цифры начин. на 30h cmp bl,09h jg er_name ;все эти навороты с проверками - для исключения ложного конвертирования всякой ASCII дряни mov ch,bl ;полученное число заносим в CH jmp ed ;и переходим к обработке второго ASCII символа bolshe: cmp bl,46h jg er_name sub bl,37h ;Мучаем еще первый символ, если он буква - преобразуем в число mov ch,bl ;полученное число заносим в CH ;Усе, с первым ASCII разобрались полностью, нюхаем далее... ed: ;Начинаем обработку второго символа cmp dl,40h ;И делаем это точно также, как и с первым jg bolshe1 cmp dl,30h jl er_name sub dl,30h cmp dl,09h jg er_name mov cl,dl jmp ec bolshe1: ;И также мучаем. Единственная разница cmp dl,46h jg er_name sub dl,37h ;в том, что вместо CH мы заполняем CL mov cl,dl ; Теперь у нас в CX число вида 070A ; А надо что-то типа 007A :-) ec: mov al,ch ; сохраняем старшее число в AL для умножения mov bl,10h ; сюды пишем множитель mul bl ;умножаем на 16 - и получаем перевернутые полубайты в AX add al,cl ;а второе число просто прибавляем - и получаем точный рез-тат rest: pop dx pop cx pop bx retn er_name: mov ah,09h lea dx,er_name_mes int 21h jmp rest er_name_mes db '-говняный ASCII-код! $' cseg ends end start |
|||
|
||||
| Serzh |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 30.9.2003 Где: SPb Репутация: нет Всего: нет |
лучше так:
остольное подправить мона, но я спросоня |
||||
|
|||||
| Chingachguk |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Проверку первого и второго полубайта лучше все-же сделать в цикле, а не дублировать код. Или написать подпрограмму проверки символа и звать ее два раза. Например:
-------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
![]()
|
| Правила форума "Asm: Общие вопросы" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |