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

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


Служба Рассылок Subscribe.Ru

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

Выпуск N 119

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

Дата выхода: 2001-10-18


Вопрос №1216

Я набрал программку из рассылки:

CSEG segment
org 100h

Begin:

mov ah,9
mov dx,offset Message
int 21h

int 20h

Message db 'Hello, world!$'
CSEG ends
end Begin

компилировал этой прогой:
Microsoft (R) Macro Assembler Version 5.10 10/16/1

и этой командой:
masm.exe hw.asm, hw, hw;

В ответ получил такое (часть лст файла):
0100 Begin:
hw.asm(4): error A2062: Missing or unreachable CS

Один человек сказал, что нужно компилировать в ком файл.

Вот и вопрос, как это делается и где почитать поподробнее, как оформляются сегменты, как всё это компилируется и какие есть подводные камни. Строки с 6 по 12 понятны, а остальное нет.

Ответ

Здравствуйте, Дмитрий!
щас может подняться много визгу, но я все таки выскажу: ВЫКИДЫВАЙТЕ МАСМ ПОДАЛЬШЕ, И НЕ УСЛОЖНЯЙТЕ СЕБЕ ЖИЗНЬ!!!! ведь не для виндов же пишите в самом деле. ну вроде все.
а почему? да вот почему;

компиляция в com или exe TASM-ом:

1. tasm filename.asm
2. Для com: tlink /t filename.obj
Для exe: tlink /v filename.obj
ВСЕ!!!!!!! БОЛЬШЕ НИЧЕГО ЗНАТЬ НЕ НУЖНО!!!


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

Экспертная группа: Работа с MASM/TASM

Вопрос №1220

Прувет!!!
Не ну че за фигня в натуре???
тут недавно говорили шо асм ето рулез, а усе остальное батва
типа кал...(KOL) не, я не против асма и даже за, но
это не значит шо нельзя сляпать вирь на паскле или даже на яве..конечно асм для етого лучше подходит, но ето не значит что остальное в заднице...и все такое..
да и на паскале не плохой вирь мона сляпать
во...ща сяду и придумаю..

Ответ

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

Напиши полиморфа на паскале? Не выйдет! Хоть один байт да будет одинаковый во всех копиях (на самом деле одинаковых будет больше)
Разница между паскалевым и асмовым вирем такая же как между парализованным и здоровым человеком.


Отправил эксперт: Евгений
Эксперт отправил ответов (всего): 24

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

Вопрос №1213

А как в играх усаётся делать такую быструю графику?
Я вот тут на C++ еле как прогу написал.
вот фрагмент:
HDC devc = CreateDC("DISPLAY", NULL, NULL, NULL);
PAINTSTRUCT pstr;
switch (msg)// Выполняем обработку сообщений. идент сообщения передается через параметр msg
{case WM_PAINT:
{ devc = BeginPaint(hwnd, &pstr);
devc = GetDC(hwnd);
for(int a=0;a<0xFF;a=a+1){
for(int b=0;b<0xFF;b=b+1){
SetPixel(devc, a, b, ((((0XFF0000-a*0xFF00)+b)*0x10000+a*0X100+b)));
}
}
ReleaseDC(hwnd, devc);
return 0;
}

Так даже видно как закрашивает. Такая скорость никуда не годится.
Как сделать чтобы быстро было?



Ответ

Здравствуйте, fanonymous!
Про DirectX слыхал???


Отправил эксперт: Евгений
Эксперт отправил ответов (всего): 26

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

Вопрос №1210

Здравствуйте!
Народ, горю. Тут у вас проскальзывал вопрос по поводу управления дисководом через порты. Мне позарез необходима инфа подобного рода. Если кто располагает, не сочтите за труд выслать на Suxxess_1@mail.ru, буду неимоверно благодарен.
С уважением к вашему нелегкому делу, Воинствующий ламер

Ответ

Здравствуйте, Воинствующий ламер!


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

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

Вопрос №1228

Можно я тоже задам вопрос? :)

Проблема встала передо мной!
Есть Winsock, есть досовая прога.
Досовая прога в моих руках не может подключиться к инету.
Хотя должна.

Прилагаю тестовый текст.
У меня не проходит даже Socket.

Если кто что нибудь знает про 16-битное программирование winsock, помогите, не дайте погибнуть!

Есть вот урл (http://www.phekda.freeserve.co.uk/richdawe/dossock), но там все на паскале, долго ковырял, не понял что у меня не так. :(( завтра буду пробовать примеры компилить... может у меня комп глючный? не пойму.

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

Ответ

Здравствуйте, Dron!
Насколько я посмотрел код паскаля там происходит переход в защищенный режим. И вызов соответствующих прерываний. А ты пытаешься в реальном. Но это только мое мнение может я и не прав.


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

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

Вопрос №1220

Прувет!!!
Не ну че за фигня в натуре???
тут недавно говорили шо асм ето рулез, а усе остальное батва
типа кал...(KOL) не, я не против асма и даже за, но
это не значит шо нельзя сляпать вирь на паскле или даже на яве..конечно асм для етого лучше подходит, но ето не значит что остальное в заднице...и все такое..
да и на паскале не плохой вирь мона сляпать
во...ща сяду и придумаю..

Ответ

Здравствуйте, Змей!
Ты что не русский? Зачем так писать трудночитаемо.
Для того они и сделаны эти языки. Я бы посмотрел как кто-нибудь написал ОС не по пути ядро->компилятор языка высокого уровня->все остальное, а по пути асм->asm->asm


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

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

Вопрос №1218

Приходит сообщение от MAILER-DAEMON типа от почтового
сервера ни слова не написано зато exe_шка прикрепленная
на 23 кило хе-хе Хто такой умный

Ответ

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

Почтовый червь! Не рекомендую запускать эту "экзешку".


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

Экспертная группа: Работа с MASM/TASM

Вопрос №1232

Здравствуйте эксперты!
Если у вас есть какая-нибудь документация (на русском) по
программированию доступа к дополнительной памяти, то
если не затруднит, пришлите.
Заранее спасибо.

Ответ

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

Глянь почту.


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

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

Вопрос №1216

Я набрал программку из рассылки:

CSEG segment
org 100h

Begin:

mov ah,9
mov dx,offset Message
int 21h

int 20h

Message db 'Hello, world!$'
CSEG ends
end Begin

компилировал этой прогой:
Microsoft (R) Macro Assembler Version 5.10 10/16/1

и этой командой:
masm.exe hw.asm, hw, hw;

В ответ получил такое (часть лст файла):
0100 Begin:
hw.asm(4): error A2062: Missing or unreachable CS

Один человек сказал, что нужно компилировать в ком файл.

Вот и вопрос, как это делается и где почитать поподробнее, как оформляются сегменты, как всё это компилируется и какие есть подводные камни. Строки с 6 по 12 понятны, а остальное нет.

Ответ

Здравствуйте, Дмитрий!
так набо набрать assume cs:CSEG; в твоих обозначениях
перед org 100h


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

Экспертная группа: Работа с MASM/TASM

Вопрос №1235

Спасибо эксперту Ayl за то, что он ответил на вопрос (1200). Но когда я переключаю режим экрана предложенным им способом то русские символы заменяются на символы из стандартной IBMской таблицы. Я попытался исправить эту проблему загрузив в знакогенератор символы кирилицы. Но это помогло лишь для режима 132*25(и еще нескольких двдугих). А в остальных случаях монитор гаснет и больше не загорается. Да и еще если переключить видео режим (в сеансе MS-DOS), а затем переключиться на другое окно, то при переключении обратно я вижу лишь черный экран. А на второй мой вопрос так никто и не ответил.

Ответ

Здравствуйте, Андрей!
В смысле переключиться на другое окно в режиме DOS, а при возврате черное окно. Если имеешь в виду не окна, а текстовые страницы, то
При другом текстовом видеорежиме ты уже имеешь не 8 страниц, а в зависимости от режима. Попробуй фунцию 11h подфункцию 12h int 10h для смены шрифта.
И как гаснет и не загорается физически что ли?


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

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

Вопрос №1234

Привет Всем!!!
Что значит # в следующих строках
mov cx,#18
mov bp,#boot_msg

Ответ

Здравствуйте, DiGiT!
Я попробовал-ничего не значит особенного-обычная буква, то есть в данном кусочке просто две переменных #18 и #boot_msg
А для 51 ассемблера это указывает на числовую константу


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

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

Вопрос №1239

Уточнение к вопросу 1235 для эксперта DiGiT.
Я переключаюсь между окнами в режиме эмуляции MS-DOS в WINDOWSe (в своем первом вопросе я не совсем точно выразился).
А монитор гаснет не физически просто на нем ничего больше не отображается.

Ответ

Здравствуйте, Андрей!
Так ты зачем запускаешь подобные приложения в винде. У тебя наверное еще и милленниум. Если хочешь полноценно заниматься асмом, то только реальный режим дос, защищенный юних,вин32 винды,или любой твой. Но здесь тебе нужна дос и реальный режим так,что винда 95,98 и command prompt only


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

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

Вопрос №1250

Уважаемы эксперты! Не могли бы вы мне обяснить, почему эта программа зацикливается?
И еще, чем различается JMP от JNZ?
Заранее спасибо.

Ответ

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

Могли бы. Начнем прямо со второго вопроса. JMP от JNZ отличается тем, что jmp - это безусловный переход, выполняется всегда. Поэтому когда ваша программа доходит до конструкции jmp label1, то управление передается на метку label1 и продолжаются выводиться строки... Пока проц не перегреется... :)

JNZ - условный переход. При обнаружении данной инструкции процессор проверяет флаг нулевого результата (ZF) и в случае, если он не установлен (т.е. результат последней операции не 0) осуществляется переход на метку. В противном случае выполняется команда, следующая за инструкцией jnz.

Для избежания цикла в вашей проге вы можете поступить 2-мя способами:
1. замените команду jmp label1 на команду jnz label1
2. оформите вывод строк следующим образом (см. приложение)

команда loop label1 аналогична последовательности:
sub cx
jnz label1

Приложение:


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

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

Вопрос №1243

Здравствуйте эксперты

Я работаю под Win2000.

Поумолчанию Win2000 автоматически закрывает окна всех DOS-приложений по завершении их выполнения

Если я использую *.bat в котором содержится командная строка
tasm /всякадребедень 1.asm 2.asm

То позавершении ассемблирования консольное окно закрывается чпб

Как сделать чтобы оно осталось

tasm.pifы не помогают Я пробовал

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

Ответ

Здравствуйте, ivekm!
В конце бат-файла PAUSE писать пробовал.


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

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

Вопрос №1250

Уважаемы эксперты! Не могли бы вы мне обяснить, почему эта программа зацикливается?
И еще, чем различается JMP от JNZ?
Заранее спасибо.

Ответ

Здравствуйте, Ilya!
В твоем случае надо еще сравнивать cx с 0, т.е. использовать команду
jnz:
..
dec cx
jnz label1
..
Или используй Loop, тогда не надо уменьшать cx:
mov cx,10
label1:
..
loop label1
Тело цикла повториться 10 раз.

Jmp-это безусловный переход на метку(осуществляет дальние и ближние переходы)
jnz,jz,je,jne,jb,ja и др.: условный переход(только ближние переходы).


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

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

Вопрос №1250

Уважаемы эксперты! Не могли бы вы мне обяснить, почему эта программа зацикливается?
И еще, чем различается JMP от JNZ?
Заранее спасибо.

Ответ

Здравствуйте, Ilya!
JMP-безусловный переход, т.е. всегда
JNZ-переход, если не равно, после CMP
Вот так:
mov cx,10
label1:
mov ah,9h
mov dx,offset mess
int 21h
sub cx,1
cmp cx, 0
jnz label1

а еще лучше
mov cx,10
label1:
mov ah,9h
mov dx,offset mess
int 21h
loop label1


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

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

Вопрос №1252

Здравствуйте уважаемые Эксперты!
Подскажите с такой _непоняткой_:пишу прогу, в которой использую джамп по текущему значению счетчика+какое либо значение. Что такое это значение - известно, можете не объяснять. Так вот, эта самая команда JMP $+значение весьма странно работает в EXE. Опытным путем просек что прыгать нужно на NOP тогда все работает нормально, иначе - виснет (хотя тоже интересно почему, в COM такого не надо было) Привел бы исходник где такое сделал но здоровый он сильно... Но это еще ничего - работает и ладно - принес работающий исходник домой (прогу на работе писал) и откомпилил тоже тасмом но другой версии. Прога снова отказалась работать ! Получается, что компиляторы разных версий по разному транслируют одни и те же мнемокоманды ! Я прав или может другая причина есть?

Знаю что удобней джамп ставить на метку(так и сделал в конце концов) просто интересен сам факт - почему?

Ответ

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

Какое значение ты использовал? непосредственное число?
Возможно в этом причина?
Или для верности указать именно относительный jmp short?
Может быть она пытается использовать абсолютный адрес?

кусочек кода бы привел.


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

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

Вопрос №1252

Здравствуйте уважаемые Эксперты!
Подскажите с такой _непоняткой_:пишу прогу, в которой использую джамп по текущему значению счетчика+какое либо значение. Что такое это значение - известно, можете не объяснять. Так вот, эта самая команда JMP $+значение весьма странно работает в EXE. Опытным путем просек что прыгать нужно на NOP тогда все работает нормально, иначе - виснет (хотя тоже интересно почему, в COM такого не надо было) Привел бы исходник где такое сделал но здоровый он сильно... Но это еще ничего - работает и ладно - принес работающий исходник домой (прогу на работе писал) и откомпилил тоже тасмом но другой версии. Прога снова отказалась работать ! Получается, что компиляторы разных версий по разному транслируют одни и те же мнемокоманды ! Я прав или может другая причина есть?

Знаю что удобней джамп ставить на метку(так и сделал в конце концов) просто интересен сам факт - почему?

Ответ

Здравствуйте, Диман!
Посмотри в дебагере размер джампа при разных компиляторах(2 или 3 байта)-может быть там глюка
Еще эта глюка проявлялась на машинах XT vs AT-в ХТ сначала вычислялось смещение, а потом IP увеличивался на размер джампа, а в АТ наоборот...Но я не думаю, что у тебя ХТ:))
А так на моем TASM32 с версии С++ 5.0 все ОК


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

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

Вопрос №1238

Здравствуйте эксперты.Срочно нужна ваша помощь.У меня WindowsXP Pro(2600).Проблема с русскими шрифтами.Например.Ставлю я диск,незнаю как сказать вобщем поевляется заставка,перехожу на закладку "программы" все отлично написано на рус.,перехожу на закладку "утилиты",
так там вообще хрен поймеш,все на каком то "гречиском" какието иероглифы.Хочу прочитать Readme.txt,так не могу,я еще такого языка не знаю да и не видел(верней уже увидел)Как мне это все исправить,если можно то поподробнее.Буду очень благодарен.

Ответ

Здравствуйте, Max!
Здравствуйте, Max!
Либо у Вас не хватает шрифтов, либо WinXP не настроен на поддержку символов "не Unicode".

По поводу первого - установить нужные шрифты (для разных случаев разные).
По поводу второго лучше всего зайти на сайт www.3dnews.com и почитать FAQ по WinXP. А это ссылка на тот же FAQ в формате ".chm" - http://www.3dnews.ru/documents/2222/WinXPFAQ.zip


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

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

Вопрос №1254

Какой лучше взять винт?

HDD 20.5 Gb IDE IBM (IC35L020AVER07-0) UDMA100 7200rpm
HDD 20.0 Gb IDE Maxtor 541DX (2B020H1) UDMA100
HDD 20.5 Gb IDE Quantum Fireball Plus AS (AS20A01x) UDMA100 7200
HDD 20.4 Gb IDE Seagate (320423A/320413A) UDMA66/100
HDD 20.4 Gb IDE Seagate U6 (320410A) UDMA100 [NEW]
HDD 20.4 Gb IDE Seagate Barracuda ATA III (ST320414A) UDMA100 7200rpm
HDD 40.8 Gb IDE Seagate U6 (340810A) UDMA100 [NEW]
HDD 20.0 Gb IDE Western Digital (200EB) UDMA100 5400rpm
HDD 30.7 Gb IDE Western Digital (307AA) UDMA66 5400rpm

просто все они в пределах 3000 ~ 3600р.

Ответ

Здравствуйте, Владимир!
Конечно IBM (хотя сам ни разу не видел, но ВСЕ тебе скажут так)
Не бери на 40 гигов, если старый биос, ато увидит токо 32.
Насчет видюхи- бери первый джефорс, вторые (которые дешевые) - обрезанные


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

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

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

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

В избранное