Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
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.
Вопрос и дополнение |
Ваш вопрос:
Приложение (если необходимо):
Получить ответов:
Выбор рассылки |
Программисту 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 |
Отписаться
Убрать рекламу |
В избранное | ||