Синтаксис ассемблера

Everything you can't fit into other forums
  • godlin wrote:Вопрос в том, стал ли он читабельнее?
    Исключительно личное субъективное оценочное суждение - Код стал намного хуже для читабельности, а с подстветкой так и вообще не понятно что будет. Какая-то каша Си + ассемблер.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Собственно, догадаться, что есть что, всё еще можно. Но насколько это стало понятнее людям "снаружи" - не знаю. А как насчет сложной адресации - типа [esi+edi*2+4]? Как не ввести программиста в заблуждение? Чем это лучше существующих "промежуточных" решений? Такие вопросы стоит обдумать, если есть желание развивать идею.
  • Тогда уж
    al -= 0x81
    al &= 0xFC
    ещё немного и будет С--
  • SoUrcerer wrote:Собственно, догадаться, что есть что, всё еще можно. Но насколько это стало понятнее людям "снаружи" - не знаю. А как насчет сложной адресации - типа [esi+edi*2+4]? Как не ввести программиста в заблуждение? Чем это лучше существующих "промежуточных" решений? Такие вопросы стоит обдумать, если есть желание развивать идею.
    С адресацией как-раз не так всё сложно, потому что она в квадратные скобочки ставится :)
    Я на самом деле очень-очень плохо знаю ассемблер, и поскольку я крайне избалован высокоуровневыми языками, я ищу способы максимально облегчить себе жизнь при работе с ассемблером.
  • Serge wrote:Тогда уж
    al -= 0x81
    al &= 0xFC
    Да, я сперва тоже так написал, но потом подумал, что эти "=", возможно, лишние, потому что и так понятно, что результат должен записываться в первый операнд, и они требуют лишнего нажатия, и лишний байт занимают :) Возможно, я не прав))
    Serge wrote: Тогда уж ещё немного и будет С--
    Вот это врядли :lol: Потому что для этого потребуется разбор сложных выражений, а на ассемблере от программиста требуется декомпозиция сложных выражений на (почти) атомарные шаги.
  • Mario_r4 wrote:
    godlin wrote:Вопрос в том, стал ли он читабельнее?
    Исключительно личное субъективное оценочное суждение - Код стал намного хуже для читабельности, а с подстветкой так и вообще не понятно что будет. Какая-то каша Си + ассемблер.
    Инфиксная запись позволяет избавиться от лишних запятых, а замена "длинных" названий на операторы сокращает количество текста. Хотя, конечно, красиво отформатировать стало труднее.

    Я собственно, думаю как раз о том, как можно сократить количество кода, не потеряв в читабельности и в качестве кода, т.е., сохранить то, ради чего люди пишут на асме, но еще больше упростив им жизнь. Собственно, тот же fasm ровно этим и занимается, но, вероятно, он не достиг еще совершенства в этом вопросе.

    Например, за cmp обычно идет какой-нибудь jne, почему бы объединить их в одну строчку?
  • godlin wrote:Например, за cmp обычно идет какой-нибудь jne, почему бы объединить их в одну строчку?
    не всегда так, в зависимости от условий может быть любой переход из списка:

    Code: Select all

    JA Jump if above (X > Y) CF=0 & ZF=0 
    JAE Jump if above or equal (X >= Y) CF=0 
    JB Jump if below (X < Y) CF=1 
    JBE Jump if below or equal (X < Y) CF=1 or ZF=1 
    JC Jump if carry (cf=1) CF=1 
    JCXZ Jump if CX=0 регистр CX=0 
    JE (то же, что и JZ) Jump if equal (X = Y) ZF=1 
    JG Jump if greater (signed) (X > Y) ZF=0 & SF=OF 
    JGE Jump if greater or equal (signed) (X >= y) SF=OF 
    JL Jump if less (signed) (X < Y) SF != OF 
    JLE Jump if less or equal (signed) (X <= Y) ZF=1 or SF!=OF 
    JNA Jump if not above (X <= Y) CF=1 or ZF=1 
    JNAE Jump if not above or equal (X < Y) CF=1 
    JNB Jump if not below (X >= Y) CF=0 
    JNBE Jump if not below or equal (X > Y) CF=1 & ZF=0 
    JNC Jump if not carry (cf=0) CF=0 
    JNE Jump if not equal (X != Y) ZF=0 
    JNG Jump if not greater (signed) (X <= Y) ZF=1 or SF!=OF 
    JNGE Jump if not greater or equal (signed) (X < y) SF!=OF 
    JNL Jump if not less (signed) (X >= Y) SF=OF 
    JNLE Jump if not less or equal (signed) (X > y) ZF=0 & SF=OF 
    JNO Jump if not overflow (signed) (of=0) OF=0 
    JNP Jump if no parity (pf=0) PF=0 
    JNS Jump if not signed (signed) (sf=0) SF=0 
    JNZ Jump if not zero (X != Y) ZF=0 
    JO Jump if overflow (signed) (of=1) OF=1 
    JP Jump if parity (pf=1) PF=1 
    JP Jump if parity (pf=1) PF=1 
    JPE Jump if parity even PF=1 
    JPO Jump if parity odd PF=0 
    JS Jump if signed (signed) SF=1 
    JZ Jump if zero (X = Y) ZF=1
  • IgorA wrote:
    godlin wrote:Например, за cmp обычно идет какой-нибудь jne, почему бы объединить их в одну строчку?
    не всегда так, в зависимости от условий может быть любой переход из списка:

    Code: Select all

    JA Jump if above (X > Y) CF=0 & ZF=0 
    ...
    JZ Jump if zero (X = Y) ZF=1
    Это-то как раз понятно, но цель, во-первых, перестать писать cmp, если за ним всё-равно какой-то jump идёт, и, может быть, придумать способ не запоминать весь список, а вместо него использовать какую-то легко читаемую (для новичка) конструкцию (ну, или несколько таких конструкций)? :)
    Грубо говоря, в Си мы jump-ы заменяем if-ами с соответствующими условиями, но теряем в объеме кода и производительности.
    Например, можно использовать что-то вроде:

    Code: Select all

    X >     Y : lable     ; JA    
    X >=   Y : lable     ; JAE    
    X ==   Y : lable     ; JE    
    
    Я хочу обратить внимание, что прекрасно понимаю, господа ассемблерщики, что отказаться от привычного всегда трудно, но прошу попытаться взглянуть на ситуацию свежим взглядом.
    Не факт, что из этого что-то хорошее получится, но попытаться стоит)
  • цель, во-первых, перестать писать cmp, если за ним всё-равно какой-то jump идёт
    Это достигается простым макросом, приведённым прямо в мануале по fasm:

    Code: Select all

    macro jif op1,cond,op2,label
    {
    cmp op1,op2
    j#cond label
    }
    
    Пример использования:

    Code: Select all

    jif eax,ae,10h,exit
    
    превратится в

    Code: Select all

    cmp eax,10h
    jae exit
    
    После небольшой доработки макроса можно было бы писать

    Code: Select all

    jif eax,>=,10h,exit
    если бы не то обстоятельство, что ">=" неоднозначно: это может быть знаковым сравнением ge или беззнаковым сравнением ae.
    Сделаем мир лучше!
  • godlin wrote:перестать писать cmp, если за ним всё-равно какой-то jump идёт
    А если sete или setb какой-нибудь?
  • Freeman wrote:
    godlin wrote:перестать писать cmp, если за ним всё-равно какой-то jump идёт
    А если sete или setb какой-нибудь?
    Ну, не обязательно же отказываться от базового синтаксиса)
    Просто, что в данном случае удобнее, тем и пользоваться.
  • Похоже идея так и осталась идеей и вариант HLA ассемблера для использования "неподходит"

    Моя идея несколько локальнее
    Дополнить ассемблер командой -> вариант команды mov с "прямым" порядком аргументов

    Примеры;
    -> [variable1],eax
    eax -> [variable2]

    В первом варианте - это как бы временный алиас переменной в регистре
    Второй случай классическая пересылка
    Могут быть сравнения
    eax = ebx
    eax ? ebx ; тестирование
    eax u= ebx ; беззнаковое сравнение

    P.S. Тут я не первоизобретатель. Подобный синтаксис использован в ассемблере для AVR проекта Алгоритм Билдер
    Интересно также рассмотреть ранее дискутируемый вариант на тему ассемблера - ни много - ни мало Компилирующий ассемблер
    цель разбавить команды-слова различными знаковыми "сокращёнными" представлениями - эргономика восприятия кода должна повыситься

    'Высокоуровневые" варианты циклов ветвлений тоже вполне возможны.
    Пример (с которым близко знаком) использования и расширения ассемблера в проекте
    ff303 для AVR see ДопКоманды.rar
    (в моём варианте для PDP-11 )
    (Также можно и для PC asm сделать)
    Last edited by Kopa on Wed Feb 05, 2014 9:12 pm, edited 6 times in total.
  • Kopa wrote:вариант HLA ассемблера для использования "неподходит"
    Если ты про HLA by Randall Hyde, то он-то как раз и подходит. Есть возможность транслировать исходник в FASM, NASM, MASM, GAS.
  • 0CodErr wrote:
    Kopa wrote:вариант HLA ассемблера для использования "неподходит"
    Если ты про HLA by Randall Hyde, то он-то как раз и подходит. Есть возможность транслировать исходник в FASM, NASM, MASM, GAS.
    С какими-то ключами? (не в курсе)
  • Who is online

    Users browsing this forum: No registered users and 42 guests