Доброго времени суток! Понимаю что вопрос ламерский и часто задаваемый, но... Нужно ввести с клавы 16-ти ричное число(8 знаков) и записать его в ячейку памяти. Нужна процедура. Наверняка кто-то стыкался с подобной проблемой. Готовое решение для своего случая я не нашёл. Язык Ассемблер, реальный режим. DOS/Windows З.Ы. Алгоритм не предлегать!
tower120 Можно глянуть в масме (masm.lib). Я конечно не предлагаю её использовать в дос, но она же вроде в исходниках. Можно ещё использовать сишную либу под Дос.
Вот простейшая процедура, рабочая. Не оптимизирована, писал не я, времени править нет, из своих исходников времени выдирать тоже нет. Код (Text): ;******************************************************* ;* ПЕРЕВОД ЧИСЛА ИЗ ШЕСТНАДЦАТЕРИЧНОГО КОДА В ДВОИЧНЫЙ * ;* DS:SI - число в коде ASCII. * ;* Результат возвращается в EAX. * ;******************************************************* PROC HexToBin32 near push EBX push CX push SI cld xor EBX,EBX ;обнуляем накопитель xor CX,CX ;обнуляем счетчик цифр @@h0: lodsb ; Проверка на ноль (признак конца строки) and AL,AL jz @@h4 ; Проверка на диапазон '0'-'9' cmp AL,'0' jb @@Error cmp AL,'9' ja @@h1 sub AL,'0' jmp short @@h3 @@h1: ; Проверка на диапазон 'A'-'F' cmp AL,'A' jb @@Error cmp AL,'F' ja @@h2 sub AL,'A'-10 jmp short @@h3 @@h2: ; Проверка на диапазон 'a'-'f' cmp AL,'a' jb @@Error cmp AL,'f' ja @@Error sub AL,'a'-10 @@h3: ; Дописать к результату ; очередные 4 разряда справа shl EBX,4 or BL,AL inc CX cmp CX,8 jbe @@h0 ; Если в числе больше 8 цифр - ошибка jmp short @@Error @@h4: ; Успешное завершение - результат в EAX mov EAX,EBX jmp short @@End @@Error:; Ошибка - обнулить результат xor EAX,EAX @@End: pop SI pop CX pop EBX ret ENDP HexToBin32 ЗЫ Сам то что такую простую вещь не придумаешь?
Нуу. Так можно всегда бояться. Тебе практика нужна, тогда не будет долгой отладки и код станет чётким и понятным. Если модель велосипеда простая и ты его ещё не изобретал, то можно изобрести для полного понимания и "набития руки".
Кстати, а каким вы вообще IDE пользуетесь (для приложений в реальных режимах)? А том меня от Turbo Shell уже передёргивает.
tower120 А ты прямо и пишешь в "реальном" на ассемблере? Я раньше пользовался Dos Navigator-ом, IMHO довольно удобен, есть подсветка. Но когда перешёл на XP, он отказался нормально работать, пришлось на AsmEd переползать.
AsmEdit....Скачал, установил, получил ключ, кинул его в папку с экзешником... и ничего. Как был незарегестрирован так и остался. Автор мне помочь не смог...
RamMerLabs Так, а теперь где бы почитать про то как его настраивать? А дебаггер где? А как в TS как по-русски писать?
Booster, tower120 Пользую DOS Navigator, привык уже за много лет. Под винду тоже есть версия. http://dnosp.com/
Хм... попробовал переделать приведённую процедуру для DEC to BIN... не получается. Это конечно наверно наглость с моей стороны, но может у кого-то завалялась процедурка перевода 4-х значного DEC'a в BIN?
что такое DS:SI разобрался Тытаюсь задвинуть туда адрес строки содержащейся в ЕАХ Код (Text): mov DS:[ESI],EAX пишет Код (Text): Log data, item 84 Address = 00401021 Message = Exception C0000005 (ACCESS_VIOLATION) - Shift+Run/Step to pass exception to the program