Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2015, 17:59   #1
mtp2014
Новичок
Джуниор
 
Регистрация: 28.05.2015
Сообщений: 1
Радость Работа с консолью, fasm

Доброго времени суток. Начинаю разбираться в ассемблере, написала часть программы, в которой открывается консоль, могу ввести текст, потом этот текст выводится следующей строкой.
Нужно написать функцию, которая преобразовывает во введенной строке все цифры из 10-ной с/с в 16-ную, а текст оставляет без изменения.
Не могу найти похожих примеров, может кто-то что-нибудь может подсказать?
За помощь отблагодарю..
Заранее спасибо
mtp2014 вне форума Ответить с цитированием
Старый 28.05.2015, 20:56   #2
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Под винду или под-дос пишеш? Тебе нужно решить 4 задачки:
Ниже - функции(2,3). Надеюсь, 1/4 сможеш решить самостоятельно:

1. Найти в строке символы цифр
2. Перевести символы в BCD-число
3. Перевести BCD, в символьное представление HEX
4. Переписать строку и вывести на экран

Функция перевода ASCII-символов(85) в BCD-число. Символы в AX:

Код:
   mov  cl,4             ; CL = 4     (фактор сдвига)
   mov  ax,3835          ; AX = 3835  (введённые ASCII-символы)
   sub  ax,3030          ; AX = 0805  (распакуем число)
   shl  al,cl            ; AX = 0850  (сдвинули влево младший байт)
   shr  ax,cl            ; AX = 0085  (сдвинули вправо весь регистр)
Функция перевода BCD-числа в HEX. Число в AX:

Код:
   mov  ax,3333

   mov  bx,16             ; фактор системы счисления
   xor  cx,cx             ; счётчик цифр
isDiv:
   xor  dx,dx             ; здесь будет остаток
   div  bx                ; деление на фактор
   push dx                ; сохраняем остаток
   inc  cx                ; считаем количество цифр
   or   ax,ax             ; повторяем пока не 0
   jnz  isDiv
isOut:
   pop  ax                ; снимаем цифру
   cmp  al,09             ; проверка на 9
   jle  noHex             ; если меньше - пропускаем цифру
   add  al,7              ; если больше - переводим в букву
noHex:
   add  al,30h            ; переводим в символ
   int  29h               ; печатаем его
   loop isOut             ; мотаем цикл
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с консолью в GUI приложении Anonymous1235 Общие вопросы Delphi 10 05.08.2014 15:17
Работа с консолью kineziz Общие вопросы C/C++ 0 29.03.2014 22:23
Работа с консолью BomaN1 Помощь студентам 0 19.12.2011 20:41
Работа с консолью WindOfDark Помощь студентам 0 07.01.2011 15:21
Работа с консолью, вопросы Hacker19_90 Общие вопросы C/C++ 21 24.12.2008 20:41