Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

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.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
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)

Отправить вопрос всем экспертам выбранной рассылки.




be number one Яндекс цитирования

© 2002 Россия, Москва. Авторское право: RusFAQ.ru


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное