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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.06.2010, 16:31   #1
McDoC
Пользователь
 
Регистрация: 04.05.2010
Сообщений: 11
По умолчанию Перевод из dec в hex

Здравствуйте, возникла проблема с написанием программы на ассемблере, ниже привожу ее описание:
Цитата:
По запросу программы с клавиатуры вводиться последовательность целых трехзначных положительных десятичных чисел, разделенных пробелами. Ввод последовательности заканчивается нажатием <Enter>. Программа выводит последовательность этих же чисел, но записанных в обратном порядке и в шестнадцатеричной системе счисления.
Помогите написать процедуру перевода из десятичной СС в шестнадцатеричную СС на аасемблере.
McDoC вне форума Ответить с цитированием
Старый 27.06.2010, 16:59   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Перевод туда-сюда был сто раз. Поиском религия не позволяет пользоваться?
p51x вне форума Ответить с цитированием
Старый 27.06.2010, 17:48   #3
McDoC
Пользователь
 
Регистрация: 04.05.2010
Сообщений: 11
Плохо

Цитата:
Сообщение от p51x Посмотреть сообщение
Перевод туда-сюда был сто раз. Поиском религия не позволяет пользоваться?
Спасибо за подсказку! Только нет подходящей темы. Полно тем, как перевести из одной системы счисления в другую в Delphi или на C++. Если была нужная тема, эту бы я не создавал.
McDoC вне форума Ответить с цитированием
Старый 27.06.2010, 19:40   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

http://www.google.ru/search?hl=ru&ne...=&oq=&gs_rfai=

Там куча добра.... Хотя и пишется сие не сложно.
p51x вне форума Ответить с цитированием
Старый 27.06.2010, 20:55   #5
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Независимо от языка - автор, Вы алгоритм перевода из одной системы в другую представляете? Вот отсюда надо и плясать. Толку то, если Вам сейчас скинут код ( не важно, на asm, pascal или СИ), не понимая принципа Вы завтра же это все забудете.
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 28.06.2010, 13:10   #6
McDoC
Пользователь
 
Регистрация: 04.05.2010
Сообщений: 11
Восклицание

Цитата:
Сообщение от p51x Посмотреть сообщение
http://www.google.ru/search?hl=ru&ne...=&oq=&gs_rfai=

Там куча добра.... Хотя и пишется сие не сложно.
Я опять повторюсь, если бы были подходящие темы в инете эту бы тему я не создавал.

Цитата:
Сообщение от DeKot Посмотреть сообщение
Независимо от языка - автор, Вы алгоритм перевода из одной системы в другую представляете? Вот отсюда надо и плясать. Толку то, если Вам сейчас скинут код ( не важно, на asm, pascal или СИ), не понимая принципа Вы завтра же это все забудете.
Кажется этот раздел называется "Помощь студентам", а не раздел "Пустой болтовни".Я в программирование новичок, так что не можешь помочь, тогда не пеши и не умничай.
McDoC вне форума Ответить с цитированием
Старый 28.06.2010, 13:17   #7
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 18,136
По умолчанию

Хорошо, я помогу тебе . Давай свои наработки и соображения.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 29.06.2010, 18:21   #8
McDoC
Пользователь
 
Регистрация: 04.05.2010
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Хорошо, я помогу тебе . Давай свои наработки и соображения.
Спасибо, что согласился помочь. Чтобы перевести из одной системы счисления в другую нужно разделить на число той системы, в которою переводишь. Пример из hex в dec:
Код:
                  MOV  AX,DX                  ;Выводимое число в регисте AX
                  XOR  CX,CX          ;Обнулим CX
                  MOV  BX,10          ;Делим на 10
Not_zero:         XOR  DX,DX          ;Очистим регистр dx
                  INC  CX                ;Увеличиваем содержимое CX на 1
                  DIV  BX                ;Делим 
                  PUSH DX               ;Сохраним цифру
                  OR   AX,AX            ;Остался 0?
                  JNE  Not_zero         ;нет -> продолжим 
                  MOV  AH,2h            ;Функция вывода символа
Write_dec:        POP  DX                 ;Восстановим цифру
                  DEC  CX                 ;Уменьшаем содержимое CX на 1
                  ADD  DL,'0'             ;Преобразуем число в цифру
                  INT  21h                ;Выведем цифру на экран
                  CMP  CX,0              ;Остался 0?
                  JA   Write_dec        ;нет -> продолжим
                  POP  AX                ;Извлекаем АX из стека
Таким же методом перевести из dec в hex не получается. В моем случае вводится трехзначное десятичное число, если использовать этот код ввода:
Код:
Test_Read_dec    PROC  NEAR
                            mov  cx,03
N1:                       call Read_dec
                            loop N1
                            int 20h         
Test_write_hex   ENDP
;  
Read_dec    PROC  NEAR
                   push cx
                   mov  cx,04 
M1:                mov  ah,08
                   int  21h
                   cmp  al,30h
                   jb   M2
                   cmp  al,39h
                   ja   M2
                   sub  al,30h
                   clc 
                   jmp  M2
M2:                stc
                   jc   M1
M3:                shl  dx,cx
                   add  dl,al
                   pop  cx
                   ret               
Read_dec    ENDP
В DX получаем введенное число. Делить на 16 нет смысла. Может при вводе, полученный код ASCII преобразовать как-то по-другому?

Последний раз редактировалось McDoC; 30.06.2010 в 09:00.
McDoC вне форума Ответить с цитированием
Старый 30.06.2010, 07:50   #9
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 18,136
По умолчанию

Цитата:
Сообщение от McDoC Посмотреть сообщение
В DX получаем введенное число. Делить на 16 нет смысла.
Почему? Вот образец:
Код:
 mov ax,3136h ;ax=3136h
 and ax,0f0fh ;ax=0106h
 aаd ;al=10h — получили его двоичный эквивалент
(число в символьном виде)
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 30.06.2010 в 07:57.
Utkin вне форума Ответить с цитированием
Старый 30.06.2010, 08:58   #10
McDoC
Пользователь
 
Регистрация: 04.05.2010
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Код:
 mov ax,3136h ;ax=3136h
 and ax,0f0fh ;ax=0106h
 aаd ;al=10h — получили его двоичный эквивалент
(число в символьном виде)
А можно пояснить последнею строчку кода, что за операция aad, что она делает и что с результатом делать дальше?
McDoC вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Dec to Hex to Dec translator Alex Cones Софт 0 16.05.2010 20:05
String[3] => Hex => Dec Alex Cones Общие вопросы Delphi 5 21.03.2010 17:07
Dec to Hex - пример использования Roof Общие вопросы Delphi 8 03.08.2008 19:40
HEX ->DEC 69_rus Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 13.06.2007 20:44