Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Ассемблер? Это просто! Учимся программировать (FAQ)
Ассемблер? Это просто! Учимся программировать (FAQ)
Выпуск N 089 |
Вопросы, которые поступили от подписчиков рассылки
"Ассемблер? Это просто! Учимся программировать"
Дата выхода: 2001-09-08
Вопрос №819
Привет эксперты!
Эксперты у меня в досе нету русского шрифта.
Что мне делать? (в Autoexec.bat надо строку вписать, но я еЈ не знаю:)
Ответ
Здравствуйте, Alex!
mode con codepage prepare=((866) C:\WINDOWS\COMMAND\ega3.cpi)
mode con codepage select=866
keyb ru,,C:\WINDOWS\COMMAND\keybrd3.sys
Отправил эксперт: RANDOM
Эксперт отправил ответов (всего): 17
Экспертная группа: Пользовательская работа c DOS
Вопрос №816
Здравствуйте уважаемые Эксперты !
Хочу вернуться к моему вопросу о работе со строками 64 кила длиной - это контрольное задание в универе для одного моего знакомого. уменьшить размер строки, т.е.
stroka db 65535 dup (0)
не могу, так как исходники будет просматривать преподаватель и на сей факт сразу обратит внимание. Попытался разместить строку за пределами сегмента программы, вроде вот так:
mov ax,es
add ax,100h
mov es,ax
mov di,0h
a10:
----------
тут консольный ввод строки, что не умно но пока сойдет
символ идет в al
----------
mov es:[di],al
inc di
jmp a10
---------- ввод продолжается до нажатия ENTER
все равно 64 кб текста не могу разместить, меньше пожалуйста. Регулярно читаю рассылку, и один эксперт (не помню точно кто именно) посоветовал обрезать память по размеру проги и юзать оставшееся пространство как угодно. Знаю, что это функции 4Ah и 48h, попробовал провернуть такое - ниче не вышло. Если не сложно, подкиньте исходнички как такое провернуть. Или может еще какие-нибудь идеи есть?
Заранее благодарен.
Ответ
Здравствуйте, Диман!
Делай exe-шник, тип - large или compact. Тогда в сегмент данных можно будет запихать 4 гига.
Отправил эксперт: DM
Эксперт отправил ответов (всего): 34
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №821
Уважаемые экперты!
Я начинающий.
Подкажите пожалуйста откуда можно скакачать необходимые утилиты для изучения и работы асемблером.
У Калашникова с сайта не получается скачать.
(Качаю алигатором)
Ответ
Здравствуйте, SERG!
Чо за алигатор, качай по-нормальному и все получится!
З.Ы. Ну ты Bitman загнул со своей теорией, Диман наверное голову ломает, как на практике осуществить!
Отправил эксперт: Orlando
Эксперт отправил ответов (всего): 88
Экспертная группа: Работа с MASM/TASM
Вопрос №819
Привет эксперты!
Эксперты у меня в досе нету русского шрифта.
Что мне делать? (в Autoexec.bat надо строку вписать, но я еЈ не знаю:)
Ответ
Здравствуйте, Alex!
Неужели так сложно посмотреть архив рассылки?! Только я 2 или 3 раза на этот вопрос отвечал!!! Если влом писать переставь мастдай поверх и усё!
config.sys:
device=C:\WINDOWS\COMMAND\display.sys con=(ega,,1)
Country=007,866,C:\WINDOWS\COMMAND\country.sys
autoexec.bat:
mode con codepage prepare=((866) C:\WINDOWS\COMMAND\ega3.cpi)
mode con codepage select=866
keyb ru,,C:\WINDOWS\COMMAND\keybrd3.sys
или используй какой нибудь руссификатор.
Отправил эксперт: Painbringer
Эксперт отправил ответов (всего): 102
Экспертная группа: Пользовательская работа c DOS
Вопрос №823
Здравствуйте уважаемыу эксперты!
У меня 3 вопроса по выпуску рассылки №4.
1) Зачем в первой программе знаки "<>" перед меткой Next_face?
2) Если их убрать, то программа все равно не работает.
Tasm выдает ошибку:Near jump or call to different cs
Почему?
3) Почему не работает вторая программа? Вроде она правильная?
Ответ
Здравствуйте, TanaT!
В обоих прогах вставь директиву assume cs:cseg сразу после org 100h!
И еще во второй ты обозначил строку, как str, но это команда процессора, так что замени на другую, типа strx! И все будет работать!
Отправил эксперт: Orlando
Эксперт отправил ответов (всего): 89
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №823
Здравствуйте уважаемыу эксперты!
У меня 3 вопроса по выпуску рассылки №4.
1) Зачем в первой программе знаки "<>" перед меткой Next_face?
2) Если их убрать, то программа все равно не работает.
Tasm выдает ошибку:Near jump or call to different cs
Почему?
3) Почему не работает вторая программа? Вроде она правильная?
Ответ
Здравствуйте, TanaT!
Теперь работают.
Приложение:
Отправил эксперт: АлександрМ
Эксперт отправил ответов (всего): 16
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №827
Уважаемые эксперты!
Прошу ответить мне на следующие вопросы (в порядке их приоритета):
1) Где из них содержимое ax=char, а где ax-адрес указанный в char. Или это одно и тоже?
mov ax,cs:char и mov ax,cs:[char]
2) Оператор ret берет из стека значение регистра IP (и если нужно CS). Почему свои программы вы завершаете через ret, а не как положенно через
mov ax,4c00h
int 21h…..?
3) Укажите, пожалуйста, где найти справочник прерываний с описанием их функций.
Ответ
Здравствуйте, Kiran!
1)это вроде одно и тоже
2) здесь почти все программы т.н. формата com, т.е. это в каком-то смысле_прямой_слепок дампа памяти.
первые 100h (256)байт такой програмки это т.н. psp,prefix segment programm, первые 2 байта которого это команда Int 20h (завершение)
и т.к. сегмент com-проги 64k ,то_команда ret в конце программы
устанавливает cs:ip на начало psp, и программа выполнясь дальше и вызывает Int 20h
3)есть на калашникоффе, есть на коденет, есть у меня
Отправил эксперт: АлександрМ
Эксперт отправил ответов (всего): 17
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №827
Уважаемые эксперты!
Прошу ответить мне на следующие вопросы (в порядке их приоритета):
1) Где из них содержимое ax=char, а где ax-адрес указанный в char. Или это одно и тоже?
mov ax,cs:char и mov ax,cs:[char]
2) Оператор ret берет из стека значение регистра IP (и если нужно CS). Почему свои программы вы завершаете через ret, а не как положенно через
mov ax,4c00h
int 21h…..?
3) Укажите, пожалуйста, где найти справочник прерываний с описанием их функций.
Ответ
Здравствуйте, Kiran!
1. Почему char? в Си это, по-моему, относится к буквам
mov ax,cs:100h и mov ax,cs:[100h] - это АБСОЛЮТНО ОДНО И ТО ЖЕ!!! (и первое и второе транслируется в mov ax,cs:[100h]). Если тебе нада смещение, то mov ax,offset var (без всяких CS:) - то, что тебе нада.
2. ret действительно берет из стека значение IP и CS но... только в том случае, если они там лежат!!! (например, они там действительно лежат после call). Но если на протяжении всей проги не трогать стек (или убирать все, что ложим), то в COM-проге на вершине стека в любом случае оказывается число 0 (ноль). Поэтому ret делает переход на 0 смещение в сегменте (не важно какого, все в одном ведь), а там как раз PSP начинается, а там же и команда int 20h (читай рассылку)
3. На www.kalashnikoff.ru поищи, но у меня скоро будет справочник Р.Броуна в hlp формате для виндов на 8 мб (!), там вроде все прерывания дос и биос с обновлениями через инет!!! (странно, что я о нем никогда раньше ничего не слышал)
Отправил эксперт: Broken Sword (http://www.revolution.co.uk - скрытая реклама...)
Эксперт отправил ответов (всего): 136
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №820
Я уже задавал вопрос по поводу серийного номера на проц. Судя по ответам это мне не доступно (пишу я на BP со встроенным асмом). В связи с этим другой вопрос - как правильно прочитать серийный номер винчестера, присваеваемый изготовителем? Была у меня в свое время "разобранная" IdeInfo, но что-то не сросталось - автономно работало (после компиляции), переношу в паскаль - висит :((
Ответ
Здравствуйте, Евгений!
Попробуй что-нибудь вроде этого...
После небольшой правки в виде проверки на других машинах, и
установления точного смещения SN
должна работать как нужно
Удачи!
Приложение:
Отправил эксперт: UFO
Эксперт отправил ответов (всего): 4
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №828
Добрый день эксперты!
По поводу прошлого вопроса, я наверное не то спросил=), а если быть точнее то как в Новигаторе печатать на русском языке (такие сочетания как два шифта и т.д. непомогает)?
P.S. По поводу config.sys и autoexec.bat все впрорядке (винда установленна)
Ответ
Здравствуйте, Alex!
Если в конфиг и автоексек все в порядке, то и в Навигаторе должно работать сочетание клавиш Винды
Если же не работает, то тебе действительно надо запускать keyrus после запуска Навигатора, и пользоватся его переключателем
EQU это эквивалент, то есть мнемоническое имя, которое заменяется на этапе компиляции, используется в основном для описания констант
Отправил эксперт: Sensey
Эксперт отправил ответов (всего): 122
Экспертная группа: Пользовательская работа c DOS
Вопрос №828
Добрый день эксперты!
По поводу прошлого вопроса, я наверное не то спросил=), а если быть точнее то как в Новигаторе печатать на русском языке (такие сочетания как два шифта и т.д. непомогает)?
P.S. По поводу config.sys и autoexec.bat все впрорядке (винда установленна)
Ответ
Здравствуйте, Alex!
прав. ctrl+shift - руск
лев. ctrl+shift - англ
если все равно никак:
тогда те самые русифик., о которых уже говорилось,
как-то: rk, keyrus, и т.п.
Отправил эксперт: АлександрМ
Эксперт отправил ответов (всего): 18
Экспертная группа: Пользовательская работа c DOS
Вопрос №829
Что такое equ? (Пример: "Buffer equ $")
Ответ
Здравствуйте, Alex!
это что-то вроде псевдонима, для какого-нибедь значения
Отправил эксперт: АлександрМ
Эксперт отправил ответов (всего): 19
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №831
Почему перед выполнением двухбайтного div надо
обнулять dx?
mov ax, 10
mov bx, 10
div bx
- программа зависает.
Если перед div вставить xor dx, dx - то работает нормально.
В dx помещается остаток от деления, но почему его надо предварительно обнулять?
Ответ
Здравствуйте, Евгений!
Потому что само делимое при этом должно помещаться в dx:ax. Если dx не обнулить, то догадайся, ЧТО НА САМОМ ДЕЛЕ ТЫ БУДЕШЬ ДЕЛИТЬ.
Отправил эксперт: Василий
Эксперт отправил ответов (всего): 49
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №830
Как в MASM 6.11 создать exe файл?
Ответ
Здравствуйте, Alex!
В каком смысле, как создать? Тебе функцию ДОС подсказать? Или свою прогу ты хочешь оттранслировать в exe'шник?
Отправил эксперт: Василий
Эксперт отправил ответов (всего): 50
Экспертная группа: Работа с MASM/TASM
Вопрос №829
Что такое equ? (Пример: "Buffer equ $")
Ответ
Здравствуйте, Alex!
EQU - это директива макроопределения. Ну то есть, например, у тебя в проге часто используется одно и то же число (ну, там множитель какой-нибудь). Дык, чтобы его постоянно не писать, можно задать его константой через EQU, а потом, где нужно, писать не само число, а имя константы.
Например:
DOS_Int21h EQU 21h
OutPutStr EQU 9h
.
.
.
mov ah, OutPutStr
int DOS_Int21h
Отправил эксперт: Василий
Эксперт отправил ответов (всего): 51
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №828
Добрый день эксперты!
По поводу прошлого вопроса, я наверное не то спросил=), а если быть точнее то как в Новигаторе печатать на русском языке (такие сочетания как два шифта и т.д. непомогает)?
P.S. По поводу config.sys и autoexec.bat все впрорядке (винда установленна)
Ответ
Здравствуйте, Alex!
Ну, лови русификаторы.
Отправил эксперт: Василий
Эксперт отправил ответов (всего): 52
Экспертная группа: Пользовательская работа c DOS
Вопрос №827
Уважаемые эксперты!
Прошу ответить мне на следующие вопросы (в порядке их приоритета):
1) Где из них содержимое ax=char, а где ax-адрес указанный в char. Или это одно и тоже?
mov ax,cs:char и mov ax,cs:[char]
2) Оператор ret берет из стека значение регистра IP (и если нужно CS). Почему свои программы вы завершаете через ret, а не как положенно через
mov ax,4c00h
int 21h…..?
3) Укажите, пожалуйста, где найти справочник прерываний с описанием их функций.
Ответ
Здравствуйте, Kiran!
1) Это одно и то же.
2) А ты посмотри в отладчике, куда при этом прыгает программа. А прыгает она в PSP по смещению 0, где стоит инструкция int 20h (выход из COM-программы).
3) Дык, на www.kalashnikoff.ru валялся архив helpassm.exe. Скачай, распакуй и пользуйся. Удобная вещь.
Отправил эксперт: Василий
Эксперт отправил ответов (всего): 53
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №826
К оболочке хотел приписать в верхнюю её часть, строчку.
Всё вроде сделал по алгоритму как в рассылке. Однако
она почему-то выводится настырно не в середине, а в самом
конце. Где может быть моя ощибка, что я упустил. Середину
строки и оболочки просчитал вроде верно.
Ответ
Здравствуйте, Speedy Gonsalez!
Вышли прогу, поглядим.
Отправил эксперт: Василий
Эксперт отправил ответов (всего): 54
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №831
Почему перед выполнением двухбайтного div надо
обнулять dx?
mov ax, 10
mov bx, 10
div bx
- программа зависает.
Если перед div вставить xor dx, dx - то работает нормально.
В dx помещается остаток от деления, но почему его надо предварительно обнулять?
Ответ
Здравствуйте, Евгений!
Ты делишь на слово(bx),
А правила таковы:
Можно делить слово на байт(ax на bl, тогда al-частное, ah-остаток)
Можно делить Двойное слово на слово(dx:ax на bx, тогда ax-частное, dx-остаток)
Отправил эксперт: Sensey
Эксперт отправил ответов (всего): 123
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №826
К оболочке хотел приписать в верхнюю её часть, строчку.
Всё вроде сделал по алгоритму как в рассылке. Однако
она почему-то выводится настырно не в середине, а в самом
конце. Где может быть моя ощибка, что я упустил. Середину
строки и оболочки просчитал вроде верно.
Ответ
Здравствуйте, Speedy Gonsalez!
Где прога?
Отправил эксперт: Orlando
Эксперт отправил ответов (всего): 90
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Подписаться на рассылки
Форма подачи вопроса
ВНИМАНИЕ!!! Пожалуйста, НЕ высылайте один вопрос сразу нескольким подгруппам! Дополнения к вопросам, на которые эксперт уже ответил НЕ следует направлять ведущему рассылки (я не успеваю!). Просто скомбинируйте первый вопрос и дополнение к нему, а затем заново отправьте его, используя приведенную ниже форму!Нажимайте кнопку "Отправить" только ОДИН раз и дождитесь полной загрузки страницы, иначе вопрос будет продублирован!
Регистрация в качестве эксперта
Архив выпусков
Ведущий рассылки,
Калашников Олег:
Assembler@Kalashnikoff.ru
ICQ No.: 68951340
URL сайта подписчиков:
http://www.Kalashnikoff.ru
______________
По вопросам сотрудничества, рекламы и спонсорства обращайтесь:
- Публичное размещение материала из рассылки: Cooperation@Kalashnikoff.ru
- Реклама на сайте, в книге и рассылках: http://www.Kalashnikoff.ru/Reklama.html, Reklama@Kalashnikoff.ru
- Издание книги (спонсорство): Sponsor@Kalashnikoff.ru
(C) Москва, 2001. Авторское право принадлежит Калашникову О.А. Публичное размещение материала из рассылки, а также его использование полностью или частично в коммерческих или иных подобных целях без письменного согласия автора влечет ответственность за нарушение авторских прав. |
Реклама на сайте Kalashnikoff.ru
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу | Рейтингуется SpyLog |
В избранное | ||