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

RusFAQ.ru: программирование на языке Assembler


Информационный Канал Subscribe.Ru

RusFAQ.ru: программирование на языке Assembler

Выпуск № 327
от 27.07.2002, 00:40

Администратор:
Имя: Калашников О.А.
URL: Информационный ресурс
ICQ: 68951340
Россия, Москва
О рассылке:
Задано вопросов: 839
Отправлено ответов: 2412
Активность: 287.4 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе]


 Список экспертов, ответы которых опубликованы в данном выпуске

Kalashnikoff
Статус: Профессиональный
Общий рейтинг: 101.75
URL: Информационный ресурс
[Подробней >>]
Pablo
Статус: Доверительный
Общий рейтинг: 119.47
[Подробней >>]
Broken Sword
Статус: Профессиональный
Общий рейтинг: 139.5
[Подробней >>]
 
Portnov
Статус: Опытный
Общий рейтинг: 122.13
[Подробней >>]
Ayl
Статус: Профессиональный
Общий рейтинг: 125.51
[Подробней >>]
Gibbel
Статус: Опытный
Общий рейтинг: 109.45
URL: Страничка обо мне и моих друзьях
[Подробней >>]
 
masquer
Статус: Профессиональный
Общий рейтинг: 160.76
[Подробней >>]
Александр
Статус: Профессиональный
Общий рейтинг: 117.86
[Подробней >>]
ASMодей
Статус: Доверительный
Общий рейтинг: 124.39
[Подробней >>]
 
Игорь
Статус: Начальный
Общий рейтинг: 107.35
[Подробней >>]
Топор
Статус: Профессиональный
Общий рейтинг: 118.61
URL: Хорошая Русская Металлическая команда
Телефон: (8462)500298
[Подробней >>]
Beeblebrox
Статус: Профессиональный
Общий рейтинг: 119.78
URL: Beeblebrox / TMA HomePage
[Подробней >>]
 
Артём Шегеда
Статус: Профессиональный
Общий рейтинг: 121.31
URL: Пристанище неодинокого программиста
[Подробней >>]
Sinner
Статус: Доверительный
Общий рейтинг: 121.79
[Подробней >>]
igorash
Статус: Опытный
Общий рейтинг: 118.1
[Подробней >>]
 
kvINT
Статус: Опытный
Общий рейтинг: 111.92
[Подробней >>]
Shal
Статус: Доверительный
Общий рейтинг: 107.33
[Подробней >>]
Igoryk
Статус: Доверительный
Общий рейтинг: 109.34
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 788. У меня MASM32v7. При ассемблировании файла prog.asm на мониторе появляется: Assembling: prog.asm/at ... (ответов: 1)
Вопрос № 789. Здравствуйте, уважаемые Эксперты! Это опять я со своим загрузчиком. Но дело даже не в самом то загру... (ответов: 4)
Вопрос № 790. просто просьба, мой ответ на вопрос про стандарт асма (№750) (а именно фразу - "...все семейств... (ответов: 1)
Вопрос № 794. Экспетры! Может кто нибудь помнит того, кто спрашивал как в SI 2.5 и выше при ините грузить dll-ы. я... (ответов: 1)
Вопрос № 795. Как узнать с помощью Ассемблера, поддерживает проц ММХ или нет?... (ответов: 6)
Вопрос № 796. Добрый день ув.Эксперты...! Спасибо.... что Вы есть... ;) Сразу Вопросы: 1) Что лучше TRW2000 или So... (ответов: 3)
Вопрос № 797. Здравствуйте, уважаемые Эксперты! Это опять я со своим загрузчиком. Я, вот тут, столкнулся с пренепр... (ответов: 7)
Вопрос № 800. Здраствуйте эксперты!!! Долго вас не читал (проблемы с почтой и Инетом). Сначала к Broken Sword'у. Е... (ответов: 1)
Вопрос № 801. Здравствуйте, уважаемые эксперты;) Простите за простой вопрос - как скомпелировать файл? По простоте... (ответов: 9)

Вопросов: 9, ответов: 33


 Вопрос № 788

У меня MASM32v7. При ассемблировании файла prog.asm на мониторе появляется:
Assembling: prog.asm/at
MASM : fatal error A1000: cannot open file : prog.asm/at
Подскажите, пожалуйста, в чем ошибка?



Вопрос отправлен: 21.07.2002, 05:48
Отправитель: Дмитрий

[Следующий вопрос >>] [Список вопросов]

Отвечает Kalashnikoff

Добрый день, Дмитрий!
Попробуйте так:
ml.exe prog.asm /AT
После prog.asm - ПРОБЕЛ, а AT - ЗАГЛАВНЫМИ символами.
Удачи!

Ответ отправлен: 21.07.2002, 09:36
Отправитель: Kalashnikoff


 Вопрос № 789

Здравствуйте, уважаемые Эксперты!
Это опять я со своим загрузчиком. Но дело даже не в самом то загрузчике.
Мне никак не удается перехватить какое-либо прерывание, в часности 9h, не используя ДОС.
Уже совсем задолбался. Вот код:

push 0
pop ds
push 0
pop es
sti ; дозволимо переривання
; збережемо оригiнальний обробник Int09h
mov bx, 4*9
mov eax, [bx]
mov dword ptr es:[Old_Int09hvect+DUMMY_OFFS], eax
; замiнимо оригiнальний обробник Int09h на власний
mov eax, dword ptr es:[offset Int_09h_proc+DUMMY_OFFS]
mov [bx], eax

Тыкнить, пожалуста, носом в ошибку.
(Попробовал это дело под виндой(98), так она чуть в очередной раз не загнулась. Думал переставлять придется.)
Также по ходу дела возникло 2 вопроса.
Почему компилятор
mov eax, [bx]
интерпретирует как
mov eax, ds:[bx] , и в тоже время
mov dword ptr es:[Old_Int09hvect+DUMMY_OFFS], eax
как
mov dword ptr сs:[Old_Int09hvect+DUMMY_OFFS], eax?
и сколько можна юзать памяти по адресу 0000h:7С00h в своих целях? Тоесть очень заманчиво выглядит перспектива загрузить остаток своего загрузчика по адресу 0000h:7С00h+512. Или так нельзя?
С уважением, Бадян.



Вопрос отправлен: 21.07.2002, 19:21
Отправитель: Бадян (sba@litech.net)

[Следующий вопрос >>] [Список вопросов]

Отвечает Pablo

Приветствую Вас, Бадян!
Ну я бы такой код по другому написал!
.code
xor ax, ax
mov ds, ax
mov ax,[4*9]
mov [Old_vektor], ax
mov ax,[4*9+2]
mov [Old_vektor+2], ax
cli ;это обязательно
mov ax, offset New_vektor_proc
mov [4*9], ax
mov ax, seg New_vektor_proc;вот здесь я не ццверено но должно работать, я замелос этого мспользовал mov ax, cs, так как и инициализацию и обработку прерывания выполнял в одном и томже сегментею
mov [4*9+2], ax
sti
New_vektor_proc:
nop

.data
Old_vektor dw 0,0



Ответ отправлен: 21.07.2002, 22:14
Отправитель: Pablo


Отвечает Broken Sword

Доброе время суток, Бадян!
ОК, тыкаю носом в ошибку:
перед "замiнимо оригiнальний обробник Int09h на власний", и даже желательно вообще перед "збережемо оригiнальний обробник Int09h" вставить cli... а уж с sti ты некстати поторопился, его нужно сувать уже за "mov [bx], eax".
Да, и кстати, ты помнишь что при
mov dword ptr es:[Old_Int09hvect+DUMMY_OFFS], eax
es у тебя тоже указ. на табл. векторов??? Учти, тут шутки полхи, Old_Int09hvect+DUMMY_OFFS должно быть по крайней мере не меньше 1024 (я к тому, чтоб ты old_int09 не вкатал случайно в табл. векторов), неужели тебе места мало???

ААА!!!! А тут вообще бред:
mov eax, dword ptr es:[offset Int_09h_proc+DUMMY_OFFS]
mov [bx], eax
понимаешь, тебе в таблицу векторов нужно положить offset, затем segment (смещение и значение сегм. регистра, где у тебя обработчик), а ты что кладешь? Двойное слово по адресу Int_09h_proc+DUMMY_OFFS... к чему оно вообще??? eax-ом кстати, при ЗАПИСИ в табл. векторов ты никак не обойдешься... Конечно, все обвинения с тебя снимаются сразу, если ты ЗАРАНЕЕ по Int_09h_proc+DUMMY_OFFS положил сегмент (в данном случае, ноль??) и смещение того самого int_09h.... А вообще ты какой то бред понаписывал, аж смотреть нехочется уже :(( при чем здесь DUMMY_OFFS ??? непонятно чето ничерта....
Насчет DS - он всегда исп. по умолчанию при обращении к данным в памяти, а насчет "ES превращается в CS" советую протереть монитор или очки
извини если что :)

Ответ отправлен: 21.07.2002, 22:55
Отправитель: Broken Sword


Отвечает Portnov

Приветствую Вас, Бадян!
Про тонкости ассемблера (сегментные регистры) - очень вероятно, глюк Tasm/Masm. Я уже писал, юзайте Nasm, он от таких глюков свободен. Про память - см. в рассылке Dron'а.
С уважением, Portnov.

Ответ отправлен: 22.07.2002, 12:30
Отправитель: Portnov


Отвечает Ayl

Доброе время суток, Бадян!
Вообще-то, у меня никогда не возникало проблем с перехватом прерываний без обращения к DOS. Даже под виндами, хотя им и может немного поплохеть... :-)
Но код у тебя не совсем корректный.
Поясняю:
Перед установкой вектора прерывания надо запретить, а не разрешить.
Что находится в DUMMY_OFFS? -100h?
Запись адреса обработчика в таблицу прерываний, по-моему, неправильная. Вообще, а надо тебе использовать 32-битные регистры? Может, лучше сделать "втупую", но надежно? (см. приложение).
Остаток своего загрузчика грузи куда хочешь, вся память пока твоя :-) Только не лезь в область BIOS, ПЗУ и экран.
Не забудь восстановить прерывания перед загрузкой оригинального boot-сектора. Кстати, его также нужно загружать с адреса 0:7c00h.

Приложение:

Ответ отправлен: 22.07.2002, 13:07
Отправитель: Ayl


 Вопрос № 790

просто просьба, мой ответ на вопрос про стандарт асма (№750) (а именно фразу - "...все семейство ОС от Microsoft юзают стандарт асма, предложенный Intel-ом" расценивать как бред полусумасшедшего, потому как при чем здесь нахрен ОС, да еще и от мелкософта до стандарта на АСМ :) ???!! Я имел ввиду *АSM-ы наверное... или кто его знает что я имел ввиду... (
Вроде ж не пью ничего уже 3 недели... (
Остальное вроде правильно



Вопрос отправлен: 21.07.2002, 23:10
Отправитель: Broken Sword (brokensword@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Gibbel

Здравствуйте, Broken Sword!
Потому и пишешь такое... Ты водичку, хотя бы, пей... ;-)

Ответ отправлен: 22.07.2002, 10:25
Отправитель: Gibbel


 Вопрос № 794

Экспетры! Может кто нибудь помнит того, кто спрашивал как в SI 2.5 и выше при ините грузить dll-ы. я только щас одуплился



Вопрос отправлен: 22.07.2002, 08:58
Отправитель: Broken Sword (brokensword@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает masquer

Приветствую Вас, Broken Sword!
А что, в winice.dat если написать EXP=Path_to_dll, то не проходит? SYM= увеличь.
З.Ы. Это наверное имеется ввиду айс из драйверструдии 2.5, у него версия 4.25 :)

Ответ отправлен: 22.07.2002, 09:40
Отправитель: masquer


 Вопрос № 795

Как узнать с помощью Ассемблера, поддерживает проц ММХ или нет?



Вопрос отправлен: 22.07.2002, 10:35
Отправитель: Юра (jubba@ukr.net)

[Следующий вопрос >>] [Список вопросов]

Отвечает Александр

Добрый день, Юра!
А cpuid не пробовал? Если после выполнения первой функции cpuid 23-ий бит регистра edx установлен, то поддерживает.


Приложение:

Ответ отправлен: 25.07.2002, 16:39
Отправитель: Александр


Отвечает ASMодей

Приветствую Вас, Юра!
Нужно проверить бит 23 регистра EDX после выполнения
команды CPUID (при EAX=1). Если бит установлен, то это
означает, что процессор поддерживает набор команд MMX.
mov eax,1
cpuid
test edx,800000h
jz no_mmx
...........
no_mmx:


Ответ отправлен: 22.07.2002, 19:45
Отправитель: ASMодей


Отвечает Broken Sword

Здравствуйте, Юра!
CPUID с EAX=1, потом смотришь 23 бит регистра EDX. Если стоит ) - значит MMX supported

Ответ отправлен: 22.07.2002, 11:20
Отправитель: Broken Sword


Отвечает masquer

Приветствую Вас, Юра!
mov ax, 1
CPUID
Если в edx 23 бит установлен - ММХ есть, но сначала нужно проверить, поддерживается ли инструкция CPUID, для этого нужно проверить на возможность записи 21 бита в eflags

Приложение:

Ответ отправлен: 22.07.2002, 11:22
Отправитель: masquer


Отвечает Игорь

Доброе время суток, Юра!Процессор MMX поддерживает любой
компьютер с 86 процессором.Однако режим MMX в одних случаях
поддерживается процессором,а в других сопроцессором


Ответ отправлен: 23.07.2002, 02:22
Отправитель: Игорь


Отвечает Топор

Приветствую Вас, Юра!
В смысле, из самой проги? Смотри описание команды CPUID. Оно довольно большое, т.к. команда должна вызываться несколько раз да ещё и с параметрами в регистрах, поэтому здесь не даю.


Ответ отправлен: 24.07.2002, 10:15
Отправитель: Топор


 Вопрос № 796

Добрый день ув.Эксперты...!
Спасибо.... что Вы есть... ;)
Сразу Вопросы:
1) Что лучше TRW2000 или SoftIce? И что такого может TRW2000,чего не может SI?Этот вопрос я задаю потому, что в фидо часто пишут.... что TRW2000 намного мощней, удобней и т.п.... и что SoftIc"у далеко до него...
Скачал TRW2000 1.23... Ничего.... подвисает только часто...
2)Как сделать дамп памяти в SI? Cтянул icedump 6.025.... а чё дальше не знаю...
3)Что такое "нулевое кольцо"(0ring)... Где можно по этому поводу чё нить почитать?
4)Где можно скачать последнюю версию TRW2000? Их ссылка не работает...
5)Если есть.... ссылки на хорошие сайты посвящённые crack'у?
Заранее благодарен...
pAcU



Вопрос отправлен: 22.07.2002, 15:57
Отправитель: pAcU

[Следующий вопрос >>] [Список вопросов]

Отвечает masquer

Доброе время суток, pAcU!
1. Мне привычнее Айс. Пробовал ТРВ - мне он не понравился, чем - не помню уже.
2. pagein d 00400000 400 c:mem.dmp - там справка есть, почитай
3. Уровень привилегий процесоора - 0- драйвера, система, 3-приложения
5. Fravia

Ответ отправлен: 22.07.2002, 19:13
Отправитель: masquer


Отвечает Broken Sword

Добрый день, pAcU!
На четыре вопроса тебе Beeblbrox ответил, на четвертый отвечу я:
http://www.exetools.com/files/debuggers/win/trw2000.zip
(это версия 1.23)
это последний, т.к. TR для DOS-а на этом же сайте точно последний (я спрашивал у автора)

Ответ отправлен: 22.07.2002, 18:14
Отправитель: Broken Sword


Отвечает Beeblebrox

Доброе время суток, pAcU!
1. Чтобы софтайс попал в нулевое кольцо и начал там хозяйничать, требуется поместить его в автоэкзек, то есть грузить его до загрузки виндов. TRW2000 каким-то невообразимым способом умеет это делать прямо из виндов, из 3-го кольца. Есть серьезное подозрение, что он юзает какие-то глюки виндов, благодаря чему обходит стороной всю систему защиты нулевого кольца.
2. Загрузить софтайс, запустить icedump, набрать в софтайсе команду /dump с параметрами. Забыл, с какими, читай доку
3. Ой, это целое дело. Почитай все о защищенном режиме 386 проца. С нулевым уровнем привилегий (самый привилегированный уровень) должно жить, как рекомендует Интел, только лишь ядро операционки. Прикладные программы, наоборот - с низшим, третьим уровнем
4. Не знаю
5. www.astalavista.com

Ответ отправлен: 22.07.2002, 16:29
Отправитель: Beeblebrox


 Вопрос № 797

Здравствуйте, уважаемые Эксперты!
Это опять я со своим загрузчиком.
Я, вот тут, столкнулся с пренеприятнейшим обстоятельством.
Мне нужно организовать пользовательский ввод. С одной стороны – перехват int9h и нет проблем, а с другой прогу то надо на время ввода приостановить. А вот как?
И, пожалуйста, объясните назначение магического слова в конце бутсектора 55AAh.
С уважением, Бадян!



Вопрос отправлен: 22.07.2002, 16:12
Отправитель: Бадян (sba@litech.net)

[Следующий вопрос >>] [Список вопросов]

Отвечает Pablo

Доброе время суток, Бадян!
По поводу ввода ты просто организуй цикл с проверкой условия какого нибудь, которое будешь изменять в обработчике прерывания!
А по поводу 55aah, это просто, ИМХО, такой маркер бут сектора и партишена!

Ответ отправлен: 23.07.2002, 21:26
Отправитель: Pablo


Отвечает Broken Sword

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

Ответ отправлен: 22.07.2002, 17:10
Отправитель: Broken Sword


Отвечает Ayl

Доброе время суток, Бадян!
А зачем ты вообще с int09 паришься?
Пользовательский ввод организуется элементарно с помощью int16h. Прерывания BIOS тебе все доступны. Ты не можешь обращаться только к прерываниям Dos, потому что его еще нет. А BIOS сидит в ПЗУ и ты можешь им пользоваться.
Насчет 55AAh - вроде как это признак последнего партишена. Т.е. на каждое описание партишена отводится 16 байт. Если первые два байта равны этому магическому значению, то описания партишенов считается оконченым. Относится только к MBR.

Ответ отправлен: 22.07.2002, 16:56
Отправитель: Ayl


Отвечает Артём Шегеда

Приветствую Вас, Бадян!
Позволю себе наглость исправить эксперта Ayl. Слово 55р AAh (0AA55h) в конце сектора является всего лишь навсего признаком того, что информация на диске - служебная и используется где ни попадя: в MBR, boot, boot32, даже ПЗУ девайсов, установленных в материнку - и те начинаются с этого слова. Где-то когда-то читал, что если изменить это слово в MBR, то, даже загрузившись с дискеты, винта не увидишь. И это проблемы не BIOS, а OS. Так что как напишешь - так и будет!

Ответ отправлен: 22.07.2002, 19:25
Отправитель: Артём Шегеда


Отвечает Александр

Здравствуйте, Бадян!
Ты же не на многопроцессорных системах чай программируешь. Это значит, что для монопольного выполнения прерывания тебе надо просто, чтобы его в свою очередь не прервали. Для этого в самом начале обработчика необходимо поставить команду cli (CLear Interrupts), а перед его завершением обратно разрешить командой sti.
55AAh - это сигнатура блоков расширения BIOS. Так BIOS определяет различные дополнительные расширения от внешних устройств: видеокарт, SCSI-адаптеров и т.д. Почему используется это число трудно объяснить.


Ответ отправлен: 25.07.2002, 16:40
Отправитель: Александр


Отвечает ASMодей

Приветствую Вас, Бадян!
Пользовательский ввод можно прекрасно осуществить с
помощью прерывания INT 16h (BIOS) при этом не придется
ничего перехватывать и приостанавливать.
А магическое слово 55AAh используется начальным
загрузчиком BIOS в качестве идентификатора BOOT-сектора.
Если BIOS не найдет это слово в конце сектора, то будет
выведено что-то вроде:
NON SYSTEM DISK
REPLACE DISK AND PRESS ANY KEY


Ответ отправлен: 23.07.2002, 08:42
Отправитель: ASMодей


Отвечает Sinner

Добрый день, Бадян!
======================================================
INT 16h - KEYBOARD - Считать следующую нажатую клавишу
------------------------------------------------------
AH = 00h
Возврат:
AH = Scan Code
AL = ASCII Code
=======================================================
INT 16h - KEYBOARD - Сообщить о наличии нажатой клавиши
-------------------------------------------------------
AH = 01h
Возврат:ZF = 0 при наличии нажатой клавиши
AH = Scan Code
AL = ASCII Code
ZF = 1 если нет нажатой клавиши
=======================================================
и т.д...

Ответ отправлен: 23.07.2002, 11:46
Отправитель: Sinner


 Вопрос № 800

Здраствуйте эксперты!!!
Долго вас не читал (проблемы с почтой и Инетом).
Сначала к Broken Sword'у. Если не трудно, то пожалуйста вышли мне все что нужно для компо на www.hugi.de, тоесть правила и т.д. и т.п. Если можно, то еще немножко напиши мне по русски(не все хорошо у меня с англицким).Я написал прогу перевода из десятичной в римскую систему счисления, но не знаю точных правил, а пока что у меня она занимает 113 байт.
2. Люди!!! Кто знает почему у меня письма иногда приходят без аттачей. Тоесть снизу пишет :
: Decoded File: (2) C:MDAEMONUSERS FILESMDF00453.ATT
: Decoded File: (3) C:MDAEMONUSERS FILESMDF00454.ATT
А аттачей нету.
3. Когда все-таки скачал почту, то обнаружил несколько писем с темой Language от некоторых наших экспертов, но аттачей к ним не было, а втеле тоже нету ничего(см. п. 2). Что это такое??? Если можно, то вышлите снова.
4. И еще одна проблемо, не по теме, но за компанию. У меня трабл с модемом. Когда яя уже подключился к серверу провайдера(если так можно сказать), то при посылке данных моим модемом не возникает никаких проблем, а при приеме - очень много таких ошибок. С чем это может быть связано???
С уважением, Torax.



Вопрос отправлен: 22.07.2002, 23:50
Отправитель: Torax (torax@dotes.west.energy.gov.ua)

[Следующий вопрос >>] [Список вопросов]

Отвечает masquer

Здравствуйте, Torax!
1. Срок уже вышел - до 15. Правила там находятся в скачиваемом архиве, там все предельно просто
2. С почтовым сервером что-то.
4. Настучи по голове провайдеру, ну выясни у него лучше.


Ответ отправлен: 23.07.2002, 08:43
Отправитель: masquer


 Вопрос № 801

Здравствуйте, уважаемые эксперты;) Простите за простой вопрос - как скомпелировать файл? По простоте своей он нигде толком не рассматривается. Вот написал я програмку (ну-ну...), обозвал её program.asm А какой процесс превратит текстовый файл в .exe или .com? Если бы вы подробно (поэтапно) рассказали нам, было бы очень полезно;) Большое спасибо!;)



Вопрос отправлен: 23.07.2002, 00:39
Отправитель: Serpent

[Следующий вопрос >>] [Список вопросов]

Отвечает Pablo

Приветствую тебя, Serpent!
на моем дос навигаторе уже прописаны комманды компиляции я просто их испрользовал и все вот они:
1. компиляция
tasm /s/l/zi !.!
так как tasm у меня нет, то расшифровать я не могу что это, зато есть tasm32.exe, вот как выглядит команда для него:
tasm32 /la/ml !.!
/la - генерация полного листинга
/ml - регистрозависимые символы для всех имен
2. компоновка
tlink /3 !.! - компоновка в exe-файл.
tlink /t/3 !.! - компоновка в com-файл.
/3 - использование инструкция процессора 386.
ilink32 -c !.!
-c - регистрозависимая компоновка
PS: А вообще в подсказке из коммандной строки все написано!)))



Ответ отправлен: 23.07.2002, 21:25
Отправитель: Pablo


Отвечает igorash

Приветствую Вас, Serpent!
У Зубкова в книге точно рассматривается, искать надо уметь... "Превращением" текстового файла в исполняемый занимаются 2 проги - компилятор и сборщик (линковщик). Первый превращает текст в объектный файл, а второй из этого обьектного файла компонует исполняемый.


Ответ отправлен: 24.07.2002, 22:39
Отправитель: igorash


Отвечает Ayl

Доброе время суток, Serpent!
Вообще-то, читайте внимательнее основную рассылку. В первом выпуске подробно описан процес преобразования текстового файла с текстом программы на ассемблере в исполняемый.
Но так и быть, расскажу.
Итак, имеем. Некто (предположительно, вы) создали новый шедевр программистского искусства и, чтоб никто не догадался, что это шедевр, назвали его program.asm.
Теперь ваши действия зависят от того, каким именно ассемблером вы пользуетесь. Наибольшее распространение имеют Turbo Assembler фирмы Borland Inc. (в обиходе - TASM) и Macro Assembler всеми нами горячо любимого детища Билла Гейтса - фирмы Microsoft (MASM).
В любом случае, процесс создания исполняемого файла состоит из двух этапов - трансляции исходного текста проограммы в объектных файл и последующей линковки этого объектного файла (либо группы объектных файлов) в исполняемую программу.
Итак, предположим, что вы используете TASM (каюсь, я неравнодушен к продукции фирмы Borland Inc. для DOS и в своих играх с ассемблером использую именно его). Все, что вам нужно сделать для получения объектного файла - это выполнить следующую команду:
tasm [опции] source [,object] [,listing] [,xref]
Полный список опций можно получить, вызвав tasm без параметров. Я обычно использую следующий набор параметров (мы по-прежнему пытаемся скомпилировать программу program.asm):
tasm /m2 /la program
Здесь мы указываем, что текст программы находится в файле program.asm (расширение asm будет подставлено по умолчанию), транслировать программу нужно в 2 прохода (полезная опция, дабы не задумываться о порядке описания переменных и меток) и на выходе кроме объектного файла создавать также полный листинг трансляции. Последнее очень сильно помогает в случае возникновения ошибок трансляции - скорость обнаружения ошибки возрастает на порядок.
Ура, с пятой попытки наш шедевр прошел синтаксический контроль и мы получили файлы program.obj и program.lst. Листинг теперь можно снести за ненадобностью - он свое черное дело сделал :-)
Приступаем к линковке. Используем программу tlink:
tlink objfiles, exefile, mapfile, libfiles, deffile
Последние 4 параметра могут быть опущены.
Опции зависят от того, какого типа файл мы хотим получить - COM или EXE. Я использую следующий синтакс:
Для COM: tlink program /m /t /s
Для EXE: tlink progrma /m /s
Ключ /m указывает, что нужно сформировать map-файл с включением всех PUBLIC-объектов, а ключ /s - показывать детализированную карту сегментов.
Ключ /t, как нетрудно догадаться, указывает необходимость генерить COM-файл.
Если нет желания видеть map-файл, можно запретить его генерацию с помощью ключа /x.
Про компиляцию с помощью MASM рассказывать не буду, потому что я его не люблю да и не помню наизусть :-) Может, кто из экспертов расскажет.
Удачи!


Ответ отправлен: 23.07.2002, 01:28
Отправитель: Ayl


Отвечает Игорь

Доброе время суток, Serpent!Для того,чтобы откомпелировать
файл Вам понадобиться пакет TASM фирмы Borland или MASM фирмы Macrosoft.Потом возмите книгу Виктора Юрова "Учебник по Assembler".Свой файл поместите в папку "bin" установленного вами пакета.За тем в Volkov Commander в
коммандной или иметации DOS произведите компеляцию по книге


Ответ отправлен: 23.07.2002, 02:00
Отправитель: Игорь


Отвечает masquer

Приветствую Вас, Serpent!
для com
tasm %1.asm - получаем объектный файл
tlink /t %1.obj - получаем исполняемый файл
для exe то же самое, только без ключа /t


Ответ отправлен: 23.07.2002, 08:40
Отправитель: masquer


Отвечает kvINT

Добрый день, Serpent!
Смотри кусочек из древней доки по TASM. Здесь ничего о ключах, но принцип ясен.

Приложение:

Ответ отправлен: 23.07.2002, 14:15
Отправитель: kvINT


Отвечает Shal

Здравствуйте, Serpent!
Создание exe:
tasm.exe program.asm
tlink.exe program.obj
Создание com:
tasm.exe program.asm /t
tlink.exe program.obj



Ответ отправлен: 23.07.2002, 16:44
Отправитель: Shal


Отвечает Sinner

Доброе время суток, Serpent!
Самое простое:
Turbo Assembler:
tasm program.asm
----получается файл program.obj----
для .exe: tlink program.obj
для .com: tlink program.obj /t
=======================================
Macro Assembler:
masm program.asm
----получается файл program.obj----
для .exe: link program.obj
для .com: link program.obj
exe2bin program.exe program.com

Ответ отправлен: 25.07.2002, 03:45
Отправитель: Sinner


Отвечает Igoryk

Здравствуйте, Serpent!
Если у вас модель памяти tiny то наберите и исполните следующие команды в командной строке:
для Tasm:
tasm program.asm
tlink /t /x program.obj
для Masm:
ml /c program.asm
link program.obj,,NUL,,,
exe2bin program.exe program.com
для Wasm:
wasm program.asm
wlink file program.obj form DOS COM
Вот и все после этих команд для определенного процессора получится файл program.com
Если нужно получить Exe-файл, то используются такие команды:
для Tasm:
tasm program.asm
tlink /x program.obj
для Masm:
ml /c program.asm
link program.obj
для Wasm:
wasm program.asm
wlink file program.obj form DOS
Для этих ассемблеров (для Tasm точно) в командной строке можно опускать расширения файлов. Они будут распознаны автоматически.

Ответ отправлен: 25.07.2002, 12:30
Отправитель: Igoryk



Форма отправки вопроса

Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook" и "Microsoft Outlook Express". В программе The Bat! подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте, что в некоторых браузерах могут стоять запреты на открытие других окон, а также "чрезмерное" кэширование данных, при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

© 2002 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


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


Получить ответов:


 Выбор рассылки

Программисту
Assembler (42)
C / C++ (30)
Perl (8)
Delphi (16)
Pascal (29)
Basic / VBA (11)
Java / JavaScript (10)
PHP (8)
MySQL / MSSQL (10)
Пользователю
Windows 95/98/Me (43)
Windows NT/2000/XP (34)
"Железо" (35)
Поиск информации (18)
Администратору
Windows NT/2000/XP (17)
Linux / Unix (14)
Юристу
Гражданское право (7)
Семейное право (3)
Трудовое право (7)
КоАП (2)

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




be number one Яндекс цитирования

© 2002 Россия, Москва. Авторское право: RusFAQ.ru


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное