Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
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.
Вопрос и дополнение |
Ваш вопрос:
Приложение (если необходимо):
Получить ответов:
Выбор рассылки |
Программисту 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) |
Отправить вопрос всем экспертам выбранной рассылки.
© 2002 Россия, Москва. Авторское право: RusFAQ.ru |
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||