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

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.

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

Ваше имя:

Ваш e-mail:

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


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

Ваш вопрос:


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


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


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

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


Яндекс цитирования
© 2001-2003 Россия, Москва. Авторское право: Калашников О.А.


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

В избранное