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

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


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler (Ассемблер)

Выпуск № 595
от 07.11.2006, 19:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 361, Экспертов: 25
В номере:Вопросов: 2, Ответов: 4


Вопрос № 60961: 1)Я програмиррую на Pascal'e.Для тех,кто не в курсе, для вывода сообщения на экран в Pascal'e есть оператор Write/Writeln,а после неё идут инструкции,заканчивающиеся оператором End.(выход проги-аналог int 20h).Но я ни как не могу понять ,поч...
Вопрос № 61028: Читаю уроки Iczelion-а, разбираю пример создания окна. При компиляции проекта выдается куча ошибок, начиная с того, что объявление процедуры WinMain - ошибочное. Объявленные переменные определяются как необъявленные. Даже если текст скопировать из ур...

Вопрос № 60.961
1)Я програмиррую на Pascal'e.Для тех,кто не в курсе, для вывода
сообщения на экран в Pascal'e есть оператор Write/Writeln,а после неё
идут инструкции,заканчивающиеся оператором End.(выход проги-аналог int 20h).Но я ни как не могу понять ,почему адрес сообщения
в асме указывают после int 20h(полная противоположность Pascal) :(
По идее ,если я укажу этот адрес до int 20h и после int 21h всё должно
выполниться :(

2)Перерыл много форумов,придерживался многих инструкций,а ассемблировать и тем более линковать файл на MASM 5.1 не получилось.
Вот,что было предложено и ошибки,которые у меня возникли:

a)masm.exe имя.asm
link.exe имя.obj

error A2062:Missing or unreachable CS
47152 + 446396 Bytes symbol space free

0 warning Errors
1 Severe Errors -Имя.obj не создаётся!

b)masm.exe имя.asm
link.exe имя.obj/t -ТО ЖЕ САМОЕ!

с)ml /c имя.asm
link имя.obj

IF NOT ERROR LEVEL 1 c:masmlink /c , /c, /c и также имя.obj не создаётся!

d)masm.exe имя.asm
link.exe /AT имя.obj-Повторять нет смысла

e)ml.exe имя.asm/ml.exe имя.asm /AT

имя.obj:warning LNK4033:converting object format from OMF to COFF
имя.obj:fatal error LNK1190:invalid fixup found, type 0*0001

Объектный файл создаётя,но уже возникают проблемы с линковкой :(
все предложенные выше варианты линковки:

имя.obj:warning LNK4033:converting object format from OMF to COFF
имя.obj:fatal error LNK1190:invalid fixup found, type 0*0001

Каой ещё способ предложите ВЫ :(

3)Как запустить прогу с помощью debug'a?

4)Я недавно наткнулся на ошибку в рассылке Калашникова насчёт проги с рожицей,где после _beg: надо было добавить :
mov ah,3
int 10h

Какие ещё ошибки содержит данная рассылка и где о них можно
узнать?


Отправлен: 01.11.2006, 20:29
Вопрос задал: Xtreme (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Волков Павел Юрьевич
Здравствуйте, Xtreme!

добавка инструкций
mov ah,3
int 10h
связанна с особенностью работы эмулятора DOS в WinXP(2000).
В рассылке рассматривается программирование под DOS
(в котором ненужен предварительный вызов функций видеоадаптера для вывода на экран).

Поэтому, это не ошибка. Ошибок в рассылке не находил.
---------
Век живи, век учись.
Ответ отправил: Волков Павел Юрьевич (статус: 8-ой класс)
Ответ отправлен: 02.11.2006, 06:16

Отвечает: Вiктор
Здравствуйте, Xtreme!
1) когда вы пишете СОМ-программу, то у вас код и данные идут в одном сегменте. Для того чтобы компьютер не пытался выполнять данные как код, их (данные) располагают в таком месте, до которого управление не доходит. Это может быть место за выходом из программы, или место, которое перепрыгивается командой прыжка:
-команды программы
-выход
-данные.
начинается выполнение с команд. Команды спокойно берут данные за командой выхода, указывая их адрес. После того, как вся программа выполнена, идёт команда выхода (int 20), и управление не доходит до того места, где расположены данне, значит компьютер не будет пытаться выполнять данные (для компа это просто байты, это мы знаем что это не команды а данные). А если пытаться выполнять данные, то скорее всего будет ошибка.
можно ещё сделать так:
-команды
-безусловный прыжок на мет1
-данные
-мет1:
-опять команды
-выход.
здесь опять управление не попадает на участок памяти, содержащий данные, потому что команда безусловного прыжка перепрыгивает этот участок.
В паскале - не совсем так. Команда writeln - это же вызов функции, а не объявление сообщения. Поэтому и нельзя её ставить после "end." Точно так же как и в асме если вы поставите команды после int 20, то они не выполнятся, потому что до них не дойдёт управление. В асме такое можно сделать, потому что это могут быть данные. А паскаль не даёт вам писать команды после "end." потому что нельзя средствами паскаля как-нибудь достучаться до этих данных. А если нельзя, то компилятор сразу это и запрещает.
И ещё: когда вы в паскале пишете begin writeln('HELLO!'); end. то это не значит что строка 'HELLO!' не может храниться за командой выхода. Ведь может быть такое, что компилятор переделает прогу в такой асм-код:
push offset str
call writeln
выход по int 20
str: db 'HELLO!'
Конечно, реально такого паскаль не делает, ведь он обычно данные располагает в отдельном сегменте кода, и программы делает не СОМ а ЕХЕ. Но это просто вам объяснение: в асме вы можете располагать данные, код, команды выхода и т.п. где хотите, хоть в перемешку, вы сами отвечаете чтобы это всё правильно работало. А паскаль - язык высокого уровня, он не рассчитан на хитрые расположения кода и данных, он требует определённого порядка. А куда располагать данные, куда код - это уже задача компилятора.

3) Если вообще любой дебаггер, то обычно 2 способа:
- запустить дебаггер, а затем командами дебаггера открыть нужную программу;
например, для турбодебаггера:
c: pin d.exe, потом заходим в меню, file->open, указываем имя файла
- запустить дебаггер, педедав ему имя программы в командной строке;
например:
c: pin d.exe c: pprogsproga.exe
Если вы про debug который лежит в папке виндовс, то у него есть команда L (LOAD):
load L [адрес] [диск] [первый_сектор] [число]

---------
Флаг вам в руки! (sti, stc, etc)
Ответ отправил: Вiктор (статус: 7-ой класс)
Ответ отправлен: 02.11.2006, 10:52

Отвечает: Pinkbyte
Здравствуйте, Xtreme!

Насчет Masm 5.1 - ИМХО проще и лучше скачать MASM 6.14 и пользоваться новыми стандартами, чем поднимать старые... Все равно в MASM 6.0 поддерживается как старый синтаксис, так и новый, который гораздо проще...
---------
Нейтральность - высшее достижение сознания
Ответ отправил: Pinkbyte (статус: 3-ий класс)
Ответ отправлен: 04.11.2006, 00:09


Вопрос № 61.028
Читаю уроки Iczelion-а, разбираю пример создания окна. При компиляции проекта выдается куча ошибок, начиная с того, что объявление процедуры WinMain - ошибочное. Объявленные переменные определяются как необъявленные. Даже если текст скопировать из урока. Пробовал разные IDE (Chrom, RadASM, VASM и прочие).

Приложение:

Отправлен: 02.11.2006, 14:05
Вопрос задал: Никифоряк Роман (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 6)

Отвечает: Лысков Игорь Витальевич
Здравствуйте, Никифоряк Роман!
Дело в том, параметры WinMain нельзя так переносить
Надо либо писать в одной строке
WinMain proc Inst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
либо указать перенос при помощи символа ''
WinMain proc
hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD

---------
Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: Практикант)
Ответ отправлен: 02.11.2006, 15:42
Оценка за ответ: 5


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное