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

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


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

Ассемблер? Это просто! Учимся программировать (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

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

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

В избранное