[ Assembler ] — начинающим: задаем вопросы

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by !_filin_!, 25 May 2007.

  1. Manoff

    Manoff Elder - Старейшина

    Joined:
    15 Dec 2007
    Messages:
    38
    Likes Received:
    4
    Reputations:
    0
    Да , я знаю , но и тот и другой отказываются компелить код
    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
    Код взят из Калашникова я проблему не понимаю , а компел просто показывает что в этом коде ошибка.
     
    #241 Manoff, 6 Apr 2008
    Last edited: 7 Apr 2008
  2. Flame of Soul

    Flame of Soul Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    185
    Likes Received:
    146
    Reputations:
    45

    для Manoff

    код работает , компилировала в emu8086
     
    1 person likes this.
  3. taha

    taha Elder - Старейшина

    Joined:
    20 Aug 2006
    Messages:
    399
    Likes Received:
    329
    Reputations:
    251
    Естественно некомпилится.. Это из-за несовместимости трансляторов! Ассемблер - это не только мнемоники, но еще и синтаксис транслятора: макросы, дерективы и тд, и тп

    Просто даже среди ассемблеров одного типа большой разброд: различие в ключевых словах, в правилах оформления листинга, библиотеках, хидерах..

    Тоесть чтобы скомпилировать код Калашникого, тебе нужно переделать его под свой компилятор.. Ты выбрал FASM.. ну так бери справочники и туторы по нему..

    А твой код на fasm будет выглядить так:
    Code:
    org     100h
    use16
            mov     ah,9
            mov     dx,hello
            int     21h
            int     20h
    hello db 13,10,'Hello,world$'
     
  4. KindEcstasy

    KindEcstasy Banned

    Joined:
    30 Sep 2006
    Messages:
    105
    Likes Received:
    64
    Reputations:
    54
    Manoff
    Приучай себя сразу записывать числа не просто 9 а например 09h просто правило хорошего тона. конечно по дефолту асм знает что это hex - но всё же...
     
  5. Manoff

    Manoff Elder - Старейшина

    Joined:
    15 Dec 2007
    Messages:
    38
    Likes Received:
    4
    Reputations:
    0
    Да я уже понял , все отладчики в hex'е работают , но не все пишут h в конце =)), я так пару раз лохонулся .
    TAHA я уже покопался и нарыл статьи об особенностях , спасибо.
     
    #245 Manoff, 7 Apr 2008
    Last edited: 7 Apr 2008
  6. Manoff

    Manoff Elder - Старейшина

    Joined:
    15 Dec 2007
    Messages:
    38
    Likes Received:
    4
    Reputations:
    0
    А справочника по прерываниям и командам процессора у кого-нить есть?
     
  7. taha

    taha Elder - Старейшина

    Joined:
    20 Aug 2006
    Messages:
    399
    Likes Received:
    329
    Reputations:
    251
    Manoff брось ты уже Калашникова читать, его книга и рассылка была актуальна лет эдак 12 назад!!!!

    Думаю ты врядли будешь писать резидента под DOS...

    Скачай уроки изелона с wasm.ru и хотябы что-нибудь из этого списка:

    Code:
    Язык ассемблера для процессоров Intel - Ирвин
    Искусство программирования на АССЕМБЛЕРЕ - Н. Голубь
    Ассемблер для процессоров Intel - Ю. Магда
    Изучаем Ассемблер - А.Б. Крупник.djvu
    И у тебя возникнет меньше проблем..
     
    1 person likes this.
  8. GlOFF

    GlOFF Elder - Старейшина

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    TAHA +1

    Manoff Александр Крупник "САМОУЧИТЕЛЬ ASSEMBLER" -> СКАЧАТЬ
     
    1 person likes this.
  9. VERte][

    VERte][ Elder - Старейшина

    Joined:
    17 May 2007
    Messages:
    240
    Likes Received:
    163
    Reputations:
    32
    хм, как правило 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 (на мой взгляд офигенная книга для начинающего).

    зы. Пильщиков ведет в МГУ на ВМиК, так что мужик свой =) Кому надо могу скинуть лекции в печатном виде другого ВМКшного препода по асму, там теория + отличные практические примеры.
     
    #249 VERte][, 8 Apr 2008
    Last edited: 8 Apr 2008
    1 person likes this.
  10. KIR@PRO

    KIR@PRO Active Member

    Joined:
    26 Dec 2007
    Messages:
    823
    Likes Received:
    287
    Reputations:
    359
    знающие ассэмблер подскажите пжлста ссылочки на более полные и более понятные учебники по ассэмблеру.... а еще лучше в добавок пару книг которые в магазине найти мона.... а то от монитора тока зрение испорчу...((((( за хорошую книгу плюсиком не обижу.....
     
    _________________________
  11. z01b

    z01b Муджахид

    Joined:
    5 Jan 2007
    Messages:
    494
    Likes Received:
    382
    Reputations:
    22
    Лучшая книга по асму это книга Крупника имхо.

    http://webfile.ru/1881580
     
    9 people like this.
  12. VERte][

    VERte][ Elder - Старейшина

    Joined:
    17 May 2007
    Messages:
    240
    Likes Received:
    163
    Reputations:
    32
    чти на 2 поста выше) Пильщиков, Калашников, Пирогов (больше как справочник)
     
    1 person likes this.
  13. KIR@PRO

    KIR@PRO Active Member

    Joined:
    26 Dec 2007
    Messages:
    823
    Likes Received:
    287
    Reputations:
    359
    а может ктонибудь написать код ассэмблеровский для делфи (там мона вставлять в делфи) который будет умножать..... или откликнитесь люди которые знают и делфи и ассэмблер......
     
    _________________________
  14. De-visible

    De-visible [NDC] Network develope c0ders

    Joined:
    6 Jan 2008
    Messages:
    918
    Likes Received:
    550
    Reputations:
    66

    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;
     
    #254 De-visible, 18 Apr 2008
    Last edited: 18 Apr 2008
    1 person likes this.
  15. DWORD

    DWORD Elder - Старейшина

    Joined:
    24 Jul 2007
    Messages:
    129
    Likes Received:
    70
    Reputations:
    -36
    Уроки Iczeliona весьма интересный материал для новичков в WinAPI, но никак не как самоучитель по ассемблеру. Мало того что самому ассемблеру там, что естественно и правильно, никакого внимания как языку не уделяется, так там еще и возможности его раскрыты самым минимальным способом.
    Мое искреннее убеждение что уроки напрасно написаны на ассемблере - было бы намного удобнее читать их на С, а эффект был бы тем же самым. Впрочем надо сказать что ассемблерный код в силу его наглядного оформления тоже читается хорошо. Но именно из-за наглядности этого кода, смысл выбора языком - ассемблера вообще нивелируется.

    Кроме того по WinAPI есть множество вполне неплохих как русскоязычных, так и англоязычных руководств. Некоторые англоязычные руководства хорошо переведены, так что смысл читать Ицзелиона когда есть Сишные альтернативы фактически теряется. Тем более что после усвоения основ логики работы Windows-приложений, лучшим руководством в дальнейшем служит MSDN.

    Что же касается самого ассемблера, то изучать его как раз под ДОСом - самое то. Или писать на нем голые консольные приложения/драйвера - тоже нормально. Только в целях обучения. На практике он и здесь уже сдал свои позиции языкам высокого уровня. Писать оконные программы на ассемблере - себя не уважать!

    Что касается книг по ассемблеру, которые понравились мне, то это:
    Зубков - классная книжка - советую!

    Юрова - не читал, но должно быть ничего. Его я обычно использую как простенький справочник.

    Пирогов две книжки "учебный курс" и "дизассемблирование" - довольно содержательный курс, но первая без второй опять-таки не все, вместе две книжки как раз образуют то что надо, и даже немножко лишнего (из "дизассмблирования")

    Есть еще книжка автора не помню сейчас название примерно такое: программирование аппаратных средств для windows - там по-моему есть некоторые практические стороны работы с оборудованием через порты прерывания, dma и все в таком роде.

    Вот это и есть ассемблер, а cmp eax,ebx;jz _label само по себе в оконной процедуре сегодня никому уже ненужно.

    По-моему есть еще какая-та литература которая мне очень понравилась, но точно не помню сейчас. Главное не хвататься за все эти книжки - а взять и прочитать какую-то одну (Зубков?) а дальше остальные читать уже не придется - пробежать глазами и с книжкой уже ознакомился, потому что содержания в них, конечно, пересекаются.

    Если же вы планируете писать на ассемблере полноценные программы или хотя бы и модули, то надо еще ознакомиться с какими-нибудь свежими материалам по оптимизации. Потому что без оптимизации использовать ассемблер для ЭВМ сейчас практически никогда не имеет смысла. А сама оптимизация сильно зависит от реализации конкретной ЭВМ.
     
    #255 DWORD, 18 Apr 2008
    Last edited: 18 Apr 2008
  16. KIR@PRO

    KIR@PRO Active Member

    Joined:
    26 Dec 2007
    Messages:
    823
    Likes Received:
    287
    Reputations:
    359
    а правда то что код на ассэмблере выполняется быстрее чем на делфи или си....
    домустим для такой цели как перебор хешей md5 код ассэмблера будет работать быстрее?
    я просто мало то знаю по ассэмблеру начал читать Крупника интересная книга но на ней нумаю не остановлюсь...))) ну дак как всетаки на счет вопроса?
     
    _________________________
  17. zl0y

    zl0y Banned

    Joined:
    13 Sep 2006
    Messages:
    371
    Likes Received:
    270
    Reputations:
    109
    Вранье,копилятор генерит ассемблерный код,тут уже все зависит от алгоритма.
     
  18. KIR@PRO

    KIR@PRO Active Member

    Joined:
    26 Dec 2007
    Messages:
    823
    Likes Received:
    287
    Reputations:
    359
    zl0y да я знаю но ведь согласись что в некоторых слуячаях компилятор делфи к примеру довольно таки тупо переводит и код который может уместиться к примеру в 10 строчках умещается в 15 а то и в 20...


    но я считаю что каждому из нас обязательно надо, хотябы чуть чуть (основу), знать ассэмблер!!! с ним жизнь станет намного легче (поимите правильно я не имею ввиду все дружно пишем все на асэме я имею ввиду что вообще занимаясь ИТ и не зная ассэмблера понимание немного другое.....))))))) я сам короче запустался)))))))) :-D)
     
    _________________________
    #258 KIR@PRO, 19 Apr 2008
    Last edited: 19 Apr 2008
  19. taha

    taha Elder - Старейшина

    Joined:
    20 Aug 2006
    Messages:
    399
    Likes Received:
    329
    Reputations:
    251
    kir@pro, новичку врядли удасться бороться с компилятром Делфи или C++!! Можно оптимизировать процентов на 10 максимум... На самом деле оптимизировать лучше алгоритм...
    конечно, когда ты знаешь во что преобразуется If или While легче на душе)))
     
  20. Jes

    Jes Elder - Старейшина

    Joined:
    16 Apr 2007
    Messages:
    370
    Likes Received:
    391
    Reputations:
    34
    перевел пример из сишного в фасм
    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 и выполнение продолжается , на Си работает , а тут зацикливается
    Где я накосячил?
     
    4 people like this.
Loading...