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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.01.2011, 10:39   #11
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

***********

Последний раз редактировалось vadimych; 16.01.2011 в 10:49.
vadimych вне форума Ответить с цитированием
Старый 16.01.2011, 10:44   #12
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

Привет всем.Если тема не потеряла актуальности. Я не большой дока в ассемблере, но на некоторые ошибки в коде обратил внимание.
В переводе в символьную форму:
WRITE_HEX PROC NEAR
PUSH CX ;сохранить знач.используемых регистров
PUSH DX
MOV DH,DL ;сохраним копию байта в DH
MOV CX,4
SHR DL,CL ;взять старшие 4 бита в DL ?? как быть с младшими?
CALL WRITE_HEX_DIGIT ;запись первой 16-ричной цифры
MOV DL,DH
AND DL,0FH ;взять мл. 4 бита в DL ?? а здесь пропали старшие биты
CALL WRITE_HEX_DIGIT ;запись второй 16-ричной цифры
POP DX ;восстановить используемые регистры
POP CX
RET
WRITE_HEX ENDP
В DX - 4 шестнадцатеричных цифры. Вы 2 из них теряете.
Написал свой вариант. Прикрепил исходник и СОМ-файл. Надеюсь, разберётесь без комментариев.
Вложения
Тип файла: rar 12.rar (544 байт, 18 просмотров)

Последний раз редактировалось vadimych; 16.01.2011 в 10:53.
vadimych вне форума Ответить с цитированием
Старый 16.01.2011, 14:26   #13
Ant1971on
Пользователь
 
Регистрация: 20.07.2010
Сообщений: 52
По умолчанию

Привет ! Процедура WRITE_HEX выводит на экран один байт. В процессе работы она дважды обращается к процедуре WRITE_HEX_DIGIT(выводит одну 16-ричную цифру), сначала для вывода старшего полубайта, затем - младшего. Так что ничего не теряется. И потом, я уже говорил, что проверил программу в отладчике, прекрасно все выводит, проблема в том, что без отладчика она почему-то не хочет нормально работать.
Ant1971on вне форума Ответить с цитированием
Старый 17.01.2011, 04:14   #14
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

Прошу прощения, поторопился с выводами. Да и в своём коде ошибку сделал: там вывод es и bx надо местами поменять.
vadimych вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Связный список векторов Kekcuk Общие вопросы C/C++ 0 13.12.2010 21:00
Перемножение векторов Smile_Eminsa Общие вопросы C/C++ 0 11.05.2010 09:14
Массив из 2 векторов GreatMuse Общие вопросы C/C++ 6 30.01.2010 22:09
Ввод векторов и матриц, умножение матрицы на вектор и вычисление скалярного призведения двух векторов zverushka Помощь студентам 18 20.02.2009 15:25