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

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


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

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

Выпуск N 093

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

Дата выхода: 2001-09-14


Вопрос №869

Уважаемые эксперты.
Я работаю не Delphi. Скажите как узнать свой IP-адрес

Ответ

Здравствуйте, Kiran! В windows 98: пуск -> выполнить -> winipcfg


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

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

Вопрос №874

здраствуйте!!!
Запускаю С++ командой # C++ file.cpp
нифика нехотит запускать..
З.Ы Я в линухе новичек так что сильно не ругайтесь...
Thank..

Ответ

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

Что происходит то??? что говорит приведи.


Отправил эксперт: Dron (http://spawnhole.narod.ru/asmos/asmos.html - Операционная система с нуля!)
Эксперт отправил ответов (всего): 116

Экспертная группа: Оптимизация программ

Вопрос №875

Уважаемые эксперты.
1) Я так и не дождался вашего ответа (может слишком не терпелив?). Надеюсь что все таки получу свой ответ :).
Моя программа должна из файла file1.txt удалить все дублируемые пробелы и сохранить в файле file2.txt. Укажите, пожалуйста, на ошибки.
2) Расскажите, пожалуйста, о DTA- его структуре
С уважением, Kiran.

Ответ

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

Посмотри внимательно на то место где у тебя идет непосредственное чтение! какие регистры мы должны заполнить??? что должно быть в bx???

В bx должен быть дискриптор открытого файла... ну так запиши его туда и все у тебя будет работать!


Отправил эксперт: Dron (http://spawnhole.narod.ru/asmos/asmos.html - Операционная система с нуля!)
Эксперт отправил ответов (всего): 117

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

Вопрос №876

Уважаемые эксперты.
1) Я так и не дождался вашего ответа (может слишком не терпелив?). Надеюсь что все таки получу свой ответ :).
Моя программа должна из файла file1.txt удалить все дублируемые пробелы и сохранить в файле file2.txt. Укажите, пожалуйста, на ошибки.
2) Расскажите, пожалуйста, о DTA- его структуре
С уважением, Kiran.

Ответ

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

И еще... DTA здесь совсем не при чем! ты же работаешь не через FCB, а через дескрипторы!


Отправил эксперт: Dron (http://spawnhole.narod.ru/asmos/asmos.html - Операционная система с нуля!)
Эксперт отправил ответов (всего): 118

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

Вопрос №876

Уважаемые эксперты.
1) Я так и не дождался вашего ответа (может слишком не терпелив?). Надеюсь что все таки получу свой ответ :).
Моя программа должна из файла file1.txt удалить все дублируемые пробелы и сохранить в файле file2.txt. Укажите, пожалуйста, на ошибки.
2) Расскажите, пожалуйста, о DTA- его структуре
С уважением, Kiran.

Ответ

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

Во первых, забыл в регистр bx занести описатель файла перед вызовом функции чтения:

;---------непосредственно чтение------
mov ah,3fh
mov cx,1024

mov bx,h_src

lea dx,buf1
int 21h

А что программа должна делать, я так и не понял? Опиши подробнее, что должна делать, и КАК ты это реализовал (алгоритм).

По поводу DTA. DTA используется FCB ориентированными функциями. А содержимое DTA зависит от той функции, которую ты выполнил. Для каждой функции (11h 12h 4Eh 4Fh) формат DTA разный.


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

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

Вопрос №868

Уважаемые эксперты.
Прошу Вас просмотрите мою прогу.
Она должна по идее удалять лишние пробелы из файла file1.txt но работает иначе:
Ждет вода с клавиатуры и сохраняет всякую ерунду.

Ответ

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

Посмотрел я Вашу программу. Ну, во-первых, если модель tiny, зачем использовать опцию .stack? В этом случае com-файл не получается.
Теперь собственно о программе.
При чтении из файла Вы забыли указать номер файла. Поэтому прога сразу же заканчивала свою работу с ошибкой чтения из файла.
Во-вторых, при попытке записать символ в буфер файла назначения Вы использовали команду movsb вместо stosb. А при этом результат оказывался совсем не тем, что ожидалось.
Кстати, а что предполагалось делать с начальными и конечными пробелами? Потому как в этой версии они остаются.

Сейчас я попробую переписать Вашу прогу более оптимально.


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

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

Вопрос №878

Уважаемые эксперты!
У меня очень старенькая лошадка:
K6 -200. мамка - неизвестного производителя (на чипе Ali- TX-Pro) с AMI-BIOS 97-го года. По коду BIOS (1437) сумел определить производителя как HSING TECH ENTERPRISE CO.,LTD. Какого не будь нового BIOS этого производителя мне найти не удалось.
Вот в чём проблема:
Сейчас на компе 64М памяти - одна планка SDRAM PC100. Хотелось бы конечно ещё добавить. Пробовал доставить ещё 32,64,128 (как PC100 так PC133) в разных комбинациях. При этом производительность если верить Norton Utilities не растет а падает :( примерно на 20% - с 80 до 63. Можно ли как нибуть решить эту проблему без перепрошивки BIOS или замены материнской платы. Заранее благодарен.

Ответ

Здравствуйте, Славик!
Ставь одну(128Мб) планку памяти, и посмотри в биосе настройки тайминга-пробуй как можно меньше, но чтоб не зависало.


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

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

Вопрос №878

Уважаемые эксперты!
У меня очень старенькая лошадка:
K6 -200. мамка - неизвестного производителя (на чипе Ali- TX-Pro) с AMI-BIOS 97-го года. По коду BIOS (1437) сумел определить производителя как HSING TECH ENTERPRISE CO.,LTD. Какого не будь нового BIOS этого производителя мне найти не удалось.
Вот в чём проблема:
Сейчас на компе 64М памяти - одна планка SDRAM PC100. Хотелось бы конечно ещё добавить. Пробовал доставить ещё 32,64,128 (как PC100 так PC133) в разных комбинациях. При этом производительность если верить Norton Utilities не растет а падает :( примерно на 20% - с 80 до 63. Можно ли как нибуть решить эту проблему без перепрошивки BIOS или замены материнской платы. Заранее благодарен.

Ответ

Здравствуйте, Славик!
Ставь одну(128Мб) планку памяти, и посмотри в биосе настройки тайминга-пробуй как можно меньше, но чтоб не зависало.
Также можешь попробовать одинаковые планки
Хотя проблема интересная...
Кстати для информации-если стоит несколько планок памяти, система меньше разгоняется


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

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

Вопрос №876

Уважаемые эксперты.
1) Я так и не дождался вашего ответа (может слишком не терпелив?). Надеюсь что все таки получу свой ответ :).
Моя программа должна из файла file1.txt удалить все дублируемые пробелы и сохранить в файле file2.txt. Укажите, пожалуйста, на ошибки.
2) Расскажите, пожалуйста, о DTA- его структуре
С уважением, Kiran.

Ответ

Здраствуйте многоуважаемый Kiran!
Помочь могу только своей версией Вашей проги, потому как ненавижу проверять чужие километры кода... пока единственное, что непонятно, Вы каким то левым образом вообще построили файл: сегмент данных, потом org 100h в сегменте кода... Потом Вы вообще не инициализируете этот самый сегмент данных и для чего то вначале делаете манипуляции с сегментом данных и ES хотя они так (без инициализации DS) равны CS и SS. вообщем с самого начала какие то непонятные фортели... моя прога работает 100%, незнаю чем еще помочь... возьмите и сравните.
p.s. алгоритм - не оптимизирован!!! размер com-а - 145 байт (ваш exe (или что это вообще???) за кило валит)

Приложение:


Отправил эксперт: Broken Sword (http://www.revolution.co.uk - скрытая реклама...)
Эксперт отправил ответов (всего): 140

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

Вопрос №872

Раскажите, пожалуйста, о структуре DTA

Ответ

Здравствуйте, Kiran!
Всю не буду, но основные нужные смещения подкину: (начиная с 80h в PSP):
+15h: атрибут файла (байт)
+16h: время создания файла в формате DOS (слово)
+18h: дата создания файла в формате DOS (слово)
+1Ah: размер файла (4 байта)
+1Eh: ASCIZ-имя файла с расширением (13 байт)
естественно, все это дело заполняется после поиска какого-либо конкретного(-ных) файлов на диске, а так - это DTA вроде как и не нада вовсе... (мне пока не встречался другой случай применения)


Отправил эксперт: Broken Sword (http://www.revolution.co.uk - скрытая реклама...)
Эксперт отправил ответов (всего): 141

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

Вопрос №879

Добрый день эксперты!
Что-то я непойму вот эту запись которую нашел в одной несовсем понятной проге :
mov dl, word ptr [0123]; загрузка в dl смешения
Регистр dl однобайтный, как в него можно загрузить явно слово??? В отладнчике dl=0123 как так ?

Ответ

Здравствуйте, Alex!
Во-первых, не смещения, а содержимого памяти по этому адресу (в DS). А во-вторых, прога даже не сассемблируется, т.к. operand types don't match. dl-байт, а word ptr - уже по любому слово.


Отправил эксперт: Broken Sword (http://www.revolution.co.uk - скрытая реклама...)
Эксперт отправил ответов (всего): 142

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

Вопрос №878

Уважаемые эксперты!
У меня очень старенькая лошадка:
K6 -200. мамка - неизвестного производителя (на чипе Ali- TX-Pro) с AMI-BIOS 97-го года. По коду BIOS (1437) сумел определить производителя как HSING TECH ENTERPRISE CO.,LTD. Какого не будь нового BIOS этого производителя мне найти не удалось.
Вот в чём проблема:
Сейчас на компе 64М памяти - одна планка SDRAM PC100. Хотелось бы конечно ещё добавить. Пробовал доставить ещё 32,64,128 (как PC100 так PC133) в разных комбинациях. При этом производительность если верить Norton Utilities не растет а падает :( примерно на 20% - с 80 до 63. Можно ли как нибуть решить эту проблему без перепрошивки BIOS или замены материнской платы. Заранее благодарен.

Ответ

Здравствуйте, Славик!
Все дело в том, что твой процессор слишком слаб и нельзя использовать более 64М памяти! Лишняя память тормозит комп! Так, например, для Селерона 500 предел 256М, да и то многовато! И дело не в Биос и не в производителе материнке или проца!
Так что или новый комп покупай или смирись и "имей то, что имеешь"!


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

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

Вопрос №879

Добрый день эксперты!
Что-то я непойму вот эту запись которую нашел в одной несовсем понятной проге :
mov dl, word ptr [0123]; загрузка в dl смешения
Регистр dl однобайтный, как в него можно загрузить явно слово??? В отладнчике dl=0123 как так ?

Ответ

Здравствуйте, Alex!
Чо за прога такая и как ты умудрился в отладчике увидеть, что dl=0123, когда под эту часть регистра DX отводится только две позиции!
Может не dl, а di - можно спутать!


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

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

Вопрос №783

Уважаемые эксперты!!! ;)
По поводу некоего Bart-а Simpson-а...
У него видете ле инета нет (пока)! К слову, никогда не было, и надеюсь, никогда не будет!!! По поводу пи... каких то его идей, - это он мне не может забыть историю с int 29h, кода я не знал еще такой команды и он мне ее ЛЮБЕЗНО ПРЕДОСТАВИЛ В ПОЛЬЗОВАНИЕ!!! На паскале, он, конечно, не так уж плох, я б даже сказал 4 место по Украине - неплохой результат даже для него// Но рассылка по паскалю еще, к сожаленью, не открылась, и наверно, нескоро это дело организуется, вот он и завидует! ;). Вообщем, Алешик ), скока я тебе прог на асме помог написать, а ты такой подлый тип оказался!!! Нехорошо... ;(

Ответ

Здравствуйте, Broken Sword! Можешь скажешь КАКИЕ !!!???? Проги на асме ? Ты вот, вирус дописал ? А ? А ? Что нет ???? Так сначала допиши а уж потом... "Крутой программер на асме" ты на вопросы отвечай ! (вдруг что то дадут) а то сплошные пустые , и по два раза :)))


Отправил эксперт: Bart Simpson
Эксперт отправил ответов (всего): 6

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

Вопрос №881

Здравствуйте, эксперты.
Вопрос:
1)Какое кол-во бит должно быть в регистре,
чтобы адресовать:
1МБ
4МБ
16Мб
Какое общее решение?
2)Чтобы написать прог-му которая высчитывает время
между двуя нажатыми клавишами, какие прерывания и
функции потребуются?

Ответ

Здравствуйте, Anton!
1. Вопрос какой-то, мягко говоря, неумный... В реальном режиме во всей оперативе можешь адресовать немного больше 4 Gb используя только 16-битные сегментные регистры и стандартные 16-битные регистры общего назначения.
Если тебе надо адресовать больше 64 Кб (а тебе надо больше), то без 16-битных регистров не обойтись никак (ведь сегмент - это 64 Кб, а как ты думаешь адресоваться в сегменте самую "верхнюю" точку без 16 битного регистра???).
Вообще вопрос несколько некорректен потому, что непонятно что ты конкретно имеешь ввиду, берешь ли ты в расчет сегментные регистры...
Чтобы адресовать память без сегментных регистров вообще то для:
1 Мб - нужен ОДИН 20-ти битный регистр
4 Мб - нужен ОДИН 22-х битный регистр
16 Мб - нужен ОДИН 24-х битный регистр
другое дело, что до такого еще пока, слава Богу, никто не додумался...
2. Самый простой вариант: после нажатия первой клавиши вызвать c ah=02h прерывание int 1Ah (текущее время) и сохранить сх и dx (часы, минуты и секунды; можешь только секунды...). После нажатия второй вызвать тоже самое и просто найти разность между полученными результатами (Погрешность в этом случае - всегда менее секунды), вот и вся теория.


Отправил эксперт: Broken Sword (http://www.revolution.co.uk - скрытая реклама...)
Эксперт отправил ответов (всего): 143

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

Вопрос №881

Здравствуйте, эксперты.
Вопрос:
1)Какое кол-во бит должно быть в регистре,
чтобы адресовать:
1МБ
4МБ
16Мб
Какое общее решение?
2)Чтобы написать прог-му которая высчитывает время
между двуя нажатыми клавишами, какие прерывания и
функции потребуются?

Ответ

Здравствуйте, Anton!
1) Для адресации 1М необходимо 20 бит, т.е 2 в степени 20 = 1048576 байт!
Для адресации 4М необходимо 22 бита и т.д.
2) Нужно использовать прерывание системного таймера int 8(вызывается 18.2 раза в секунду)! Затем для перехвата прерываний от клавиатуры в данной проге лучше работать с портами, тогда можно отследить нажатие и отпускание клавиши!


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

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

Вопрос №879

Добрый день эксперты!
Что-то я непойму вот эту запись которую нашел в одной несовсем понятной проге :
mov dl, word ptr [0123]; загрузка в dl смешения
Регистр dl однобайтный, как в него можно загрузить явно слово??? В отладнчике dl=0123 как так ?

Ответ

Здравствуйте, Alex!
Прогу покажи.


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

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

Вопрос №882

Бля!!! Симпсон, ты уже подзаебал малехо... сиди на своем втором курсе и не пи... неуч мля долбаный!!! Все люди в люди уже вышли давно, а оно сидит на втором курсе уже 2 с половиной года и пиз... пиши на своем конченном паскале свои недоделанные вирусы и не лезь сюда нах..., а если полезешь - забудь, что я тут есть вообще. И не звони мне больше, сучок!

p.s. уважаемые эксперты!!! конечно прошу прощения, можете снять 200 балов или вообще нах... послать, но он затрахал уже, чес. слово!!!

Ответ

Здравствуйте, Broken Sword!
Уважаемый Broken Sword!!! мы тут столько говорим о чистоте русского языка, а вы что?! На хуй пишется раздельно.


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

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

Вопрос №884

Здравствуйте Эксперты.
Я написал обработчик 21h-го прерывания, который запрещает вызов функции 25h(установить вектор прерывания). Можно ли установить новый новый вектор на какое-нибудь прерывания, обойдя функцию 25h?

Заранее благодарен.

Ответ

Здравствуйте, Sirius!
Можно читать/писать работая напрямую с таблицей векторов прерываний. Она находится начиная с адреса 0000h:0000h. Каждый элемент таблицы - двойное слово - вектор.


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

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

Вопрос №883

Здравствуйте Эксперты.
Я написал обработчик 21h-го прерывания, который запрещает вызов функции 25h(установить вектор прерывания). Можно ли установить новый новый вектор на какое-нибудь прерывания, обойдя функцию 25h?

Заранее благодарен.

Ответ

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

Вообще-то, в реальном режиме вектор прерывания элементарно устанавливается вручную. Для этого достаточно изменить двойное слово в таблице векторов:

...
xor ax, ax
mov es, ax
cli
mov word ptr es:[NN*4], offset My_IntNN
mov word ptr es:[NN*4 + 2], seg My_IntNN
sti
...
My_IntNN proc far
...

Здесь NN - номер прерывания, которое мы перехватываем, My_IntNN - процедура обработки прерывания. Разумеется, вначале неплохо бы сохранить старое значение обработчика (es = 0):

...
mov ax, es:[NN*4] ; смещение
mov word ptr Old_IntNN, ax
mov ax, es:[NN*4 + 2] ; сегмент
mov word ptr Old_IntNN + 2, ax
...
Old_IntNN dd ?


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

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

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

Рассылки 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

В избранное