Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
RusFAQ.ru: программирование на языке Assembler
Информационный Канал Subscribe.Ru |
RusFAQ.ru: программирование на языке Assembler
Выпуск № 688
от 15.01.2004, 19:50
Администратор: Имя: Калашников О.А. URL: Информационный ресурс ICQ: 68951340 Россия, Москва |
О рассылке: Задано вопросов: 4822 Отправлено ответов: 13602 Активность: 282.0 %
|
Список экспертов, ответы которых опубликованы в данном выпуске |
never_again Статус: Опытный Общий рейтинг: 126.57 [Подробней >>] |
SedHg Статус: Доверительный Общий рейтинг: 115.78 [Подробней >>] |
_vt Статус: Профессиональный Общий рейтинг: 118.1 [Подробней >>] |
Bob Johnson Статус: Профессиональный Общий рейтинг: 146.45 URL: Программирование [Подробней >>] |
dr_dolphin Статус: Опытный Общий рейтинг: 113.48 [Подробней >>] |
Ayl Статус: Профессиональный Общий рейтинг: 116.49 [Подробней >>] |
Dark_Lord Статус: Профессиональный Общий рейтинг: 110.34 [Подробней >>] |
izLesa Статус: Начальный Общий рейтинг: 105.73 [Подробней >>] |
Евгений Иванов Статус: Профессиональный Общий рейтинг: 137.07 URL: Super Assembler Software Телефон: Пчёлка +7 905 6601206 [Подробней >>] |
VOVAN Статус: Начальный Общий рейтинг: 107.75 [Подробней >>] |
Portnov Статус: Профессиональный Общий рейтинг: 107.87 URL: Мой сайтик... [Подробней >>] |
Gibbel Статус: Профессиональный Общий рейтинг: 106.07 URL: Savage Metal Club - жизнь в стиле рок-н-ролл Телефон: +7 901 710 3146 [Подробней >>] |
ASMодей Статус: Профессиональный Общий рейтинг: 112.3 [Подробней >>] |
Краткий перечень вопросов |
Вопрос № 4781. Здравствуйте ув.Эксперты. Каждый, кто програмирует на асме должен знать историю развития компов. Не... (ответов: 4)
Вопрос № 4782. Здравствуйте ув.Эксперты. Если из программы можно выходит командой ret, которая занимает 1 байт, то ... (ответов: 7)
Вопрос № 4783. Здравствуйте, ув. эксперт Dark_Lord! Вот вы когда-то ответили кому-то вот так: >>Приветствую Вас, Se... (ответов: 1)
Вопрос № 4784. При ассемблировании программ, приложенных к самоучителю, возникает ошибка: prog01.ASM(25): error A20... (ответов: 4)
Вопрос № 4785. Интересные исходники: http://www.sysinternals.com/ntw2k/source.shtml... (ответов: 1)
Вопрос № 4786. Народ, 1)обьясните как работает комманда DAA если у на AL=FB AF=1. 2)DS=21FE SS=5634 CS=3122 ES=41E... (ответов: 2)
Вопрос № 4787. Подскажите,пожалуйста, какой отладчик подходит для отладки программ работающих в защищенном режиме?... (ответов: 2)
Вопрос № 4788. Приветствую еще раз. Спасибо Евгений за помощь. 2 и 3 вопросы остаются открытыми. И еще один вопроси... (ответов: 1)
Вопрос № 4789. Привет всем экспертам и неэкспертам:-)). Всех вас с наступившем!!! У меня к вам два вопроса. 1)Я бо... (ответов: 3)
Вопросов: 9, ответов: 25
Вопрос № 4781 |
Здравствуйте ув.Эксперты. Каждый, кто
програмирует на асме должен знать историю
развития компов. Немогли бы вы мне ее расказать
или дать ссылку, где об этом прочитать.
Вопрос отправлен: 10.01.2004, 20:56
Отправитель: Frost
[Следующий вопрос >>] [Список вопросов]
Отвечает never_again
Добрый день, Frost!
И изобрели люди транзистор.
И построил Синклер компьютер ZX-Spectrum.
И сделали люди UNIX.
И пришел Б.Гейтс и украл у Макинтош'а оконный интерфейс.
И мало кто знает о UNIX'е и ещё меньше о ZX-Spectrum, а
вор живёт и процветает. А чтоб ему всю жизнь Офис 2003
под OS/2 на Асм 8086 писать!!!
Аминь.
Ответ отправлен: 10.01.2004, 22:07
Отправитель: never_again
Отвечает SedHg
Добрый день, Frost!
Нашиши свой e-mail, я тебе чего-нибудь пришлю.
Ответ отправлен: 11.01.2004, 16:08
Отправитель: SedHg
Отвечает _vt
Здравствуйте, Frost!
Например, в одной старой книге, Фигурнов, "IBM PC для пользователя"
--- E-Man 1.5+ : Life begins at 1000 MHz!
Ответ отправлен: 13.01.2004, 01:27
Отправитель: _vt
Отвечает Bob Johnson
Доброе время суток, Frost!
> Каждый, кто програмирует на асме должен знать историю развития компов.
Не факт... :)
* EMan1.5: ---===*** The game we play ***===---
Ответ отправлен: 12.01.2004, 02:44
Отправитель: Bob Johnson
Вопрос № 4782 |
Здравствуйте ув.Эксперты. Если из программы можно выходит командой ret, которая занимает 1 байт, то зачем
нужно прерывание int 20h, которое занимает 2 байта?
Вопрос отправлен: 10.01.2004, 21:03
Отправитель: Frost
[Следующий вопрос >>] [Список вопросов]
Отвечает dr_dolphin
Здравствуйте, Frost!
Вы наверное всетаки имеете в виду:
mov ax,0x4c00
int 0x21
Дак это команда Exit операционной системы(Dos), которая не просто выходит из подпрограммы (как ret) а выполняет некоторые действия по удалению текущей программы из памяти и переключению выполнения на родительскую программу...
Пока !
Ответ отправлен: 11.01.2004, 10:17
Отправитель: dr_dolphin
Отвечает Ayl
Здравствуйте, Frost!
1. Завершение программы выполняется по прерыванию 21h, функция 4Ch. Эта функция была введена в DOS версии 2.0, после появления файлов типа EXE. Завершение процесса по прерыванию 20h допустимо для файлов типа COM и односегментных EXE (модель памяти SMALL)
2. Для корректной работы прерывания 20h сегментный регистр CS должен указывать на PSP программы
3. Для COM файлов регистр CS не изменяется (чаще всего), и сама программа занимает 1 сегмент памяти, поэтому допустим вызов 20-го прерывания
4. Первые 2 байта PSP содержат вызов прерывания 20h
5. При выполнении COM-файла в стек помещается значение 0
6. При выполнении команды retn с вершины стека выбирается значение и осуществляется ближний переход на этот адрес. Соответственно, для COM-файла будет осуществлен переход на адрес PSP:0 (CS = PSP, на вершине стека - 0), в результате будет выполнено прерывание 20h
7. Для EXE-файла в стек не помещается ничего, соответственно, для завершения программы с помощью команды ret необходимо в стек занести адрес PSP:0 и завершить программу с помощью дальнего ret\'а. Потому что при старте EXE-файла регистр CS устанавливается в зависимости от данных в заголовке (точка входа программы). Но регистры DS и ES содержат значение сегмента PSP. Поэтому в начале программы нужно написать следующий код:
push ds
push 0
и завершить программу командой retf.
Ответ отправлен: 12.01.2004, 12:53
Отправитель: Ayl
Отвечает Dark_Lord
Здравствуйте, Frost!
командой ret можно выходить только из com програм, и сделано это только для совместимости!
Ответ отправлен: 10.01.2004, 21:39
Отправитель: Dark_Lord
Отвечает izLesa
Здравствуйте, Frost!
Использование инструкции ret для завершения программы предпочтительней, т.к. мы экономим один байт. Однако, это работает только в том случае, если не трогали стек (не изменяли регистры SS:SP)
Ответ отправлен: 10.01.2004, 22:47
Отправитель: izLesa
Отвечает Евгений Иванов
Доброе время суток, Frost!
Выходить надо так:
mov ax,4c**h
int 33
А командой ret выходят из COM-программ.
Если при этом стек нормализован, то там находится 0, и переходишь по этому адресу, где содержится CD 20 - int 20h
Удачи!
* EMan: -=- Любовь существует! =-=
Ответ отправлен: 11.01.2004, 13:21
Отправитель: Евгений Иванов
Отвечает SedHg
Приветствую Вас, Frost!
Команда "ret" как команда выхода из программы корректно
работает только тогда, когда в программе отсутствуют
команды "call", а таких программ практически нет.
Почему это так? Потому что команда "call" помещает в стек
адрес возврата, т.е. то место куда нужно будет вернуться после исполнения вызванной процедуры, a "ret" достает из стека этот адрес и передает управление командам следующим за call'ом. Если же в программе нет call'ов, то ret передает управление команде по смещению :0000, а там расположенно INT 20h.
Также можно из программы выйти следующим образом:
...
mov ax,4C00h
int 21h
...
PS: почаще запускай программы под отладчиком, так лучше поймешь, что же происходит на самом деле.
PPS: запусти программу, приведенную в приложении, под отладчиком td.exe. И понаблюдай за изменениями в стеке. Эта программа абсолютно корявая ( это сделано специально), но в образовательных целях, это то что надо =).
Приложение:
Ответ отправлен: 11.01.2004, 16:10
Отправитель: SedHg
Отвечает Bob Johnson
Добрый день, Frost!
Потому что ret выполняет переход на адрес cs:0, где стоит int 20h, который и завершает программу :)
* EMan1.5: ---===*** The game we play ***===---
Ответ отправлен: 12.01.2004, 02:44
Отправитель: Bob Johnson
Вопрос № 4783 |
Здравствуйте, ув. эксперт Dark_Lord!
Вот вы когда-то ответили кому-то вот так:
>>Приветствую Вас, Sensey!
>>А зачем тебе bgi. Не используй их, я помниться на асме >>1024х768х64К мышу нормально сделал!
а можно мне как нибудь получить этот код на miros_lav@mail.ru????
Пожалуйста!!!
Вопрос отправлен: 10.01.2004, 21:51
Отправитель: HowToSVGA
[Следующий вопрос >>] [Список вопросов]
Отвечает Dark_Lord
Здравствуйте, HowToSVGA!
К сожалению код у меня не сохранился, но его не трудно написать. Я сделал это следующим образом:
- Выделил два куска памяти, для хранение картинки мыши и картинки под мышью(я делал это с 32х32х64к (32*32*2 байта)
- В один загружал заранее сделаный курсор мыши (цвет 0 это прозрачный цвет
- Получал точку нахождения мыши
- сохранял рисунок и выводил мышь
- Установливал обработчик событий мыши (int 33h, ax=000ch)
, который, в свою очередь делал следующее:
- 1) рисовал обратно сохранённый рисунок
- 2) сохранял рисунок с новых координат мыши
- 3) рисовал мышь в новые координаты
Если всё равно не получится, пиши на Dark_Lord@RusFAQ.ru, попробую сделать пример!
Ответ отправлен: 11.01.2004, 00:34
Отправитель: Dark_Lord
Вопрос № 4784 |
При ассемблировании программ, приложенных к самоучителю, возникает ошибка:
prog01.ASM(25): error A2062: Missing or unreachable CS
Подскажите, что это значит,и как это исправить?
Вопрос отправлен: 11.01.2004, 00:18
Отправитель: Денис
[Следующий вопрос >>] [Список вопросов]
Отвечает VOVAN
Приветствую Вас, Денис!
попробуй в начале прописать так
cseg:segment
assume cs:cseg,ds:cseg,ss:cseg,es:cseg
org 100h
...
Ответ отправлен: 12.01.2004, 15:58
Отправитель: VOVAN
Отвечает Portnov
Доброе время суток, Денис!
Скорее всего, нужно в начале программы поставить что-нибудь вроде
assume cs:cseg,
где cseg - это имя вашего сегмента кода.
Ответ отправлен: 11.01.2004, 13:45
Отправитель: Portnov
Отвечает Евгений Иванов
Приветствую Вас, Денис!
Возможно, ты забыл
assume cs:segment_name
* EMan: -=- Любовь существует! =-=
Ответ отправлен: 11.01.2004, 14:06
Отправитель: Евгений Иванов
Отвечает SedHg
Доброе время суток, Денис!
Мой совет такой: выкини свой MASM 5.1(судя по полученной ошибке, у тебя именно он) на помойку, используй TASM для ДОСовских программ.
А устранить эту ошибку можно, вставив эту строку: assume cs:CSEG после org 100h.
Ответ отправлен: 12.01.2004, 00:26
Отправитель: SedHg
Вопрос № 4785 |
Интересные исходники:
http://www.sysinternals.com/ntw2k/source.shtml
Вопрос отправлен: 11.01.2004, 16:06
Отправитель: EI
[Следующий вопрос >>] [Список вопросов]
Отвечает Gibbel
Приветствую Вас, EI!
Конечно, среди ссылок, которые ты кидал сюда, есть и интересные... Но все-таки, существует специальный Форум для этого дела.
Ответ отправлен: 12.01.2004, 10:28
Отправитель: Gibbel
Вопрос № 4786 |
Народ,
1)обьясните как работает комманда DAA если у на AL=FB
AF=1.
2)DS=21FE SS=5634 CS=3122 ES=41E3 BP=9A32 BX=7536 SI=45FA DI=22F1 ай адресации 73 после него идёт 90 01, чему будет равен эффективный адрес?
3)тоже самое но абсолютный.
Если можео, то как это всё осчитывать. Спасибо за любую помощь.
Вопрос отправлен: 11.01.2004, 17:51
Отправитель: Vzeeka
[Следующий вопрос >>] [Список вопросов]
Отвечает Евгений Иванов
Приветствую Вас, Vzeeka!
DAA
Logic if ((AL AND 0Fh) > 9) OR (AF = 1)
AL = AL + 6
AF = 1
else AF = 0
endif
if (AL > 9Fh) OR (CF = 1)
AL = AL + 60h
CF = 1
else CF = 0
endif
FB+6 = 251+6 = 257 = 101h = 1 (CF=1)
1+ 60h = 61h (CF=1)
AL было FBh, стало 61h
всё просто.
Бывай!
* EMan: -=- Любовь существует! =-=
Ответ отправлен: 11.01.2004, 18:48
Отправитель: Евгений Иванов
Отвечает SedHg
Привет, Vzeeka.
1. Нормально работает =).
Если младшие четыре бита AL больше 9 или флаг AF = 1, то AL увеличивается на 6,CF устанавливается, если при этом сложении произошел перенос, и AF устанавливается в 1.
Иначе AF = 0.
Если теперь старшие четыре бита AL больше 9 или флаг CF = 1, то AL увеличивается на 60h и CF устанавливается в 1.
Иначе CF = 0.
2 - 3. Насколько я понимаю, ты спрашиваешь про физический адрес.
Физический адрес состоит из двух компонентов: адреса начала сегмента и смещения внутри сегмента. Старшие 16-бит адреса начала сегмента находятся в одном из сегментных регистров (cs, ds, ss, es, fs, gs), если к этому 16-битному
числу добавить на конце четыре нуля, то мы получим полный адрес начала сегмента.
Смещение (эффективный адрес) может содержаться явно в команде либо косвенно в одном из регистров общего назначения. Смещение можно минимум из одного и максимум из трех источников: из значения смещения в самой команде и (или) из содержимого одного базового(bx или bp) и (или) одного индексного регистра(si или di). Количество источников, формирующих смещение, определяется кодированием конкретной команды, и если таких источников несколько, то значения в них складываются.
Ответ отправлен: 12.01.2004, 00:36
Отправитель: SedHg
Вопрос № 4787 |
Подскажите,пожалуйста, какой отладчик подходит для отладки программ работающих в защищенном режиме?
Вопрос отправлен: 11.01.2004, 18:49
Отправитель: ROBY
[Следующий вопрос >>] [Список вопросов]
Отвечает SedHg
Доброе время суток, ROBY!
Лучше SoftIce ничего не создано.
Ответ отправлен: 12.01.2004, 00:46
Отправитель: SedHg
Отвечает ASMодей
Приветствую Вас, ROBY!
Насколько я знаю для "чистого" защищенного режима (то есть без всяких загруженных ОС) отладчика не существует.
Ответ отправлен: 12.01.2004, 09:18
Отправитель: ASMодей
Вопрос № 4788 |
Приветствую еще раз.
Спасибо Евгений за помощь. 2 и 3 вопросы остаются открытыми.
И еще один вопросик, есть число -43,3, нужно его записАть в 16ичной системе с плавающей точкой в 8 байтах. Помогите пожалуйста.
Вопрос отправлен: 11.01.2004, 19:16
Отправитель: Vzeeka
[Следующий вопрос >>] [Список вопросов]
Отвечает Евгений Иванов
Здравствуйте, Vzeeka!
MyNumber dq -43.3
а 2 вопрос я не понял, поясни..
* EMan: -=- Любовь существует! =-=
Ответ отправлен: 11.01.2004, 20:19
Отправитель: Евгений Иванов
Вопрос № 4789 |
Привет всем экспертам и неэкспертам:-)). Всех вас с наступившем!!!
У меня к вам два вопроса.
1)Я больше полмесяца не пользовался компом. К инету не подключал да и вообще не делал с ним ничего. Через полмесяца (в ноябре) включив компутер я обнаружил, что мой комп не стал поддерживать русскую раскладку на сайтах. То есть, когда я хочу написать в поисковике или на каком-то форуме что-то на русском (например слово ассeмблер), то это слово выглядет вот так: 0AA5<1;5@. С латыницей проблем нет. Зато в установленных программах (аутглюк, уорд, и т.д. и кириллица и латыница идет нормально).Подскажите пжлста в чем проблема?
И второй вопрос. На прошлой неделе я почистил временные папки дифрагментировал диск и убрал несколько галочек с автозагрузки. Со следующего старта пошли глюки. Стартую комп, через минуту он сам перестартовывается. И так постоянно. А недавно получилось так, что стартанул комп и как только он запустился сразу же открыл аутлук. Выскочило сообщение типа прервать загрузку почты? Кликаю на "нет" и все, комп работает нормально. Теперь после каждого старта приходится мне сразу подключать аутлук, чтобы комп не перестартовывался сам по себе. В автозагрузчике вернул все галочки на свои места, но проблема так и не решилась. Что еще можно сделать?
ЗЫ. Виндоуз у меня ХР профессионал.
Заранее мерси
Вопрос отправлен: 11.01.2004, 19:19
Отправитель: Murzika (murzilka_3@gala.net)
[Следующий вопрос >>] [Список вопросов]
Отвечает VOVAN
Добрый день, Murzika!
переустанови винду
Ответ отправлен: 12.01.2004, 15:58
Отправитель: VOVAN
Отвечает never_again
Доброе время суток, Murzika!
попробуй просто исправить свои Подоконники ХР.
поставь загрузочный диск и выбери "Repair"
Ответ отправлен: 11.01.2004, 23:10
Отправитель: never_again
Отвечает ASMодей
Приветствую Вас, Murzika!
Пути загрузки Windows неисповедимы. Даже не знаю, что и посоветовать, тем более, что вопрос немного не по адресу, все таки здесь рассылка по ассемблеру. Попробуй переставить винду (стандартный ответ).
Ответ отправлен: 12.01.2004, 09:27
Отправитель: ASMодей
Форма отправки вопроса |
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.
(C) 2002-2003 Команда RusFAQ.ru.
Вопрос и дополнение |
Ваш вопрос:
Приложение (если необходимо):
Получить ответов:
Выбор рассылки |
Программисту Assembler (24) C / C++ (17) Perl (4) Builder / Delphi (18) Pascal (19) Basic / VBA (5) Java / JavaScript (5) PHP (13) Криптография (5) WinAPI (13) |
Пользователю Windows 95/98/Me (42) Windows NT/2000/XP (58) "Железо" (29) Поиск информации (21) |
Администратору Windows NT/2000/XP (27) Linux / Unix (9) |
Юристу Гражданское право (13) Семейное право (9) Трудовое право (10) КоАП (9) |
Отправить вопрос всем экспертам выбранной рассылки.
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||