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

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


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

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

Выпуск № 515
от 02.04.2003, 18:20

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


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

Bob Johnson
Статус: Профессиональный
Общий рейтинг: 150.23
URL: Программирование
[Подробней >>]
St
Статус: Опытный
Общий рейтинг: 109.25
[Подробней >>]
keleb-glin
Статус: Опытный
Общий рейтинг: 108.85
[Подробней >>]
 
Eugene
Статус: Опытный
Общий рейтинг: 108.91
URL: мощный файловый архив
[Подробней >>]
Samodelkin
Статус: Доверительный
Общий рейтинг: 137.14
[Подробней >>]
Ayl
Статус: Профессиональный
Общий рейтинг: 118.45
[Подробней >>]
 
Maverick
Статус: Профессиональный
Общий рейтинг: 136.61
URL: Задачи по ассемблеру
Телефон: 89039415024 (BeeLine GSM)
[Подробней >>]
akul
Статус: Опытный
Общий рейтинг: 115.75
Телефон: +6019-6416245
[Подробней >>]
Igoryk
Статус: Профессиональный
Общий рейтинг: 125.48
URL: IgorykSoft
[Подробней >>]
 
DiGiT[old]
Статус: Профессиональный
Общий рейтинг: 111.06
[Подробней >>]
Dark_Lord
Статус: Профессиональный
Общий рейтинг: 115.49
[Подробней >>]
Gibbel
Статус: Профессиональный
Общий рейтинг: 108.23
URL: Страничка обо мне и моих друзьях
Телефон: +7 902 168 02 65
[Подробней >>]
 
baldr
Статус: Профессиональный
Общий рейтинг: 113.13
URL: Сайт об ОС DOS. Всем, кто любит эту ОС!
[Подробней >>]


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

Вопрос № 2858. Zdravstvuite Bob Johnson! Вот ты сказал, что при загрузке компа вся память моя. А можно поконкретнее... (ответов: 1)
Вопрос № 2859. Здравствуйте,уважаемые эксперты! Я уже задавал вопрос по поводу нарушения кодировки русских символо... (ответов: 6)
Вопрос № 2860. Здравствуйте тов. Эксперты! У меня прога вылетает.... :( первый проход ещё иногда и ок - высвечивает... (ответов: 1)
Вопрос № 2861. Хайушки эксперты. Вот я уменя есть строка и я хочу вывести ее с анимацией типа так, чтобы вывелась о... (ответов: 5)
Вопрос № 2862. Здраствуйте. У меня есть клавиатура с дополнительными кнопками Например "Back" "WWW&q... (ответов: 2)
Вопрос № 2863. Здраствуйте Уважаемые експерты! Подскажите пожалуста где можна найти исходники обработчиков прерыван... (ответов: 3)
Вопрос № 2864. Здравствуйте! Я новичок, пытаюсь научиться, и у меня возник такой вопрос - пишу программу которая из... (ответов: 6)
Вопрос № 2866. Ммм...Вопрос не много не по теме. Кто нить знает или находил работу в инете(программирование)?... (ответов: 1)

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


 Вопрос № 2858

Zdravstvuite Bob Johnson!
Вот ты сказал, что при загрузке компа вся память моя.
А можно поконкретнее - начиная с каких адресов и по какие можно дрючить?
Вот тут в irc мне сказали, что 1000h->0a000h...
и можно ли заранее использовать
дерективу .data? & org 1000h для сегмента с моим буфером?



Вопрос отправлен: 27.03.2003, 20:04
Отправитель: Эдвард Самохвалов (zeleniy_kot@yahoo.com)

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

Отвечает Bob Johnson

Приветствую Вас, Эдвард Самохвалов!
Я с досом не очень знаком (точнее, не помню уже), но предположу, что в irc тебе сказали правильно, т.е. можешь использовать всю память по адресам 10000h - 9FFFFh, т.е. как ты и написал (только у тебя значения сегм. регистра, а у меня - адреса в памяти - тут просто в последнем байте разница, т.к. 0A0000h относится уже к видеобуферу).
Директиву data? можешь использовать, а вот org - нет.
Потому что у меня что-то org ничего в сегменте данных не меняет. Так что лучше просто запомни что у тебя будет находиться по какому смещению от начала блока памяти и обращайся напрямую, например mov ax, es:[0068h]. Или сделай так:
MY_STRUC equ 68h
...
mov ax, es:[MY_STRUC]


Ответ отправлен: 28.03.2003, 17:18
Отправитель: Bob Johnson


 Вопрос № 2859

Здравствуйте,уважаемые эксперты! Я уже задавал вопрос
по поводу нарушения кодировки русских символов .
В программах на асме под Doc . Например в Hello Word,
если написать по русски. В чем тут дело?
И как решить проблемму.



Вопрос отправлен: 27.03.2003, 23:27
Отправитель: Юрий

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

Отвечает St

Привет, Юрий!
Простите не очень понятно в чем дело. Возможно, что вы пишете программы для ДОС в редакторе для Виндов или наоборот. В ДОСе кодировка русских букв была ASCII а в Виндах - ANSI. Это разные кодировки.
St

Ответ отправлен: 28.03.2003, 13:17
Отправитель: St


Отвечает keleb-glin

Доброе время суток, Юрий!
Дело не в асме, а в Досе. в программах на асме ты используешь уже то, что уже лежит в знакогенераторе, а многие программы его переопределяют. так что - RTFM по Дос. или переопределяй знакогенератор


Ответ отправлен: 29.03.2003, 20:59
Отправитель: keleb-glin


Отвечает Eugene

Приветствую Вас, Юрий!
Во первых поставь себе FAR, а во вторых набирай тексты в нём, обязательно в ДОС кодировке. Если у тебя русский во время набора текста отображается нормально, то и во время выполнения должно всё быть нормально. Если же отображается не нормально, то поставь какой - нибудь русификатор. Повторяю, набирать тексты надо в ДОС кодировке.

Ответ отправлен: 28.03.2003, 09:12
Отправитель: Eugene


Отвечает Samodelkin

Добрый день, Юрий!
Программы на асме под ДОС надо писать в кодировке 866, которая ДОСовская кириллическая. Если пишешь в блокноте или каком виндовом редакторе ты это проконтролируй ... и шрифт используй terminal


Ответ отправлен: 28.03.2003, 11:38
Отправитель: Samodelkin


Отвечает Ayl

Доброе время суток, Юрий!
1. Не установлен русификатор
2. Исходник набирался не в альтернативной кодировке
Пришли свой экзешник - посмотрю.

Ответ отправлен: 28.03.2003, 16:44
Отправитель: Ayl


Отвечает Bob Johnson

Доброе время суток, Юрий!
В том, что надо писать в кодировке DOS, ты же наверное пишешь в кодировки Win-1251 (в любом виндовском текстовом редакторе установлена такая кодировка по умолчанию), поэтому и получается фигня. Попробуй, например, использовать FAR - там точно можно изменять кодировку в редакторе по F8.


Ответ отправлен: 28.03.2003, 18:50
Отправитель: Bob Johnson


 Вопрос № 2860

Здравствуйте тов. Эксперты!
У меня прога вылетает.... :(
первый проход ещё иногда и ок - высвечивает на экран точки, а потом кнопочку нажимаю... и всё - крашается, просто закрывается. У меня подозрение что так есть какой-то бесконечный цикл... потомучто в чистом досе она просто зависает. Расскажите что не так pls!
=Ну да - она пишет за перделы видео-буфера, не совсем ровненько, но это ведь не повод чтобы это... как говорится "чтобы стулья ломать..."
ps: над кодом не смейтесь pls. просто хочу чтобы сначала работала, а потом уже наоптимизируюсь вдоволь.


Приложение:


Вопрос отправлен: 28.03.2003, 06:30
Отправитель: Эдвард Самохвалов (zeleniy_kot@yahoo.com)

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

Отвечает Ayl

Приветствую Вас, Эдвард Самохвалов!
Ну так что ты хотел-то! У меня она и первого прохода не прошла. Все дело-то как раз в том, что ты пишешь за пределы сегмента. В чистом ДОСе просто нет возможности отследить, когда программа лезет туда, куда не должна. Вот все и зависает. А под виндой - GP#13.
Начнем по порядку. Первый шаг выполнится с вероятностью 50% - все зависит от того, четное или нечетное число будет считано из порта таймера при cx равном 1. Если оно нечетное - то все ок, программа перейдет на метку cont и после loop @@seed перейдет к выводу точек. Если же число будет четным, то в массив будет записано значение _live, после этого выполнится команда loop (переход не произойдет, cx = 0), дальше выполнится присваивание по метке cont и снова loop. Но к этому моменту cx = 0, т.е. cx будет уменьшен на 1 (cx = 65535) и будет осуществлен переход на метку @@seed. После этого запись будет производится на код программы (CS=DS!). Результат - на лице.
Так что для исправления этой ситуации надо поставить jmp после первого loop'а.
Ну а дальше просто прелесть! Что это за команда: jne $+1? Вообще-то jcond занимает 2 байта и чтобы перейти на следующую инструкцию нужно переходить на адрес $+2, а в твоем случае - $+3 ($+2 - адрес команды inc ax, еще 1 байт занимает команда inc ax). И вообще, что за понт писать переходы с помощью смещений? Метку лень написать? Вот после этого и ищешь ошибки.
В остальном вроде должно работать.


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


 Вопрос № 2861

Хайушки эксперты.
Вот я уменя есть строка и я хочу вывести ее с анимацией типа так, чтобы вывелась одна буква из строки потом какойто Slep на несколько сек а потом вторая буква и получится когбудто на коаве напечатал делаю вот так всеравно не получается
.model small
.stack 100h
.data
message db "Hello World!",'$'
count=($-message)
.code
main proc
mov ax,@data
mov ds,ax
mov si,offset message
mov cx,count
loop1:
mov ah,2
mov dl,[si]
int 21h
inc si
push cx
mov cx,count*10000
l2:
loop l2
pop cx
loop loop1
mov ax,4C00h
int 21h
main endp
end main



Вопрос отправлен: 28.03.2003, 10:44
Отправитель: Buggy

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

Отвечает keleb-glin

Приветствую Вас, Buggy!
Тебе лучше задержку делать не пустым циклом, а через
mov ah, 0
int 1ah
это вернёт в cx и dx ( верхнее и нижнее слово соответственно ) количество прошедших с начала работы тиков таймера и в al - 1, если таймер "переполнялся" за последние несколько часов. считая тики таймера, делай задержку.


Ответ отправлен: 29.03.2003, 20:50
Отправитель: keleb-glin


Отвечает Samodelkin

Добрый день, Buggy!
И все у тебя получается... выводится строка "Hello World!$" ($ наверное лишняя) только задержка маленькая ... ты ее через таймер оформи, а то нынче машины этот твой count*10000
loop'ами проскочуть не заметив


Ответ отправлен: 29.03.2003, 12:48
Отправитель: Samodelkin


Отвечает Ayl

Добрый день, Buggy!
А ты случайно не под XP запускаешься? Вроде как есть у нее прикол в том, что любая задержка, основанная на loop'е не работает в DOS сессии.
Попробуй вместо этого использовать функцию 86 прерывания 15 или с помощью прерывания 1Ch.
Кстати, а как тебе вообще удалось этот код откомпилить? count равно 12, count * 10000 равно 120 000, что не влезает в регистр cx.
А вообще-то в вопросе неплохо бы указывать, что именно не получается, а то приходится гадать на кофейной гуще, что же хочет от тебя человек...

Ответ отправлен: 28.03.2003, 17:27
Отправитель: Ayl


Отвечает Bob Johnson

Доброе время суток, Buggy!
В регистр cx можно максимально занести 65535, а ты заносить count*10000, что больше 65535, так что у тебя происходит "обрезание" числа. Но это не самое главное. loop на pentium занимает что-то около 5 тактов (кстати значительно медленнее dec ecx и jnz) т.е. весь твой цикл будет выполняться не более 65535*5 = 330 тыс. тактов, что при тактовой частоте даже в 100 МГц даст задержку всего лишь 3,3 миллисекунды (чем больше частота, тем меньше). Поэтому весь твой текст легко печатается за 1/50 секунды, вот ты ничего и не видишь.
Попробуй вот такой цикл:
.386
mov eax, 1000000000
@@1:
dec eax
jnz @@1
Такой цикл должен занимать 1 такт на 1 итерацию, т.е. при частоте 1 ГГц он должен выполняться за 1 сек. Основной недостаток - очень сильно зависит от частоты процессора. Чтобы и это устранить в твоем случае лучше использовать таймер.


Ответ отправлен: 28.03.2003, 18:50
Отправитель: Bob Johnson


Отвечает Maverick

Доброе время суток, Buggy!
"когбудто"-круто, специально не придумаешь :)
Дело в том, что когда ты втыкаешь холостой цикл, скорость его выполнения зависит от процессора, твоя прога на 286 компе будет работать нормально.
Лучше бери значение таймера, и каждую секунду выводи по символу.
А это что?
mov cx,count*10000
l2:
loop l2
Тогда уж проще так:
mov cx,0ffffh
loop $


Ответ отправлен: 31.03.2003, 12:51
Отправитель: Maverick


 Вопрос № 2862

Здраствуйте.
У меня есть клавиатура с дополнительными кнопками
Например "Back" "WWW" "Forward".
Так вот в w2k,XP эти кнопки работают без всяких дополнительных
программ как и кнопки спящего, дежурного режима.
Как мне первее перехватить их?
Пытался ставить хук а он а он не работает.
Спасибо.



Вопрос отправлен: 28.03.2003, 20:55
Отправитель: Swi

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

Отвечает Bob Johnson

Здравствуйте, Swi!
Хук и не будет работать. Эти кнопки системные. Чтобы полностью перехватить, скорее всего, нужен драйвер. В 98 был такой сервис VKD_Filter_Keyboard_Input который именно для этого и был предназначен. Ну а как в 2к я не знаю.


Ответ отправлен: 29.03.2003, 17:29
Отправитель: Bob Johnson


Отвечает akul

Добрый день, Swi!
Обнови Platform SDK и смотри на
VK_BROWSER_*
это и есть твои клавиши...


Ответ отправлен: 30.03.2003, 21:27
Отправитель: akul


 Вопрос № 2863

Здраствуйте Уважаемые експерты!
Подскажите пожалуста где можна найти исходники обработчиков
прерываний для защищенного режима!
Мне нужны прерывания типа как BIOS'овские: 13h, 10h и т. д.
Если можна скиньте на e-mail или порекомендуйте ссылку.
Очень БОЛЬШОЕ Спасибо наперед!



Вопрос отправлен: 28.03.2003, 23:31
Отправитель: Madman (yo_ho@ukr.net)

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

Отвечает keleb-glin

Здравствуйте, Madman!
Исходники обработчиков можно найти в оперативке отладчиком ( в td - alt+F7 на вызове ). Обработчики прерываний БИОСа - такие же как и в реальном. На то они и биоса, что в нём зашиты и не меняются ( по-моему. Если это не так, я не виноват ) Их исходники можно посмотреть, как я уже сказал, потрейсив в отладчике или скормив дизассемблеру дамп памяти по определённому адресу. Я лично не думаю, что производитель выложит код прерываний биоса напоказ.
А исходники небиосовских прерываний - тем более.


Ответ отправлен: 29.03.2003, 21:24
Отправитель: keleb-glin


Отвечает Igoryk

Доброе время суток, Madman!
Исходники БИОСА были на сайте Baldr'a. А там и обработчики прерываний и все, все, все.

Ответ отправлен: 01.04.2003, 17:43
Отправитель: Igoryk


Отвечает DiGiT[old]

Здравствуйте, Madman!
Их нет :). Все пишут их сами. Можешь попросить и микрософт или выковорять из линукс например

Ответ отправлен: 29.03.2003, 06:14
Отправитель: DiGiT[old]


 Вопрос № 2864

Здравствуйте!
Я новичок, пытаюсь научиться, и у меня возник такой вопрос -
пишу программу которая изменяет содержимое текстового файла,
и получается так, что она все предложения пишет в одну строку, а как чтобы каждое предложение с новой строки!


Приложение:


Вопрос отправлен: 29.03.2003, 13:04
Отправитель: evgeny

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

Отвечает Bob Johnson

Доброе время суток, evgeny!
Ну могу только предположить, что конец строки надо писать не просто 0dh, а 0Dh, 0Ah. (CR + LF).


Ответ отправлен: 29.03.2003, 17:29
Отправитель: Bob Johnson


Отвечает Samodelkin

Добрый день, evgeny!
Элементарно! в конце каждой строки подставь ,0Dh,0Ah
это символы возврата каретки и перевода строки (CR LF)? nj то есть курсор перед напечатыванием следующего предложения вернеться в начало текущей строки экрана и перейдет на следующую строку ... в некоторых системах достаточно только символа перевода строки...

Ответ отправлен: 31.03.2003, 04:49
Отправитель: Samodelkin


Отвечает Dark_Lord

Доброе время суток, evgeny!
конец строки в Дос и Windows "0dh,0ah"

Ответ отправлен: 30.03.2003, 15:52
Отправитель: Dark_Lord


Отвечает Gibbel

Доброе время суток, evgeny!
В принципе, и так должен писать в разные строки... Хотя большинство редакторов/просмотрщиков считают разделителем строк только комбинацию CR/LF (0Dh,0Ah).

Ответ отправлен: 31.03.2003, 10:08
Отправитель: Gibbel


Отвечает Maverick

Доброе время суток, evgeny!
См. приложение


Приложение:

Ответ отправлен: 31.03.2003, 12:51
Отправитель: Maverick


Отвечает Ayl

Добрый день, evgeny!
Конец строки - пара символов с кодами 10 и 13. В других операционках может быть просто символ с кодом 10. Но никак не одиночный символ с кодом 13.

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


 Вопрос № 2866

Ммм...Вопрос не много не по теме.
Кто нить знает или находил работу в инете(программирование)?



Вопрос отправлен: 29.03.2003, 17:10
Отправитель: _O_ (Mylaga@mail.ru)

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

Отвечает baldr

Приветствую Вас, _O_!
На форуме все это говорилось. Советую по таким общим вопросам обращаться туда для
обсуждения!! :(((


Ответ отправлен: 29.03.2003, 23:08
Отправитель: baldr



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

Внимание!
Форма может работать некорректно в почтовых программах "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 (35)
C / C++ (27)
Perl (6)
Delphi (16)
Pascal (19)
Basic / VBA (9)
Java / JavaScript (8)
PHP (5)
MySQL / MSSQL (6)
Пользователю
Windows 95/98/Me (30)
Windows NT/2000/XP (22)
"Железо" (28)
Поиск информации (15)
Администратору
Windows NT/2000/XP (10)
Linux / Unix (12)
Юристу
Гражданское право (9)
Семейное право (5)
Трудовое право (5)
КоАП (6)

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




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

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


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

В избранное