Помощь начинающему ассемблерщику

Assembler programming questions
  • Глянь исходники TinyPad, функция loadfile. Если и после этого будут вопросы - ответим.
  • Mike.dld
    Эх, тяжело разобратся мне в чужих исходниках.
    Ничё не понял из этого. вопросы есть =)
  • Вот так вот... Никто мне помоч не хочет =(
  • Просто нужно написать не так мало кода.
  • ipr
    Так как переводы строк бывают разные - устанавливай ESI на начало файла в памяти, CLD, потом LODSB, и сравнивай AL с нужными кодами. Встретил 10, 13 - значит конец строки (или почти - зависит от типа перевода строк - WIN, *NIX, MAC). Не встретил - ещё LODSB и т.д.
  • Попробую... Если ещё вопросы будут, задавать можно?
  • Почему нет?
  • Прошу помощи, при написании программ не пользовался ранее макросами, стал разбирать простые программы и вот что обнаружил:
    дистрибутив 0.5.2.0 от 12 декабря 2005. В исходниках в корне лежит файлик macros.inc, есть пример Exemple.asm
    при компилировании fasm 1.64 (использую mcall) выдает ошибку

    Code: Select all

    Exemple.asm[111]:
    mcall 0, <200,200>, <200,50>, 0x02AABBCC 
    MACROS.INC [134] mcall[2]:
    __mov ebx,b
    
    error: invalid macro arguments
    Вот кусок MACROS.INC

    Code: Select all

    
    macro mcall a,b,c,d,e,f {   ; mike.dld
     __mov eax,a
     __mov ebx,b
     __mov ecx,c
     __mov edx,d
     __mov esi,e
     __mov edi,f
     int   0x40
    }
    
    Ясно что конструкция не работает, может кто подскажет ?

    Еще может у кого есть описание макросов для FASM на русском ?
  • Вот описание директив и макросов с http://WWW.WASM.RU:
    http://mysoft.ucoz.ru/macros.zip

    Программирование на языке Assembler в FASM:
    http://mysoft.ucoz.ru/programning.zip
  • <Lrz>
    У тебя старый macros.inc, видимо (точнее, в архиве Колибри он старый). Замени __mov на это:

    Code: Select all

    macro __mov reg,a,b {       ; mike.dld
     if (~a eq)&(~b eq)
       mpack reg,a,b
     else if (~a eq)&(b eq)
       mov reg,a
     end if
    }
  • TO IPR может поможет... ну или хотябы какую-нибудь идею подкинет...

    ; Допустим esi начало массива строк
    mov esi,stroka
    ; в ecx размер массива
    mov ecx,[arrsize]

    nextstring:
    ; ebp счетчик символов в строке
    mov ebp,0

    ; в edi сохраним начало этой строки
    mov edi,esi
    nextchar:
    cmp byte [esi],10
    jne incchar
    cmp byte [esi+1],13
    jne incchar
    jmp endstring
    incchar:
    inc esi ;след символ
    inc ebp ;счетчик +1
    dec ecx
    jnz nextchar
    jmp endstring ;конец массива
    ; когда конец строки найден или не найден вообще
    ; управление передается сюда
    ; в ebp длинна строки, в edi начало этой строки
    endstring:

    pushad
    ; ... тут выводим строку на экран переходим к сед. строке y+10 например
    popad

    jmp endstring ;там сразу обнуляем счетчик и сохраняем начало строки
  • <Lrz>
    С macros.inc очень часто возникают проблемы. Одним программам нужен старый вариант, другим новый, третьим вообще еще чего-то.
    По этому я обычно выкладываю вместе с приложением тот macros.inc, который ему нужен.
    А для всех остальных можно использовать тот, который содержится в IMG образе.

    mike.dld
    Ты все время предлагаешь заменять отдельные куски. Не мог бы сделать универсальный вариант для существующей последней версии FASM, и было бы всем хорошо?
  • Изменения происходят в самих макросах из-за изменения их функциональности, а не из-за изменения версии FASM
  • mike.dld
    Ну так мы никогда и не получим единую версию файла, все так и будем мучаться. Это все равно как велосипеду во время движения вставить палку между спиц - как минимум будет не очень приятно.
  • Who is online

    Users browsing this forum: No registered users and 16 guests