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

Ассемблер? Это просто! Учимся программировать (FAQ)


Служба Рассылок Subscribe.Ru проекта Citycat.Ru

Ассемблер? Это просто! Учимся программировать (FAQ)
______________________________________

Выпуск N 044

Вопросы, которые поступили от подписчиков рассылки
"Ассемблер? Это просто! Учимся программировать"

Дата выхода: 2001-07-29


Вопрос №388

Здравствуйте!
Я новичек.Бодро прошагал 1-е 4 урока, и в 4-м налетел на нечто непонятное.Пытался разобраться - не смог.Детали во 2-м окне

Ответ

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

После строки


CSEG segment

необходимо поставить

assume cs:CSEG,ds:DSEG


Отправил эксперт: Nik
Эксперт отправил ответов (всего): 39

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №388

Здравствуйте!
Я новичек.Бодро прошагал 1-е 4 урока, и в 4-м налетел на нечто непонятное.Пытался разобраться - не смог.Детали во 2-м окне

Ответ

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

После строки


CSEG segment

необходимо поставить

assume cs:CSEG,ds:DSEG


Отправил эксперт: Nik
Эксперт отправил ответов (всего): 40

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №388

Здравствуйте!
Я новичек.Бодро прошагал 1-е 4 урока, и в 4-м налетел на нечто непонятное.Пытался разобраться - не смог.Детали во 2-м окне

Ответ

Здравствуйте, mickle!
Ты как-то коряво сегмент описал! Нака:
Еще посмотри команды обработки строк (movs, lods, stos и тд.) - в твоем случае пригодятся.

З.Ы. Вставляй исходник а не lst, а то руками набирать потом твои шедевры - фиговое занятие (ладно хоть они пока не большие)!

Приложение:


Отправил эксперт: Painbringer
Эксперт отправил ответов (всего): 8

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №385

Уважаемые Эксперты.
У меня тут возникла проблема.
Я пишу резидентную программу, которая перехватывает прерывание 09h и записывает введенный символ в файл.
Программа ассемблируется нормально, но при запуске com файла программа виснет или "Программа выполнила некоректную функцию..."
Помогите, пожалуйтста, найти и исправить ощибку.
Заранее спасибо.

Ответ

Здравствуйте, Василий!
Василий - ты чувак! Ты конечно правильно сохраняешь предыдущий вектор, только вот старый обработчик то вызывать иногда не помешало бы! Там где ты пишешь в файл во-первых при открытии файла ты не указываешь, что открываешь на запись, во-вторых при записи функцию 40h так и не вызываешь (int 21h забыл). И ваще, задрочишь ты свой (или скорее всего чужой) винт своим открой закрой!
А еще брось ты свой мастдай и работай под досом! он тебе глупых сообщений выводить не будет, а просто повиснет и всё Ж:-)


Отправил эксперт: Painbringer
Эксперт отправил ответов (всего): 9

Экспертная группа: Пользовательская работа c DOS

Вопрос №386

Здравствуйте эксперты!
Решил самостоятельно написать резидент. Написал и он вроде работает. При нажатии клавиши F12 на экран выводится "Hallo World!!!". Но вот в чем проблема, если держать клавишу F12 и не отпускать ее, то программа вешает компьютер или выдается ошибка. Перепробывал все известные способы вывода информации на экран (int 21h, lodsb-stosw, mov [di],al), но все равно виснет. Подскажите, в чем проблема. Программа прилагается.

Ответ

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

Как я могу судить единственной ошибкой было то, что Вы не сохраняли сегментные регистры ES и DS вызывающей программы. Ваш обработчик их изменял, выводил строку, после чего управление возвращалось вызывающей программе, но ES и DS уже не те, что были до вызова обработчика прерывания 9h.
Кроме того, обратите внимание на организацию циклов и вообще на мои коментарии в программе.

Приложение:


Отправил эксперт: Василий
Эксперт отправил ответов (всего): 1

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №389

Здравствуйте, уважаемые эксперты.
У меня к Вам есть пара вопросов:
1: Есть одно-байтовый регистр, например, ah и есть переменная str dw ?. Как число из регистра ah в шестнадцатиричной системе (0h-63h) перевести в строковой формат в переменную str в десятичной форме?
2: Есть две переменные, например, str dq ? и str2 db 'abcdefghijk'. Как из m-ого байта переменной str2 перенести один байт в n-ый байт переменной str, причем, числа m и n содержатся в регистрах, например, ah и al соответственно (проверка корректности чисел m и n не требуется)?
Заранее благодарен.

Ответ

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

Ответ на первый вопрос можно найти в тексте-приложении.

Что касается второго вопроса, то нужно просто использовать смещения, например:

xor bx, bx
mov bl, al
mov dl, ds:[str2+bx] ;переносим значение из 5-ого байта str2...
mov bl, ah
mov ds:[str+bx], dl ;во 2-ой байт str

Все просто!

Приложение:


Отправил эксперт: Василий
Эксперт отправил ответов (всего): 3

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №385

Уважаемые Эксперты.
У меня тут возникла проблема.
Я пишу резидентную программу, которая перехватывает прерывание 09h и записывает введенный символ в файл.
Программа ассемблируется нормально, но при запуске com файла программа виснет или "Программа выполнила некоректную функцию..."
Помогите, пожалуйтста, найти и исправить ощибку.
Заранее спасибо.

Ответ

Здравствуйте, Василий!

Много писать не буду, просто глянь в приложение, комментарии там, вроде бы, должны все разъяснить.

Приложение:


Отправил эксперт: Василий
Эксперт отправил ответов (всего): 4

Экспертная группа: Пользовательская работа c DOS

Вопрос №390

Скажите пожалуйста, где я могу достать информацию
о новых функциях BIOS по работе с жесткими дисками
большой емкости (прерывание 13h функции > 41h, если
я не ошибаюсь). Будут интересны и другие новые
функции BIOS (точнее функции новых BIOS).
Заранее спасибо.

Ответ

Здравствуйте, Павел!
Функции могу выслать, остальное ищи в инете
Олег
Tschabanow@ewetel.net


Отправил эксперт: Oleg
Эксперт отправил ответов (всего): 9

Экспертная группа: Модели, виды и типы компьютеров (hard)

Вопрос №393

Здравствуйте. У меня есть вопрос по резиденту в 10-ом номере. Вот его кусок:
Ok_09:
push ds
push dx
push cs
pop ds
mov dx,offset My_string
pushf ; здесь (как я понял) сохраняются регистры флагов в стеке
call dword ptr cs:[Int_21h_vect]
pop dx ; а здесь идет восстанвление dx из стека, как это понять? Ведь вершина стека popf?
pop ds
С ув. Алексей.

Ответ

Здравствуйте, Алексей!

При вызове обработчика прерывания через int... (например, int 21h) в стек автоматически кладутся CS (сегментный регистр кода), IP (счетчик команд), PSW (слово состояния процессора, т.е. флаги). Вот в таком порядке. Если же мы вызываем дальнюю процедуру (подпрограмму) через call... в стек автоматически кладуться CS и IP.
Выход из обработчика прерываний производится по iret, при этом из стека извлекаются CS, IP, PSW (именно в таком порядке), а при выходе из продпрограммы по ret - извлекаются CS и IP.

Поэтому перед вызовом call dword ptr cs:[Int_21h_vect] необходимо самостоятельно сохранить в стеке флаги. Но т.к. выход из оригинального обработчика прерывания 21h (да, впрочем и из любого) происходит по iret, то наши положенные в стек флаги автоматически восстановятся при выходе из оригинального обработчика, т.к. по iret, повторюсь, восстановятся CS, IP (которые кладутся в стек автоматически при выполнении инструкции call) и PSW.
Т.о. флагов в стеке уже не будет. Данный момент наглядно демонстрируется в отладчике, если наблюдать за стеком при пошаговом выполнении инструкции процессора.


Отправил эксперт: Василий
Эксперт отправил ответов (всего): 5

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №387

Привет.
У меня такой вопрос.
Намного ли THUNDERBIRD 800 лучше DURON 800?
Говорят, что лучше производительность, но насколько лучше?

Ответ

Здравствуйте, Dr. Nix!

Производительность Thunderbird 800 конечно же лучше производительности Duron 800, но не на очень уж и много. В среднем прирост производительности составляет 5-10 процентов. Учитывая ко всему прочему тот факт, что Thunderbird новее и современее Duron, а цена не намного больше, я бы посоветовал брать Thunderbird.

С уважением, Евгений!


Отправил эксперт: Evgeny
Эксперт отправил ответов (всего): 4

Экспертная группа: Модели, виды и типы компьютеров (hard)

Вопрос №390

Скажите пожалуйста, где я могу достать информацию
о новых функциях BIOS по работе с жесткими дисками
большой емкости (прерывание 13h функции > 41h, если
я не ошибаюсь). Будут интересны и другие новые
функции BIOS (точнее функции новых BIOS).
Заранее спасибо.

Ответ

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

Ты имеешь в виду LBA ??
Пиши мне, отошлю ...
zpsoftware@pisem.net


Отправил эксперт: Nik
Эксперт отправил ответов (всего): 41

Экспертная группа: Модели, виды и типы компьютеров (hard)

Вопрос №393

Здравствуйте. У меня есть вопрос по резиденту в 10-ом номере. Вот его кусок:
Ok_09:
push ds
push dx
push cs
pop ds
mov dx,offset My_string
pushf ; здесь (как я понял) сохраняются регистры флагов в стеке
call dword ptr cs:[Int_21h_vect]
pop dx ; а здесь идет восстанвление dx из стека, как это понять? Ведь вершина стека popf?
pop ds
С ув. Алексей.

Ответ

Здравствуйте, Алексей!

Старый обработчик прерывания заканчивается командой IRET, что
естественно :)
Команда IRET выполняет POP IP, затем POP CS, а затем POPF!

Поэтому флагов в стеке нет!

ЗЫ: Что вам всем кажется, что IRET=RETF ?? Это ведь не так!


Отправил эксперт: Nik
Эксперт отправил ответов (всего): 42

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №389

Здравствуйте, уважаемые эксперты.
У меня к Вам есть пара вопросов:
1: Есть одно-байтовый регистр, например, ah и есть переменная str dw ?. Как число из регистра ah в шестнадцатиричной системе (0h-63h) перевести в строковой формат в переменную str в десятичной форме?
2: Есть две переменные, например, str dq ? и str2 db 'abcdefghijk'. Как из m-ого байта переменной str2 перенести один байт в n-ый байт переменной str, причем, числа m и n содержатся в регистрах, например, ah и al соответственно (проверка корректности чисел m и n не требуется)?
Заранее благодарен.

Ответ

Здравствуйте, Павел!
По поводу первой проги, несовсем понятно чё тебе надо.
(Будунище блин :/
А вторая, нет ничего проще, но оптимизируй сам
.data
str1 dq ?
str2 db 'abcdfkdjfks'
...
.code
...
mov al,2
mov ah,3
mov bl,ah
mov dl,str2[bx]
mov bl,al
mov byte ptr str1[bx],dl
...


Отправил эксперт: Autogen
Эксперт отправил ответов (всего): 1

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №395

Здравствуйте ув. эксперты!
У меня такой вопрос: можно ли с помощью матерной
платы например от 486 прошивать УФРПЗУ (например
27512 у нее всего 28 ног)
Если да то как?

Ответ

Здравствуйте, Dr. Zombie!
Возможно я неправ, но вроде нельзя. Они типа несовместимы.


Отправил эксперт: Autogen
Эксперт отправил ответов (всего): 2

Экспертная группа: Модели, виды и типы компьютеров (hard)

Вопрос №396

Здравствуйте ув. эксперты!
У меня такой вопрос: Как заставить принтир Okipage 8W
печатать в DOS очень мелким шрифтом, там сделано так что стоит резидент и перекодирывает из досной кодировки в маздайную и у него самый мелкий шрифт - 10:(

Ответ

Здравствуйте, Dr. Zombie!
По моему этот резидент сидел в комплекте с дровами.
Попробуй из маздая убить принтяру
(соответственно с дровами). И переопределить его как стандартный.
Авось сработает.


Отправил эксперт: Autogen
Эксперт отправил ответов (всего): 3

Экспертная группа: Пользовательская работа с Windows

Подписаться на рассылки

Рассылки Subscribe.Ru
Ассемблер? Это просто! Учимся программировать
Ассемблер? Это просто! Учимся программировать (FAQ)

Форма подачи вопроса

ВНИМАНИЕ!!! Пожалуйста, НЕ высылайте один вопрос сразу нескольким подгруппам! Дополнения к вопросам, на которые эксперт уже ответил НЕ следует направлять ведущему рассылки (я не успеваю!). Просто скомбинируйте первый вопрос и дополнение к нему, а затем заново отправьте его, используя приведенную ниже форму!

Нажимайте кнопку "Отправить" только ОДИН раз и дождитесь полной загрузки страницы, иначе вопрос будет продублирован!


Ваше имя *:

Ваш e-mail *:

Подгруппы:

Вопрос *:

Прилагаемая программа (если необходимо):


Регистрация в качестве эксперта

Архив выпусков


Ведущий рассылки,

Калашников Олег: Assembler@Kalashnikoff.ru
ICQ No.:
68951340
URL сайта подписчиков: http://www.Kalashnikoff.ru

______________

По вопросам сотрудничества, рекламы и спонсорства обращайтесь:

  1. Публичное размещение материала из рассылки: Cooperation@Kalashnikoff.ru
  2. Реклама на сайте, в книге и рассылках: http://www.Kalashnikoff.ru/Reklama.html, Reklama@Kalashnikoff.ru
  3. Издание книги (спонсорство): Sponsor@Kalashnikoff.ru

Рассылка 'Ассемблер? Это просто! Учимся программировать (FAQ)' Рассылка 'Ассемблер? Это просто! Учимся программировать'


(C) Москва, 2001. Авторское право принадлежит Калашникову О.А. Публичное размещение материала из рассылки, а также его использование полностью или частично в коммерческих или иных подобных целях без письменного согласия автора влечет ответственность за нарушение авторских прав.


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться Рейтингуется SpyLog

В избранное