Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
RusFAQ.ru: программирование на языке Assembler
Информационный Канал Subscribe.Ru |
RusFAQ.ru: программирование на языке Assembler
Выпуск № 367
от 14.09.2002, 23:10
Администратор: Имя: Калашников О.А. URL: Информационный ресурс ICQ: 68951340 Россия, Москва |
О рассылке: Задано вопросов: 1240 Отправлено ответов: 3848 Активность: 310.3 %
|
Список экспертов, ответы которых опубликованы в данном выпуске |
SonicX Статус: Доверительный Общий рейтинг: 123.97 [Подробней >>] |
masquer Статус: Профессиональный Общий рейтинг: 157.44 [Подробней >>] |
LIFO Статус: Опытный Общий рейтинг: 135.29 Телефон: 8 01710 24758 [Подробней >>] |
Bob Johnson Статус: Начальный Общий рейтинг: 122.22 [Подробней >>] |
Ayl Статус: Профессиональный Общий рейтинг: 119.63 [Подробней >>] |
Артём Шегеда Статус: Профессиональный Общий рейтинг: 118.29 URL: Пристанище неодинокого программиста [Подробней >>] |
Gibbel Статус: Опытный Общий рейтинг: 108.44 URL: Страничка обо мне и моих друзьях [Подробней >>] |
Igoryk Статус: Опытный Общий рейтинг: 112.21 URL: В помощь программисту [Подробней >>] |
Dark_Lord Статус: Профессиональный Общий рейтинг: 137.9 [Подробней >>] |
Kiss Статус: Начальный Общий рейтинг: 152 [Подробней >>] |
Shal Статус: Опытный Общий рейтинг: 107.27 [Подробней >>] |
Dron Статус: Профессиональный Общий рейтинг: 120.46 URL: Операционная система с нуля! [Подробней >>] |
Broken Sword Статус: Профессиональный Общий рейтинг: 134.95 URL: моя рассылка по Protected Mode [Подробней >>] |
Sinner Статус: Доверительный Общий рейтинг: 106.43 [Подробней >>] |
DiGiT[old] Статус: Начальный Общий рейтинг: 118.42 [Подробней >>] |
VicSimon Статус: Начальный Общий рейтинг: 104.22 [Подробней >>] |
ASMодей Статус: Опытный Общий рейтинг: 124.15 [Подробней >>] |
Portnov Статус: Профессиональный Общий рейтинг: 122.05 URL: Мой сайтик... [Подробней >>] |
Топор Статус: Профессиональный Общий рейтинг: 117.81 URL: Хорошая Русская Металлическая команда Телефон: (8462)500298 [Подробней >>] |
ARDoS Статус: Доверительный Общий рейтинг: 106.25 [Подробней >>] |
kvINT Статус: Профессиональный Общий рейтинг: 111.59 Телефон: (34316)2-31-45 [Подробней >>] |
Краткий перечень вопросов |
Вопрос № 1212. Уважаемые эксперты, помогите с FAT. Мне нужно что-то вроде учебника по этому вопросу, т.е. как на Ас... (ответов: 1)
Вопрос № 1213. Вот тут в рассылке промелькнуло, что masquer нашел способ обойти глюкавость Symbol Loader'a. Уважаем... (ответов: 2)
Вопрос № 1214. Zдравствуйту ув. эксперты! Помагите устанить неполадки в программе. Она при нажатии Ф12 должна менят... (ответов: 3)
Вопрос № 1215. Информация для любителей SoftIce-а: вчера (9 сентября) на wzor.net появился NuMega (CompuWare) SoftI... (ответов: 3)
Вопрос № 1216. hello, where can I get MASM?... (ответов: 6)
Вопрос № 1217. Здраствуйте. Набираю самую простую программу: c segment assume cs:c, ds:d start: mov ax,d mov ds,a... (ответов: 14)
Вопрос № 1218. aha, ne zdali, tak dumaete MelkoMiagkie atdadut MASM 4free, figuski. skazite lucsa, gde vziat MASM ... (ответов: 3)
Вопрос № 1219. Hi all! Как вывести содержимое регистра на экран? Например в AX у меня 2000, как мне это вывести? Сп... (ответов: 6)
Вопросов: 8, ответов: 38
Вопрос № 1212 |
Уважаемые эксперты, помогите с FAT. Мне нужно что-то вроде учебника по этому вопросу, т.е. как на Ассемблере восстанавливать удалённые файлы, потерянные цепочки и т.д.
Интересует также само описание этой файловой системы. Если у вас есть материалы, то высылайте на e-mail (или ссылку).
Вопрос отправлен: 10.09.2002, 09:05
Отправитель: Andrey (afanasenko@tyt.by)
[Следующий вопрос >>] [Список вопросов]
Отвечает SonicX
Доброе время суток, Andrey!
Книжек по фату у меня нету. Но я развею твои мечты.
В фате нет инфы для восстановления
удаленных файлов. Естьтакая такая программа Tiramisu,
она анализирует весь винт и восстанавливает
часть удаленных файлов.
Ответ отправлен: 11.09.2002, 20:06
Отправитель: SonicX
Вопрос № 1213 |
Вот тут в рассылке промелькнуло, что masquer нашел способ обойти глюкавость Symbol Loader'a. Уважаемый masquer, пожалуйста сообщите как это сделать, чтобы под W2k Symbol Loader загружал прогу в SoftIce (у меня айс 4.05, дистрибутив отдельный, DS 2.6 я не ставил, а только отладчик) и чтобы открывалось окно айса на точке входа в WinMain, как это было у меня раньше в айсе 3.0 под Win98... Неудобно патчить код командой Int3, а потом снова патчить обратно, чтобы прога работала нормально... Если кто-то еще знает, плз, сообщите тоже... И еще, если у кого проблемы с переключением в окно айса по Ctrl-D, то сообщаю как их решил я: просто убрал драйвера Nvidia 2000 Display Drivers (честно говоря даже не знаю, Детонатор это или нет, просто я их поставил с компакта, который шел вместе с видюхой)... вот когда они были установлены, окно айса не появлялось, а при нажатии Ctrl-D винда зависала но окно айса не появлялось, причем мог появиться черный экран, а могло и остаться прежнее изображение... при повторном нажатии Ctrl-D либо винда опять начинала работать нормально, либо система зависала окончательно... убрав эти драйвера от NVidia и оставив стандартные виндовые драйвера я решил проблему... теперь окно айса появляется без глюков, только надо выбрать при установке Стандартный видеодрайвер, переключаться в Полноэкранный режим у меня так и не получилось, а вот в окне айс работает нормально...
Вопрос отправлен: 10.09.2002, 12:32
Отправитель: Enforcer (enforcer@pisem.net)
[Следующий вопрос >>] [Список вопросов]
Отвечает masquer
Доброе время суток, Enforcer!
Способ, конечно, интересный, хотя у меня и с 2.5 и с 2.6 работал. Сейчас вот поставлю DS 2.7 - посмотрим, как там дела с этим.
Я просто вхожу в меню Module->Settings... Там на первой закладке снимаю флажок Prompt чего-то там, дальше просто прохожусь по всем закладкам - все работает, потом этот же файл нормально и в дальнейшем работает.
В 2.6 айс версии 4.26.
Ответ отправлен: 10.09.2002, 12:50
Отправитель: masquer
Отвечает LIFO
Здравствуйте, Enforcer!
Так надо было сразу и монитор убрать, тогда бы работало.
Есть там файлик один *.cfg вот с ним и извращайся.
Ответ отправлен: 11.09.2002, 09:23
Отправитель: LIFO
Вопрос № 1214 |
Zдравствуйту ув. эксперты!
Помагите устанить неполадки в программе. Она при нажатии Ф12 должна менять все буквы А на О. А при повторном нажатии прекратить их менять. Программу эту я пишу по образцу из выпусков Олега. Но у меня (в моей проге) только комп виснит. Вроде все правильно делаю...
Помагите плиз!!!
Всем большое спасибо!!!!!!!!!
Приложение:
Вопрос отправлен: 10.09.2002, 13:12
Отправитель: R@ptor (Spinosaur@narod.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Bob Johnson
Доброе время суток, R@ptor!
У тебя в проге есть только одна маленькая ошибка - ты неправильно
написал обработчик прерывания 1Ch - в нем ты сразу же проверяешь флаг
Num_status, и если буквы менять не надо, то отдаешь управление предыдущему
обработчику, извлекая при этом регистры из стека, которые туде никто не
сохранял...
Правильно будет поставить команды cmp и jnz Original после push ds, тогда все
работает ОК.
P.S. Пара советов
1. Поставь вначале проги assume ds: CSEG, т.к. com программа
имеет только один сегмент - это позволит компилятору в процедуре начальной
инициализаци обращаться к переменным не через CS, а через DS (что уберет префикс
сегмента и, таким образом, сэкономит память). Внутри обработчиков прерываний
(когда DS неопределен) ты правильно дополнительно указываешь cs перед именем
переменной.
2. Используй в таких случаях как у тебя лучше прерывание 8h - таймер, т.к.
оно вызывается всегда около 18 раз в секунду, а 1Ch - тоже около 18 раз в секунду,
но когда DOS'у "нечего делать". А поскольку ты не используешь в обработчике
прерываний функций DOS, то вполне можешь повесить его на таймер, что даст более
стабильную работу.
3. Совсем необязательно (и даже не нужно) запрещать прерывания во время проверки
и замены букв.
Текст программы смотри в приложении.
Приложение:
Ответ отправлен: 11.09.2002, 14:02
Отправитель: Bob Johnson
Отвечает Ayl
Доброе время суток, R@ptor!
А как вы запускаетесь? Подозреваю, что тут та же проблема, что и у меня... Т.е. винда...
Попробуй под голым DOS'ом.
По крайней мере по тексту у меня никаких возражений нет. Может, только с проверкой Num_status в обработчике 1ch. Потому что замена начинается сразу же, не дожидаясь нажатия на F12. А вылетает непосредственно после нажатия на клавишу.
У меня Windows ME.
Ответ отправлен: 10.09.2002, 14:04
Отправитель: Ayl
Отвечает Артём Шегеда
Здравствуйте, R@ptor!
To Ayl: по тексту, как раз, возражения есть - а windows здесь вообще не играет роли.
Прежде чем писать программу нужно представить, что она должна делать - не в общем, а по каждой команде.
Маленькое лирическое отступление по поводу условных переходов JZ/JE и JNZ/JNE. Они расшифровываются как "Jump If Zero", "Jump If Equal", "Jump If Not Zero", "Jump If Not Equal". В каждой паре результат одинаков, но смысл-то разный! И если перед переходом стоит сравнение, то после сравнения должен быть переход JE/JNE. Если перед переходом стоит битовая или арифметическая операция - то JZ/JNZ.
Из-за этого есть одна логическая ошибка
Посмотрите на обработчик таймера: что будет если он равен 0?
Выполнение уйдёт на выгребание из стека регистров, которые туда даже не помещались!
Ответ отправлен: 10.09.2002, 19:49
Отправитель: Артём Шегеда
Вопрос № 1215 |
Информация для любителей SoftIce-а: вчера (9 сентября) на wzor.net появился NuMega (CompuWare) SoftICE Driver Suite 2.7 - device driver development. Так что кому нада - вперед!
Я уже лезу...
Ага, щаззз... облом: нада логин и пароль чтоб к ним на сайт влезть. Говорять, на irc.WonderNet.nu на канале #wzor_pass его можно получить... ща поглядим... can't join channel, invite only.. :)
так что "а не послать ли нам гонца?" Да,кстати серийник под 2.7 уже есть ) Говорят, это нерезанная версия и самая полная версия (с BoundChecker-ами и т.п.) Интересно было бы взглянуть. т.ч. если ктото нашарит - пишите.
Вопрос отправлен: 10.09.2002, 16:34
Отправитель: Broken Sword (brokensword@mail.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает masquer
Приветствую Вас, Broken Sword!
Вечером поставлю, напишу
Ответ отправлен: 10.09.2002, 17:22
Отправитель: masquer
Отвечает Bob Johnson
Добрый день, Broken Sword!
> Говорят, это нерезанная версия и самая полная версия
> (с BoundChecker-ами и т.п.) Интересно было бы взглянуть.
> т.ч. если ктото нашарит - пишите.
Правильно, и пишите в рассылку, plz, т.к. действительно интересно.
Ответ отправлен: 11.09.2002, 14:02
Отправитель: Bob Johnson
Отвечает Gibbel
Здравствуйте, Broken Sword!
Если кто его скачал, дайте знать, как это сделать... Или кто еще ссылочку подкинет???
Ответ отправлен: 14.09.2002, 10:22
Отправитель: Gibbel
Вопрос № 1216 |
hello, where can I get MASM?
Вопрос отправлен: 10.09.2002, 19:10
Отправитель: goga
[Следующий вопрос >>] [Список вопросов]
Отвечает Igoryk
Здравствуйте, goga!
На сайте www.kalashnikoff.ru.
Ответ отправлен: 11.09.2002, 13:49
Отправитель: Igoryk
Отвечает LIFO
Добрый день, goga!
For example from kalashnikoff.ru ,hi-tech.nsys.by
P.S. Ну блин такие вопросы в каждой второй рассылке...
Ответ отправлен: 11.09.2002, 09:32
Отправитель: LIFO
Отвечает SonicX
Добрый день, goga!
На сайте RusFaq.ru.
Ответ отправлен: 11.09.2002, 20:06
Отправитель: SonicX
Отвечает Dark_Lord
Have a good time, goga!
MASM is Microsoft assembly tool. And where do you think you can found such things. Take a look on www.microsoft.com!
Ответ отправлен: 10.09.2002, 19:23
Отправитель: Dark_Lord
Отвечает Kiss
Добрый день, goga!
Как можно понять твой вопрос "Где взять компановщик"! Уточни пожалуйста!
С уважением Kiss!
Ответ отправлен: 10.09.2002, 20:11
Отправитель: Kiss
Отвечает Shal
Здравствуйте, goga!
http://asm.kalashnikoff.ru/prog/
Ответ отправлен: 12.09.2002, 14:35
Отправитель: Shal
Вопрос № 1217 |
Здраствуйте.
Набираю самую простую программу:
c segment
assume cs:c, ds:d
start:
mov ax,d
mov ds,ax
mov dx,offset mes
mov ah,9
int 21h
mov ax,4c00h
int 21h
c ends
d segment
mes db ' Странно$'
d ends
stk segment stack
db 256 dup (0)
stk ends
end start
Вызываю ассемблер: tasm название_файла;
затем компоновщик: tlink название_объектного_файла.
Компоновщик выдаёт сообщение: warning: no stack.
В заголовке полученного exe файла значение поля "смещение сегмента стека от начала программы в параграфах" равно 0. Такое же значение имеет поле "содержимое SP при входе в программу".
При запуске программы SS=CS SP=0, то есть СТЕК почему-то оказывается НЕНАСТРОЕННЫМ НА СЕГМЕНТ STK.
Можно, конечно, стек настроить вручную, вставив: mov ax,stk mov ss,ax mov sp,256, но очень бы хотелось
избежать этих команд.
Возникает ощущение, что программа не замечает параметра stack в директиве определения сегмента stk.
То же самое происходит с другими программами, в которых есть сегмент стека.
Почему так происходит? Что надо изменить, чтобы сегмент стека правильно настраивался? Может быть виноват компоновщик (использую tasm 2.51 и tlink 4.0)?
PS При использовании директив .model и .stack стек настраивается нормально.
Спасибо.
Вопрос отправлен: 10.09.2002, 19:29
Отправитель: Студент
[Следующий вопрос >>] [Список вопросов]
Отвечает Dron
Добрый день, Студент!
А почему бы тебе не написать
assume cs:c, ds:d, ss:stk
???
Ответ отправлен: 11.09.2002, 11:33
Отправитель: Dron
Отвечает Igoryk
Доброе время суток, Студент!
Если ты делаешь EXE-программу, то нужно настраивать стек:
stack 100h,
Если ты делаешь COM-программу, то настраиваешь смещение от начала программы:
org 100h.
Затем Exe компилируешь:
tasm my.asm
tlink /x my.obj
или COM:
tasm my.asm
tlink /t my.obj
Ответ отправлен: 11.09.2002, 13:49
Отправитель: Igoryk
Отвечает SonicX
Добрый день, Студент!
Как видно это EXEшник. Когда пишешь
EXEшники указывай стек на SS(assume ss:stek_seg).
А вот тебе простой пример:
cseg segment
assume cs:cseg
org 100h
Start:
mov ah,09h
lea dx,msg
int 21h
int 20h
msg 'Hallo','$'
Компиль с ключом /tdc
Ответ отправлен: 11.09.2002, 20:06
Отправитель: SonicX
Отвечает Kiss
Добрый день, Студент!
Я пользуюсь Turbo Assembler Version 4.0 и link version 5.31,
и у меня с твоей прогой нет проблем. Так что стоит тебе поменять свой Asm.
С уважением Kiss!
Ответ отправлен: 10.09.2002, 20:05
Отправитель: Kiss
Отвечает Ayl
Здравствуйте, Студент!
Надо просто в директиву ASSUME добавить ss:stk
Ответ отправлен: 10.09.2002, 20:13
Отправитель: Ayl
Отвечает Broken Sword
Приветствую Вас, Студент!
Нет, на самом деле здесь всего по чуть чуть:
Во первых сразу бросается в глаза - нет assume ss:stk.
Во вторых, у тебя действительно какой то допотопный дистрибутив тасма, даже без assume ss У МЕНЯ ВСЕ РАБОТАЕТ, но у меня tasm.exe версии 4.1, а tlink.exe - 7.1.30.1. Вот с ними у меня все компилится без единой ошибки, и все отлично запускается, правда при запуске SP почему то равен 100h... :)
Ответ отправлен: 10.09.2002, 22:02
Отправитель: Broken Sword
Отвечает Sinner
Приветствую Вас, Студент!
просто у тебя это дело по умолчанию собирается в модель tiny, что подразумевает отсутствие сегмента стека и вообще - все в одном и не больше 64kb. смотри параметры /m... или используй .model
Ответ отправлен: 11.09.2002, 05:57
Отправитель: Sinner
Отвечает DiGiT[old]
Добрый день, Студент!
директива assume не настраивает сегменты.
А .model .stack это тасмовские диретивы он как никак "умный".
Ответ отправлен: 11.09.2002, 06:05
Отправитель: DiGiT[old]
Отвечает VicSimon
Здравствуйте, Студент!
Попробуйте в директиве assume указать:
assume cs:c, ds:d, ss:stk.
Ответ отправлен: 11.09.2002, 06:37
Отправитель: VicSimon
Отвечает ASMодей
Добрый день, Студент!
Скорее всего здесь виноват TASM 2.5, так как более поздние
его версии (4.0, 5.0, 5.3) компилируют программу правильно.
Ответ отправлен: 11.09.2002, 08:15
Отправитель: ASMодей
Отвечает Portnov
Приветствую Вас, Студент!
Поставьте assume cs:c,ds:d,ss:stk, и усе будет ОК!
С уважением, Portnov.
Ответ отправлен: 11.09.2002, 14:02
Отправитель: Portnov
Отвечает Bob Johnson
Доброе время суток, Студент!
У меня tasm 4.1 и tlink 7.1.30.1 и твоя программа компилируется
и линкуется нормально (нет предупреждения об отсутствии стека).
При этом внутри программы при запуске ds = es = сегмент PSP;
cs = ds + 10h - сегмент кода и ss = cs + 3h,
т.е. сегмент стека расположен через 48 байт от начала сегмента кода;
SP = 100h (т.е. как и должно быть).
Отсюда вывод - скачай более новую версию пакета TASM (тем более,
если ты в будущем захочешь использовать команды современных процессоров,
тебе это все-равно понадобится).
Ответ отправлен: 11.09.2002, 14:02
Отправитель: Bob Johnson
Отвечает Топор
Здравствуйте, Студент!
Ты где такой старый TASM нарыл? Уметь ведь надо... Вообще-то директива определения сегмента ставится в кавычки:
stk segment 'stack'
Ответ отправлен: 12.09.2002, 20:30
Отправитель: Топор
Отвечает ARDoS
Приветствую Вас, Студент!
Я откомпилил эту прогу на ТАСМ 5.0 и у меня не выскочило никаких Warning-ов.
Ответ отправлен: 13.09.2002, 14:28
Отправитель: ARDoS
Вопрос № 1218 |
aha, ne zdali, tak dumaete MelkoMiagkie atdadut MASM
4free, figuski. skazite lucsa, gde vziat MASM 4learnig to est 4free?
Thankue...
Вопрос отправлен: 10.09.2002, 20:03
Отправитель: goga
[Следующий вопрос >>] [Список вопросов]
Отвечает kvINT
Добрый день, goga!
http://www.movsd.com/
Я брал здесь месяц назад.
Ответ отправлен: 11.09.2002, 12:14
Отправитель: kvINT
Отвечает Kiss
Приветствую Вас, goga!
Теперь твой язык мне понятен. А что на счет 4free MASM, то я могу тебе его прислать. У меня как раз целый компач, так что проси не стесняйся.
С уважением Kiss!
Ответ отправлен: 10.09.2002, 20:20
Отправитель: Kiss
Отвечает masquer
Здравствуйте, goga!
You better search than post dumb messages.
www.movsd.com
Ответ отправлен: 10.09.2002, 22:23
Отправитель: masquer
Вопрос № 1219 |
Hi all!
Как вывести содержимое регистра на экран? Например в AX у меня 2000, как мне это вывести?
Спасибо!
Вопрос отправлен: 10.09.2002, 21:16
Отправитель: R@ptor (Spinosaur@narod.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает SonicX
Доброе время суток, R@ptor!
Вот тебе процедура вход:ax-число
Write_num proc
push bx
push dx
N1:
mov bx,10000
div bx
cmp ax,0
je N2
add msg_num[0],al
N2:
mov bx,1000
div bx
cmp ax,0
je N3
add msg_num[1],al
N3:
mov bx,100
div bx
cmp ax,0
je N4
add msg_num[2],al
N4:
mov bx,10
div bx
cmp ax,0
je N5
add msg_num[3],al
N5:
add msg_num[4],dl
mov ah,09h
lea dx,msg_num
int 21h
pop dx
pop bx
ret
msg_num db 4 dup(30h),'$'
Write_num endp
Ответ отправлен: 11.09.2002, 20:07
Отправитель: SonicX
Отвечает Ayl
Приветствую Вас, R@ptor!
Слушайте, ну достали уже с этим вопросом! Уже чуть ли не в каждом выпуски FAQа на него отвечают. Зайди на сайт и воспользуйся поиском по рассылке.
P.S. Обычно я спокойный, но тут не выдержал. К тому же Зенит вничью сыграл :-(
Ответ отправлен: 10.09.2002, 21:40
Отправитель: Ayl
Отвечает kvINT
Приветствую Вас, R@ptor!
Ты вроде давно тут. Этот вопрос задавали уже десятки раз, с тех пор как ты рассылку читаешь. Ладно, держи процедуры. Они учебные, так что все оформлены в виде отдельных процедур, можно объединить и количество кода уменьшить. Тебе тут нужны только две, но бери все, не жалко. Взято из статьи "Программирование на ассемблере под DOS".
;-[write_decimal, v1]------------------------------------
;печатает десятичное беззнаковое число
;на входе: dx - типа число
;на выходе: нихрена
;прерывания: ан нэту
;процедуры: write_hex_digit
;--------------------------------------------------------
write_decimal proc
push ax
push cx
push dx
push bx
mov ax,dx ;(1)
mov bx,10d ;(2)
xor cx,cx ;(3)
non_zero:
xor dx,dx ;(4)
div bx ;(5)
push dx ;(6)
inc cx ;(7)
cmp ax,0 ;(8)
jne non_zero
write_digit_loop:
pop dx ;(9)
call write_hex_digit ;(10)
loop write_digit_loop
pop bx
pop dx
pop cx
pop ax
ret
write_decimal endp
;-[WRITE_HEX_DIGIT, V1]----------------------------------
;Печатает одну шестнадцатеричную цифру (младшую тетраду DL)
;(старшая тетрада должна быть равна 0)
;На входе: DL - цифра
;На выходе: нихрена
;Прерывания: ан нэту
;Процедуры: WRITE_CHAR
;--------------------------------------------------------
WRITE_HEX_DIGIT proc
push DX
cmp DL,0Ah
jae HEX_LETTER
add DL,30h
JMP WRITE_DIGIT
HEX_LETTER:
add DL,37h
WRITE_DIGIT:
call WRITE_CHAR
pop DX
ret
WRITE_HEX_DIGIT endp
;-[WRITE_HEX, V1]----------------------------------------
;Печатает две шестнадцатеричные цифры
;На входе: DL - типа цифры две :))
;На выходе: нихрена
;Прерывания: ан нэту
;Процедуры: WRITE_HEX_DIGIT
;--------------------------------------------------------
WRITE_HEX proc
push CX
push DX
mov DH,DL
mov CL,4
shr DL,CL
call WRITE_HEX_DIGIT
mov DL,DH
and DL,0Fh
call WRITE_HEX_DIGIT
pop DX
pop CX
ret
WRITE_HEX endp
;-[WRITE_HEX_WORD, V1]-----------------------------------
;Печатает шестнадцатеричное слово
;На входе: DX - слово
;На выходе: нихрена
;Прерывания: ан нэту
;Процедуры: WRITE_HEX
;--------------------------------------------------------
WRITE_HEX_WORD proc
push DX
xchg DL,DH
call WRITE_HEX
xchg DL,DH
call WRITE_HEX
pop DX
ret
WRITE_HEX_WORD endp
Далее в этой статье все подробнейше разжевано.Зайди на www.wasm.ru, скачай себе эту статью или все шесть из курса "Низкоуровневое программирование для дZенствующих" и больше таких вопросов задавать не будешь.
Ответ отправлен: 11.09.2002, 12:12
Отправитель: kvINT
Отвечает DiGiT[old]
Приветствую Вас, R@ptor!
Ну вообще printf или другие.
А если на ассемблере, то все зависит от системы счисления например 10. То дели на 10 и выводи остаток в обретном порядке прибавив к нему '0'.
ЗЫ Посмотри архив рассылки там это был самый частый вопрос
Ответ отправлен: 11.09.2002, 06:02
Отправитель: DiGiT[old]
Отвечает Shal
Доброе время суток, R@ptor!
Бери отладчик!!!
Приложение:
Ответ отправлен: 12.09.2002, 14:33
Отправитель: Shal
Отвечает Bob Johnson
Здравствуйте, R@ptor!
Не шутишь? Тогда:
Самый простой способ преобразовать число в текстовый вид следующий: ты берешь исходное число, делишь его на основание системы счисления, в которой хочешь его вывести на экран (т.е. на 10 в обычной ситуации). Используешь для этого обычную команду div. Она возвращает результат в AX и остаток от деления в DX. Остаток от деления будет самой младшей цифрой результата (т.е. самой правой). После этого результат, если он отличен от нуля (т.е. то, что получилось в AX) делишь таким же образом еще раз и получаешь вторую цифру справа и т.д. И так до тех пор, пока AX не станет равно нулю.
Недостаток - получаешь цифры справа налево, что немного неудобно. Пример (см. приложение):
Ну а потом... Функция 9 прерывания 21h, например...
P.S. Я представляю, что на этот вопрос ответят другие...
Приложение:
Ответ отправлен: 13.09.2002, 13:59
Отправитель: Bob Johnson
Форма отправки вопроса |
Форма может работать некорректно в почтовых программах "Microsoft Outlook" и "Microsoft Outlook Express". В программе The Bat! подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте, что в некоторых браузерах могут стоять запреты на открытие других окон, а также "чрезмерное" кэширование данных, при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.
© 2002 Команда RusFAQ.ru.
Вопрос и дополнение |
Ваш вопрос:
Приложение (если необходимо):
Получить ответов:
Выбор рассылки |
Программисту Assembler (41) C / C++ (28) Perl (10) Delphi (14) Pascal (24) Basic / VBA (11) Java / JavaScript (12) PHP (9) MySQL / MSSQL (11) |
Пользователю Windows 95/98/Me (39) Windows NT/2000/XP (29) "Железо" (36) Поиск информации (13) |
Администратору Windows NT/2000/XP (14) Linux / Unix (15) |
Юристу Гражданское право (10) Семейное право (6) Трудовое право (8) КоАП (5) |
Отправить вопрос всем экспертам выбранной рассылки.
© 2002 Россия, Москва. Авторское право: RusFAQ.ru |
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||