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

RusFAQ.ru: программирование на языке Assembler


Информационный Канал Subscribe.Ru

RusFAQ.ru: программирование на языке Assembler

Выпуск № 731
от 27.05.2004, 17:20

Администратор:
Имя: Калашников О.А.
URL: Информационный ресурс
ICQ: 68951340
Россия, Москва
О рассылке:
Задано вопросов: 5348
Отправлено ответов: 14718
Активность: 275.2 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Евгений Иванов
Статус: Профессиональный
Общий рейтинг: 133.79
URL: Super Assembler Software
Телефон: НСС +7 831 3107039
[Подробней >>]
Pawel
Статус: Профессиональный
Общий рейтинг: 154.42
[Подробней >>]
Foamplast
Статус: Профессиональный
Общий рейтинг: 150.38
URL: мой личный сайт
[Подробней >>]
 
Dark_Lord
Статус: Профессиональный
Общий рейтинг: 109.62
[Подробней >>]
Ayl
Статус: Профессиональный
Общий рейтинг: 116.63
[Подробней >>]
VOVAN
Статус: Опытный
Общий рейтинг: 105.55
[Подробней >>]
 
Стас
Статус: Доверительный
Общий рейтинг: 128.03
[Подробней >>]
_vt
Статус: Профессиональный
Общий рейтинг: 118.64
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 5309. Здраствуйте. Пиши программу которая переводит aoir#hoakn!baks? на нормальный русский язык. Вроде все... (ответов: 2)
Вопрос № 5311. Здравствуйте уважаемые эксперты. Вопросы у меня вот какие: Есть у нас команда lea bx,[di] 1)А если ... (ответов: 4)
Вопрос № 5312. Здраствуйте. Спасибо большое вам эксперты, что отвечаете на вопросы(!).(чтобы я без вас делал?) Врод... (ответов: 7)
Вопрос № 5313. Здравствуйте! Скажите, пожалуйста, в защищенном режиме можно использовать прямое копирование в видео... (ответов: 4)
Вопрос № 5314. Помогите разобраться с ASSEMBLER'ом. Заранее благодарен!!!... (ответов: 3)
Вопрос № 5315. Приветсвую экспреты! Неподскажите где достать описание элементов которые помещаются в файл rsrc.rc п... (ответов: 3)
Вопрос № 5316. Привет Уважаемые эксперты! Скажите, пожалуйста, как можно получить количество строк в таблице, котор... (ответов: 1)
Вопрос № 5317. Здравствуйте, уважаемые эксперты. Для связи программ по сети воспользовался ресурсами Сокетов Window... (ответов: 1)

Вопросов: 8, ответов: 25


 Вопрос № 5309

Здраствуйте.
Пиши программу которая переводит aoir#hoakn!baks? на нормальный русский язык. Вроде все правильно сделал, а она отказываетя вообще что-либо сделать


Приложение:


Вопрос отправлен: 22.05.2004, 15:04
Отправитель: Семен

[Следующий вопрос >>] [Список вопросов]

Отвечает Евгений Иванов

Приветствую Вас, Семен!
Во первых, читай внимательно о соглашении - только регистры EBX, ESI, EDI, EBP сохраняются и не могут меняться, состояние остальных невычислимо. ;)
Ты же в ECX заносишь hwnd и потом им пользуешься, в результате ни одна функция не работает!
Также ты заносишь номер сообщения в аккумулятор, что тоже приводит к печальным последствиям!
Используй для этих целей ESI, edi или ebx.
И так далее.
Семён, прошу тебя, обратись за помощью конкретно к кому-нибудь.
И вообще лучше по таким вопросам , которые относятся просто к невнимательности и просто к орфографическим ошибкам, не обращаться.
Сначала научись быть внимательным.
Также прошу на ресурс:
http://www.livejournal.com/community/_assembler/
Здесь в режиме реального времени можно пообщаться и обсудить любую тему, связанную с Ассемблером. Всё обсуждение остаётся и его можно почитать в ЛЮБОЕ время и возвратиться и снова обсуждать! ;)
Советую!
Бывай!
* EMan: -=- Любовь существует! =-=


Ответ отправлен: 22.05.2004, 23:14
Отправитель: Евгений Иванов


Отвечает Pawel

Приветствую Вас, Семен!
Интересно, а кто за вас будет hwnd сохранять.
Вы заносите его в ECX, потом изменяете...
И в результате получаете ошибки.

Ответ отправлен: 23.05.2004, 18:16
Отправитель: Pawel


 Вопрос № 5311

Здравствуйте уважаемые эксперты.
Вопросы у меня вот какие:
Есть у нас команда lea bx,[di]
1)А если написать mov bx,[di]
mov bx,[bx]
это будет выполнять то же самое действие или нет?(с учетом написанного ниже)
2)А можно ли здесь ставить префикс чтобы все читалось только из сегмента ds,или только из es?
3)А вот загадка похитрее:
если в команде lea ds и es указывают на 1 и тот же сегмент но di=ffffh?А если по этому адресу тоже ffffh?
Будет ли проц в обоих случаях читать из 2 соседних ячеек или ,как и должен, из es:0 и es:ffff?
я знаю что в 386 адреса могут получиться не 20- а 21-битные,но будет ли здесь так ?а на других проц.?
4)а если команда не 1байтная и начинается в cs:ffffh?
А если sp=0001 и сделать push ax?или pop ax при sp=ffffh?
все конечно о 16 битном режиме.
Заранее благодарен.



Вопрос отправлен: 22.05.2004, 15:45
Отправитель: egor

[Следующий вопрос >>] [Список вопросов]

Отвечает Евгений Иванов

Добрый день, egor!
1. Не одно и тоже. ;)
lea bx,[di] - в регистр BX занесётся DI.
mov bx,[di] - в регистр BX занесётся слово по адресу DI.
2. в MOV можно.
3.Если DI=65535 и выполняем mov bx,[di], то
всё зависит от режима.
Если защ. режим или вирт., то будет вызвано исключение 13 - #GP(0).
Если реальн. режим, то оно называется segment overrun и тоже будет вызываться.
И не важно, какой режим - 16 или 32-битный.
Идёт доступ в другой сегмент, доступ вне границ текущего сегмента, так что процессор будет вызывать исключение #GP, чтобы программист смог исправить ситуацию, потому что она неправильная и указывает на ошибку в программе. Если же тебе нужно сделать заворотные сегменты, то специальным образом обрабатывай исключение.
Удачи!
* EMan: -=- Любовь существует! =-=


Ответ отправлен: 22.05.2004, 23:48
Отправитель: Евгений Иванов


Отвечает Foamplast

Доброе время суток, egor!
Милиционер захотел выпить. Останавливает машину:
-Если я у вас свечу вытащу, колесо спустится?
-Не знаю.
-Платите штраф.
Выпил, еще захотелось.
Останавливает другого:
-Если я у вас свечу вытащу, колесо спустится?
-Не знаю.
-Платите штраф.
Останавливает третьего.
-Если свечу вынуть, колесо спустится?
-А если я вам по голове монтировкой тресну, шнурок развяжется?
Анекдот
  • Нет. lea bx, [di] занесёт в вх содержимое регистра di, а mov bx, [dx] - содержимое памяти по адресу di.
  • Да
  • но di=ffffh - пофигу. А если по этому адресу тоже ffffh - разные действия, но значение в вх одно и то же. читать из 2 соседних ячеек - нет. Lea bx, [di] вообще ничего не читает. не 20- а 21-битные - пофигу. а на других проц - см. анекдот
  • пофигу


Ответ отправлен: 26.05.2004, 08:57
Отправитель: Foamplast


Отвечает Pawel

Приветствую Вас, egor!
1)нет
2) в принципе можно
3) пулучишь искл на переполнение

Ответ отправлен: 23.05.2004, 18:19
Отправитель: Pawel


Отвечает Dark_Lord

Здравствуйте, egor!
1) в точности до наоборот:
mov ax,[di] = lea ax,[di]; mov ax,[ax] = mov ax,di; mov ax,[ax]
2)lea ничего НЕ ЧИТАЕТ из памяти, поэтому вопрос не совсем понятен
3)см. 2
4)А об исключениях и их обработке ты не слышал?

Ответ отправлен: 24.05.2004, 17:58
Отправитель: Dark_Lord


 Вопрос № 5312

Здраствуйте.
Спасибо большое вам эксперты, что отвечаете на вопросы(!).(чтобы я без вас делал?)
Вроде все ясно, но появились еще несколько вопросов
1)Я вот не пойму, что значит "писать программы на ассемблере под Intel 80x86", и чем оно отличается от обычного программирования на асме.
2)Вот смотрите, я не могу понять, как вообще пишут ОС, в частности его ядро. Ведь там применять всякие API и прерывания уже нельзя, так как это ОС и тут придется все писать самому, но я не пойму как писать, если даже в Windows, трудно написать программу не пользуясь WinAPI.



Вопрос отправлен: 22.05.2004, 18:42
Отправитель: Семен

[Следующий вопрос >>] [Список вопросов]

Отвечает Ayl

Добрый день, Семен!
1. Т.к. существует большое количество различных типов процессоров, которые имеют абсолютно различные системы команд и архитектуру, а язык ассемблера отображает систему команд процессора, поэтому для каждого процессора - свой ассемблер. Поэтому и говорят - ассемблер для Intel 80x86, ассемблер для Intel 8080, ассемблер для Z80 и т.п. Соответственно, непонятно, что ты имеешь в виду под "обычное программирование на асме".

2. Что-то ты все смешал. Ядро использует аппаратные возможности конкретного процессора для распределения памяти между задачами и т.п. ОС включает в себя ядро, драйвера устройств для доступа к оборудованию и API для того, чтобы прикладные программы могди обращаться к оборудованию. Работа с устройствами ведется напрямую через порты и прерывания. В реальном режиме доступно API BIOS - оно содержит процедуры для работы с клавиатурой, дисплеем, жестким и гибким дисками, последовательным и параллельным портами и т.п. На основе этих процедур ОС реального режима MS DOS формировала свое API, в т.ч. процедуры для работы с файловой системой (потому что на уровне устройства понятие файла отсутствует - только сектора на диске). То же самое и в защищенном режиме, только здесь уже более проблематично написание API ОС, т.к. отсутствует промежуточный уровень BIOS'а - нельзя вызывать прерывания реального режима из защищенного. Поэтому приходится писать драйвера для всех устройств.


Ответ отправлен: 24.05.2004, 18:29
Отправитель: Ayl


Отвечает VOVAN

Доброе время суток, Семен!
1.есть разные процы. в этом отличие "писать программы на ассемблере под Intel 80x86" от обычного программирования на асме
2.есть прерывания Биоса. есть загрузочная область. 3/4 ядра можно писать на СИ и пр. ЯВУ.

Ответ отправлен: 22.05.2004, 20:18
Отправитель: VOVAN


Отвечает Dark_Lord

Здравствуйте, Семен!
1) Это и есть "обычное" программирование на асме, просто куча всяких устройств, который не поддерживают 80х86 команды.
2)В Windows-то это как раз очень трудно (доступ к портам в/в запрещён), а так на здоровья, без прерываний, напрямую через порты в/в

Ответ отправлен: 24.05.2004, 18:00
Отправитель: Dark_Lord


Отвечает Стас

Приветствую Вас, Семен!
1) Есть и другие процессоры. Я например начинал на Z80,регистры A,B,C,D,E,H,L или парами AF(+флаг), BC, DE, HL, IX, IY; механизм прерываний примерно тот-же только пишутся RST 0, RST 30.
Ассемблер для разных процев отличается, но обычно не значительно. Смысл везде один, написание бывает разное.
С каждым новым процем 8086, 80286, 80386 и т.д. команд прибавлялось, с 386 появился защищенный режим, ну и так далее.
2) Если ты пишешь свою ОС, пользуешся BIOS прерываниями и до перехода в защищеный режим и после (существуют специальные механизмы). Для управления различным оборудованием нужны драйвера, или будешь писать сам (через IN/OUT). Для того чтобы программеры писали проги для твоей ОС прийдется придумать свой API и описать его, чтобы каждый программер не писал драйвер клавиатуры, вывода на экран и т.п. Вообщем-то, можно все, что угодно написать с помощью IN/OUT, MOV и регистров проца. Просто так никто не пишет. Пользуют готовые WinAPI или DOS прерывания для ввода строки символов и вывода её на экран, рисования кружочков и обращения к винчестеру. Так проще. К тому же, возможно, прийдется придумать свою файловую систему или написать поддержку одной из имеющихся.

Ответ отправлен: 22.05.2004, 19:55
Отправитель: Стас


Отвечает Pawel

Здравствуйте, Семен!
1) Коммандами.
2)Существуют BIOS прерывания и порты контроллеров.
Если интересно подробней, то пиши на аску.

Ответ отправлен: 23.05.2004, 18:21
Отправитель: Pawel


Отвечает _vt

Здравствуйте, Семен!
1) А что такое "обычное программирование"? У каждого семейства процессоров - свой язык ассемблера.
2) Ты штаны через голову одеваешь? :-))) Современные ОС предоставляют свое API программам, чтобы они могли выполнять необходимые для них действия, но не могли обращаться к железу. Написать программу для Windows, не используя API просто невозможно. А ОС, для управления памятью, оборудованием, многозадачностью и пр. использует аппаратные прерывания, порты ввода-вывода процессора. Короче, тебе надо изучить для начала ассемблер для MS-DOS - тогда тебе будет понятнее и проще и не будет каши в голове.
* Origin : Life begins at 1000Mhz!


Ответ отправлен: 25.05.2004, 21:17
Отправитель: _vt


Отвечает Foamplast

Доброе время суток, Семен!
  • На свете много разных компьютеров. У них различные архитектуры, способы организации памяти, методы ввода-вывода, команды; отличается даже размер байта и системы счисления. Пример: компьютеры IBM PC ипользуют процессоры Intel, а компьютеры Apple - процессоры Motorola. Программа, написанная для первого не запустится на втором и наоборот. Так вот. Есть такие процессоры фирмы Intel: i8086, i80186, i80286, i80386, i80486, i80586 (Pentium), i80686 (Pentium Pro, Pentium II, Pentium III), i80786 (Pentium IV). Есть много процессоров других фирм, совместимых с ними на уровне набора команд, организации памяти и методов ввода-вывода. Самые известные из них - от фирмы AMD. Есть и совместимые с ними процессоры других фирм (Transmeta, Cyrix). Вот чтобы не перечислять это всё каждый раз, все процессоры, совместимые с указанными называют 80x86 для краткости. А язык ассемблера для низ называется "язык ассемблера 80х86". А что такое "обычное программирование на асме"?
  • Я сам до конца не пойму. И те, кто пишут, полностью тоже не понимают :)
    Вообще-то для общения с внешним миром есть только два способа - запись-чтение памяти или портов ввода-вывода (ну и прерывания как метод ввода), а остальное уже надстройки.
    Могу посоветовать классную книжку: Э.Танненбаум "Современные операционные системы".



Ответ отправлен: 26.05.2004, 00:21
Отправитель: Foamplast


 Вопрос № 5313

Здравствуйте! Скажите, пожалуйста, в защищенном режиме можно использовать прямое копирование в видео память и использовать функции биос?
С уважением, Александр



Вопрос отправлен: 22.05.2004, 20:36
Отправитель: Alexander

[Следующий вопрос >>] [Список вопросов]

Отвечает Евгений Иванов

Добрый день, Alexander!
Запросто.
* EMan: -=- Любовь существует! =-=


Ответ отправлен: 22.05.2004, 23:49
Отправитель: Евгений Иванов


Отвечает Foamplast

Здравствуйте, Alexander!

  • Да, можно. Это только защищённом режиме по-нормальному и возможно.
  • Функции БИОС можно использовать, только если они написаны для защищённого режима. Обычно, находясь в реальном режиме можно получить таблицу указателей на 32-разрядные функции БИОС, которые можно вызывать из защищённого режима. Я не уверен, что эта возможность стандартизована, то есть список функций может отличаться у разных БИОС.



Ответ отправлен: 26.05.2004, 08:42
Отправитель: Foamplast


Отвечает Pawel

Доброе время суток, Alexander!
Да.
Зависет от ОС.
Если вы про Win? то только используя драйвер(ring-0)

Ответ отправлен: 23.05.2004, 18:25
Отправитель: Pawel


Отвечает _vt

Приветствую Вас, Alexander!
Зависит от функций BIOS. Видеопамять - да.
* Origin : Life begins at 1000Mhz!


Ответ отправлен: 25.05.2004, 21:17
Отправитель: _vt


 Вопрос № 5314

Помогите разобраться с ASSEMBLER'ом.
Заранее благодарен!!!



Вопрос отправлен: 22.05.2004, 23:58
Отправитель: Seregaa (seregaa@mail.nnov.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Foamplast

Добрый день, Seregaa!

Всё просто. Забиваешь стрелу, приводишь побольше пацанов и разбираешься. Пацаны:



  • Зубков С.В. "Assembler для DOS, Windows и UNIX".
  • Кулаков "Программирование на аппаратном уровне"
  • Танненбаум Э. "Современные операционные системы"
  • wasm.ru
  • flatassembler.net



Ответ отправлен: 26.05.2004, 08:47
Отправитель: Foamplast


Отвечает Pawel

Добрый день, Seregaa!
ASSEMBLER - это низскоуровневый язык программирования!!!


Ответ отправлен: 23.05.2004, 18:26
Отправитель: Pawel


Отвечает _vt

Здравствуйте, Seregaa!
А это кто? :)
* Origin : Life begins at 1000Mhz!


Ответ отправлен: 25.05.2004, 21:18
Отправитель: _vt


 Вопрос № 5315

Приветсвую экспреты!
Неподскажите где достать описание элементов которые помещаются в файл rsrc.rc при программирование под Win32



Вопрос отправлен: 23.05.2004, 11:25
Отправитель: anton

[Следующий вопрос >>] [Список вопросов]

Отвечает Foamplast

Добрый день, anton!
У меня при программировании под Win32 такого файла нет!
Это зависит от того, что это за файл и кто в него что-либо помещает.
Я так понял, что речь идёт об описании ресурсов. Тогда необходимо смотреть документацию к используемому компилятору ресурсов. Я использую GoRc. Его сам и документацию с описанием элементов можно скачать здесь: http://www.godevtool.com


Ответ отправлен: 26.05.2004, 19:17
Отправитель: Foamplast


Отвечает Pawel

Здравствуйте, anton!
Посмотри на Wasm.ru

Ответ отправлен: 24.05.2004, 19:02
Отправитель: Pawel


Отвечает _vt

Добрый день, anton!
Platform SDK
* Origin : Life begins at 1000Mhz!


Ответ отправлен: 25.05.2004, 21:18
Отправитель: _vt


 Вопрос № 5316

Привет Уважаемые эксперты!
Скажите, пожалуйста, как можно получить количество строк в таблице, которая является результатом запроса SELECT? Процедура SQLRowCount работает только для запросов INSERT, UPDATE, DELETE.
Допустим в таблице первая колонка – уникальный идентификатор и мы добавляем новую запись, как получить идентификатор только-что добавленной записи. Если идентификаторы идут по порядку, то можно послать запрос SELECT MAX(ID) FROM Table1, а как быть если они генерируются случайным образом?
Спасибо!



Вопрос отправлен: 23.05.2004, 12:05
Отправитель: Andrey (AndreyTorba@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Foamplast

Здравствуйте, Andrey!
А это чо ваще? (Ну типа, какая БД, откуда процедуры зовутся?)


Ответ отправлен: 26.05.2004, 19:17
Отправитель: Foamplast


 Вопрос № 5317

Здравствуйте, уважаемые эксперты.
Для связи программ по сети воспользовался ресурсами Сокетов Windows - т.е. сервер ожидает соединение на функции "accept", а клиент вяжется с ним, используя "connect".
Проявилась такая странность: когда клиент работает на компьютере с Win'98, а сервер загружен на Windows 2000 Server (или на Win 9X), то работает все прекрасно, а вот когда сервер на Win'9X, а клиент на Win 2000 Server, то установить связь почему-то не получается, причем впечатление, что клиент вообще никуда не обращается, т.к. практически тут же выдает сообщение, что сервера нет.
Вопросы:
1) С чем это может быть связано, может в Windows 2000 Server организация сокетов какая-нибудь другая, или Win 2000 надо как-то специально настроить?
2)А как сделать, чтобы все работало вне зависимости от расположения сервера?
Заранее спасибо за ответы.



Вопрос отправлен: 23.05.2004, 17:18
Отправитель: Коля

[Следующий вопрос >>] [Список вопросов]

Отвечает Pawel

Добрый день, Коля!
1) в win2k-xp изменина политека безопастности, и в том числе для сокетов

Ответ отправлен: 24.05.2004, 19:06
Отправитель: Pawel



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

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

Ваше имя:

Ваш e-mail:

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


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

Ваш вопрос:


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


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


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

Программисту
Assembler (24)
C / C++ (15)
Perl (2)
Builder / Delphi (17)
Pascal (21)
Basic / VBA (2)
Java / JavaScript (4)
PHP (12)
Криптография (6)
WinAPI (8)
Радиоэлектроника (9)
Пользователю
Windows 95/98/Me (36)
Windows NT/2000/XP (49)
"Железо" (30)
Поиск информации (16)
Администратору
Windows NT/2000/XP (22)
Linux / Unix (9)
Юристу
Гражданское право (10)
Семейное право (8)
Трудовое право (9)
КоАП (7)

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




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.


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


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


В избранное