Да , я знаю , но и тот и другой отказываются компелить код Code: CSEG segment org 100h Begin: mov ah,9 mov dx,offset Message int 21h int 20h Message db 'Hello, world!$' CSEG ends end Begin Код взят из Калашникова я проблему не понимаю , а компел просто показывает что в этом коде ошибка.
Естественно некомпилится.. Это из-за несовместимости трансляторов! Ассемблер - это не только мнемоники, но еще и синтаксис транслятора: макросы, дерективы и тд, и тп Просто даже среди ассемблеров одного типа большой разброд: различие в ключевых словах, в правилах оформления листинга, библиотеках, хидерах.. Тоесть чтобы скомпилировать код Калашникого, тебе нужно переделать его под свой компилятор.. Ты выбрал FASM.. ну так бери справочники и туторы по нему.. А твой код на fasm будет выглядить так: Code: org 100h use16 mov ah,9 mov dx,hello int 21h int 20h hello db 13,10,'Hello,world$'
Manoff Приучай себя сразу записывать числа не просто 9 а например 09h просто правило хорошего тона. конечно по дефолту асм знает что это hex - но всё же...
Да я уже понял , все отладчики в hex'е работают , но не все пишут h в конце =)), я так пару раз лохонулся . TAHA я уже покопался и нарыл статьи об особенностях , спасибо.
Manoff брось ты уже Калашникова читать, его книга и рассылка была актуальна лет эдак 12 назад!!!! Думаю ты врядли будешь писать резидента под DOS... Скачай уроки изелона с wasm.ru и хотябы что-нибудь из этого списка: Code: Язык ассемблера для процессоров Intel - Ирвин Искусство программирования на АССЕМБЛЕРЕ - Н. Голубь Ассемблер для процессоров Intel - Ю. Магда Изучаем Ассемблер - А.Б. Крупник.djvu И у тебя возникнет меньше проблем..
хм, как правило masm ругается на отсутсвие директивы assume, если будешь дальше читать по Калашникову (между прочим неплохая книга, для новичка) то пиши так для компилов 4.х и 5.х : Code: CSEG segment [COLOR=Green]assume cs:cseg, ds:cseg, ss:cseg, es:cseg[/COLOR] org 100h Begin: mov ah,9 mov dx,offset Message int 21h int 20h Message db 'Hello, world!$' CSEG ends end Begin и так для 6.11 (и наверно более поздних версий до 6.15): Code: CSEG segment [COLOR=Green]'CODE'[/COLOR] assume cs:cseg, ds:cseg, ss:cseg, es:cseg org 100h Begin: mov ah,9 mov dx,offset Message int 21h int 20h Message db 'Hello, world!$' CSEG ends end Begin А еще смотри не перепутай компиляцию для exe и com, com это как правило ключ T/ при линкеровке. Плюс, далее предупреждая возможные вопросы =), прямое отображение в видеобуфер из-под wincmd работает не корректно (вернее нужные данные загружаются, но далеко не всегда отображаются) И вообще мой совет перед Калашниковым и другими практическими книгами почитать теорию аля Пильщиков В.Н. Assembler (на мой взгляд офигенная книга для начинающего). зы. Пильщиков ведет в МГУ на ВМиК, так что мужик свой =) Кому надо могу скинуть лекции в печатном виде другого ВМКшного препода по асму, там теория + отличные практические примеры.
знающие ассэмблер подскажите пжлста ссылочки на более полные и более понятные учебники по ассэмблеру.... а еще лучше в добавок пару книг которые в магазине найти мона.... а то от монитора тока зрение испорчу...((((( за хорошую книгу плюсиком не обижу.....
а может ктонибудь написать код ассэмблеровский для делфи (там мона вставлять в делфи) который будет умножать..... или откликнитесь люди которые знают и делфи и ассэмблер......
Code: procedure TForm1.Button1Click(Sender: TObject); function Umnojenie(x, z: integer): integer; [COLOR=DarkGreen]asm[/COLOR] [COLOR=Green]mov ebx,z mov eax,x imul ebx Mov Result,eax[/COLOR] [COLOR=DarkGreen]end;[/COLOR] Begin ShowMessage(IntToStr(Umnojenie([COLOR=YellowGreen]15[/COLOR],[COLOR=YellowGreen]345[/COLOR])));//Возвращает [COLOR=YellowGreen]5 175[/COLOR] end;
Уроки Iczeliona весьма интересный материал для новичков в WinAPI, но никак не как самоучитель по ассемблеру. Мало того что самому ассемблеру там, что естественно и правильно, никакого внимания как языку не уделяется, так там еще и возможности его раскрыты самым минимальным способом. Мое искреннее убеждение что уроки напрасно написаны на ассемблере - было бы намного удобнее читать их на С, а эффект был бы тем же самым. Впрочем надо сказать что ассемблерный код в силу его наглядного оформления тоже читается хорошо. Но именно из-за наглядности этого кода, смысл выбора языком - ассемблера вообще нивелируется. Кроме того по WinAPI есть множество вполне неплохих как русскоязычных, так и англоязычных руководств. Некоторые англоязычные руководства хорошо переведены, так что смысл читать Ицзелиона когда есть Сишные альтернативы фактически теряется. Тем более что после усвоения основ логики работы Windows-приложений, лучшим руководством в дальнейшем служит MSDN. Что же касается самого ассемблера, то изучать его как раз под ДОСом - самое то. Или писать на нем голые консольные приложения/драйвера - тоже нормально. Только в целях обучения. На практике он и здесь уже сдал свои позиции языкам высокого уровня. Писать оконные программы на ассемблере - себя не уважать! Что касается книг по ассемблеру, которые понравились мне, то это: Зубков - классная книжка - советую! Юрова - не читал, но должно быть ничего. Его я обычно использую как простенький справочник. Пирогов две книжки "учебный курс" и "дизассемблирование" - довольно содержательный курс, но первая без второй опять-таки не все, вместе две книжки как раз образуют то что надо, и даже немножко лишнего (из "дизассмблирования") Есть еще книжка автора не помню сейчас название примерно такое: программирование аппаратных средств для windows - там по-моему есть некоторые практические стороны работы с оборудованием через порты прерывания, dma и все в таком роде. Вот это и есть ассемблер, а cmp eax,ebx;jz _label само по себе в оконной процедуре сегодня никому уже ненужно. По-моему есть еще какая-та литература которая мне очень понравилась, но точно не помню сейчас. Главное не хвататься за все эти книжки - а взять и прочитать какую-то одну (Зубков?) а дальше остальные читать уже не придется - пробежать глазами и с книжкой уже ознакомился, потому что содержания в них, конечно, пересекаются. Если же вы планируете писать на ассемблере полноценные программы или хотя бы и модули, то надо еще ознакомиться с какими-нибудь свежими материалам по оптимизации. Потому что без оптимизации использовать ассемблер для ЭВМ сейчас практически никогда не имеет смысла. А сама оптимизация сильно зависит от реализации конкретной ЭВМ.
а правда то что код на ассэмблере выполняется быстрее чем на делфи или си.... домустим для такой цели как перебор хешей md5 код ассэмблера будет работать быстрее? я просто мало то знаю по ассэмблеру начал читать Крупника интересная книга но на ней нумаю не остановлюсь...))) ну дак как всетаки на счет вопроса?
zl0y да я знаю но ведь согласись что в некоторых слуячаях компилятор делфи к примеру довольно таки тупо переводит и код который может уместиться к примеру в 10 строчках умещается в 15 а то и в 20... но я считаю что каждому из нас обязательно надо, хотябы чуть чуть (основу), знать ассэмблер!!! с ним жизнь станет намного легче (поимите правильно я не имею ввиду все дружно пишем все на асэме я имею ввиду что вообще занимаясь ИТ и не зная ассэмблера понимание немного другое.....))))))) я сам короче запустался)))))))) :-D)
kir@pro, новичку врядли удасться бороться с компилятром Делфи или C++!! Можно оптимизировать процентов на 10 максимум... На самом деле оптимизировать лучше алгоритм... конечно, когда ты знаешь во что преобразуется If или While легче на душе)))
перевел пример из сишного в фасм Code: call dword [GetCurrentProcessId] push eax push TRUE push PROCESS_OPERATION_AND_WRITE ; 0x0028 call dword [OpenProcess] mov [pHandle],eax push 0 push size ;1 push ChangeFor ; 0x74 push WriteHere push pHandle call dword [WriteProcessMemory] add esp,8 WriteHere: JMP short WriteHere ... 0x74 = JZ , размеры совпадают , jz и выполнение продолжается , на Си работает , а тут зацикливается Где я накосячил?