C to Fasm

Тема в разделе "WASM.BEGINNERS", создана пользователем yaskhan, 23 июл 2009.

  1. yaskhan

    yaskhan New Member

    Публикаций:
    0
    Регистрация:
    23 июл 2009
    Сообщения:
    29
    Я тут начал переводить из С (не с++) в Асм и сразу проблемы вышли. Я в обоих языках новичок (по ходу 2 языка изучаю). Вот такой код:
    Код (Text):
    1. typedef uint32_t        FbStip; //Как в фасме typedef делать?
    2. #define FB_STIP_ALLONES ((FbStip) -1)
    3. #define FB_STIP_MASK    (FB_STIP_UNIT - 1)
    4. #define FbStipRight(x,n) FbScrRight(x,n)
    5. #define FbScrRight(x,n) ((x) << (n))
    6. #define FB_STIP_MASK    (FB_STIP_UNIT - 1)
    7. #define FbStipLeft(x,n) FbScrLeft(x,n)
    8. #define FbScrLeft(x,n)  ((x) >> (n))
    9. #define FB_STIP_UNIT    (1 << FB_STIP_SHIFT)
    10. #define FB_STIP_SHIFT   LOG2_BITMAP_PAD
    11. #define LOG2_BITMAP_PAD 5
    12.  
    13.  macro FbRightStipMask x {;;#define FbRightStipMask (x) ( ((FB_STIP_UNIT - (x)) and FB_STIP_MASK) ? \
    14.                  FbScrLeft(FB_STIP_ALLONES,(FB_STIP_UNIT - (x)) and FB_STIP_MASK) : 0)
    15.        mov ecx,1
    16.            shl ecx,5;;ecx=FB_STIP_UNIT
    17.            
    18.            push ecx
    19.              
    20.            mov edx,1
    21.            sub ecx,edx
    22.            mov esi,ecx ;;esi=FB_STIP_MASK
    23.              
    24.            pop ecx
    25.            
    26.            sub ecx,x
    27.            and ecx,esi
    28.            shl FB_STIP_ALLONES,esi;????????
    29.                    
    30.            ;?????
    31.                  }
    32.  
    33.  
    34.   macro FbStipMask x,w  {
    35.  ;; #define FbStipMask (x,w) (FbStipRight(FB_STIP_ALLONES,(x) and FB_STIP_MASK) and FbStipLeft(FB_STIP_ALLONES,(FB_STIP_UNIT - ((x)+(w))) and FB_STIP_MASK))
    36.  
    37.              mov ecx,1
    38.              shl ecx,5;;ecx=FB_STIP_UNIT
    39.              
    40.              mov ebx,x
    41.              add ebx,w
    42.              sub ecx,ebx
    43.              
    44.              push ecx
    45.              
    46.              mov edx,1
    47.              sub ecx,edx
    48.              mov esi,ecx ;;esi=FB_STIP_MASK
    49.              
    50.              pop ecx
    51.              
    52.              and ecx,esi
    53.              shl FB_STIP_ALLONES,ecx;????
    54.              
    55.              mov eax,x
    56.              and eax,esi
    57.              shr FB_STIP_ALLONES,eax;????
    58.              
    59.              and FB_STIP_ALLONES, FB_STIP_ALLONES;??????
    60.              
    61.              }
    А это я совсем не понял как:
    #define FbPatternOffset(o,t) ((o) ^ (FbPatternOffsetBits & ~(sizeof (t) - 1)))
    #define FbPatternOffsetBits 0

    #define FbPtrOffset(p,o,t) ((t *) ((CARD8 *) (p) + (o)))
    typedef uint8_t CARD8;

    И еще как это можно перевести на фасм:

    Код (Text):
    1. ;ENUM
    2. ;by mammon_
    3. ;Summary: A NASM macro emulating the C 'ENUM" command
    4. ;Assembler: NASM
    5. macro ENUM 2-* {    ;Usage: ENUM int SYMBOLS
    6. %assign i %1        ;  where int is the number to begin enumeration at [0]
    7. %rep %0             ;  SYMBOLS is a list of Symbols to define
    8.   %2 EQU 0xi        ;Example: ENUM 0 TRUE FALSE
    9.   %assign i i+1     ;  this EQUates TRUE to 0 and FALSE to 1
    10.   %rotate 1         ;Example: ENUM 11 JACK QUEEN KING
    11. %endrep             ;  this EQUs JACK to 11, QUEEN to 12, KING to 13
    Если есть вспомогательные макросы дайте пожалуйста. Для перевода из С.

    А есть ли у кого нить Libc в асме писанный?

    Вот и все для начала :)
     
  2. yaskhan

    yaskhan New Member

    Публикаций:
    0
    Регистрация:
    23 июл 2009
    Сообщения:
    29
    ой извините две темы создалось. удалите эту. или как удалить?
     
  3. Microedition

    Microedition Active Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    814
    typedef - это, можно сказать, псевдоним типа.

    typedef uint32_t FbStip
    отределяет тип FbStip, который является псевдонимом uint32. А uint32 в свою очередь -
    это 32-битное беззнаковое целое число.
    на fasm это dword.
     
  4. yaskhan

    yaskhan New Member

    Публикаций:
    0
    Регистрация:
    23 июл 2009
    Сообщения:
    29
    Спс конечно. Но я это знаю, но как это зделать? Наверное просто буду переименовывать.
    Внизу есть проблемы и похуже.
     
  5. yaskhan

    yaskhan New Member

    Публикаций:
    0
    Регистрация:
    23 июл 2009
    Сообщения:
    29
    Ой, я кажется полу переведенную версию дал. Извините.

    #define FbRightStipMask(x) ( ((FB_STIP_UNIT - (x)) & FB_STIP_MASK) ? \
    FbScrLeft(FB_STIP_ALLONES,(FB_STIP_UNIT - (x)) & FB_STIP_MASK) : 0)


    #define FbStipMask(x,w) (FbStipRight(FB_STIP_ALLONES,(x) & FB_STIP_MASK) & \
    FbStipLeft(FB_STIP_ALLONES,(FB_STIP_UNIT - ((x)+(w))) & FB_STIP_MASK))
     
  6. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Зачем? о_0 есть же msvcrt.dll
     
  7. yaskhan

    yaskhan New Member

    Публикаций:
    0
    Регистрация:
    23 июл 2009
    Сообщения:
    29
    Чтобы в KolibriOS портануть...

    А насчет кода, я сам себе отвечу:
    Сначало расскрываем
    FbRightStipMask(x) ((((1 << 5)-(x)) & ((1 << 5) - 1)) ? ((-1)>>((1 << 5)-(x)) & ((1 << 5) - 1)) : 0)

    FbStipMask(x,w) ((-1)<<((x) & ((1 << 5)-1))) & ((-1)>>(((1 << 5) - ((x)+(w))) & ((1 << 5)-1)));

    Потом уже код

    <html>
    <head>
    <title>text</title>
    <style type="text/css">
    <!--
    pre{
    font-family: "Lucida Console";
    font-size: 13 px;
    padding-left: 30px;
    padding-top: 47px;
    color: #000000;
    background: #ffffff;
    }
    pre font.f0 { color: #000000; }
    pre font.f1 { color: #0a246a; }
    pre font.f2 { color: #0a246a; }
    pre font.f3 { color: #800000; }
    pre font.f4 { color: #008000; }
    pre font.f5 { color: #0a246a; }
    pre font.f6 { color: #ff8000; }
    pre font.f7 { color: #ff0000; }
    pre font.f8 { color: #ff0000; }
    pre font.f9 { color: #00ccff; }

    !-->
    </style>
    </head>
    <body>
    <pre><font class="f4">;eax=x
    </font><b>
    FbRightStipMask</b><font class="f1">:</font>

    <font class="f1">mov</font> <font class="f6">edx</font><font class="f1">,</font><font class="f3">1</font> <font class="f4">;(1 &lt;&lt; 5)

    </font><font class="f1">shl</font> <font class="f6">edx</font><font class="f1">,</font><font class="f3">5</font>
    <font class="f1">mov</font> <font class="f6">ebx</font><font class="f1">,</font><font class="f6">edx</font>
    <font class="f1">sub</font> <font class="f6">ebx</font><font class="f1">,</font><font class="f6">eax</font> <font class="f4">;EBX=((1 &lt;&lt; 5)-(x))

    </font>

    <font class="f1">mov</font> <font class="f6">ecx</font><font class="f1">,</font>-<font class="f3">1</font>
    <font class="f1">shr</font> <font class="f6">ecx</font><font class="f1">,</font><font class="f6">edx</font> <font class="f4">;(-1)&gt;&gt;((1 &lt;&lt; 5)-(x)

    </font><font class="f1">dec</font> <font class="f6">edx</font> <font class="f4">;((1 &lt;&lt; 5) - 1)
    </font><font class="f1">and</font> <font class="f6">ecx</font><font class="f1">,</font><font class="f6">edx</font> <font class="f4">;((-1)&gt;&gt;((1 &lt;&lt; 5)-(x)) &amp; ((1 &lt;&lt; 5) - 1))

    </font>
    <font class="f4">;and EBX,EDX ;(((1 &lt;&lt; 5)-(x)) &amp; ((1 &lt;&lt; 5) - 1))
    </font><font class="f2">if</font> <font class="f6">ebx</font> <font class="f1">and</font> <font class="f6">edx</font>
    <font class="f1">mov</font> <font class="f6">eax</font><font class="f1">,</font><font class="f6">ecx</font>

    <font class="f1">ret</font>
    else
    <font class="f1">xor</font> <font class="f6">eax</font><font class="f1">,</font><font class="f6">eax</font>
    <font class="f1">ret</font>

    <font class="f4">;===================================================
    ;x=eax
    ;w=ebx
    </font><b>
    FbStipMask</b><font class="f1">:</font>

    <font class="f1">mov</font> <font class="f6">edx</font><font class="f1">,</font><font class="f3">1</font> <font class="f4">;((1 &lt;&lt; 5)-1))

    </font><font class="f1">shl</font> <font class="f6">edx</font><font class="f1">,</font><font class="f3">5</font>
    <font class="f1">push</font> <font class="f6">edx</font> <font class="f4">; save reg
    </font><font class="f1">dec</font> <font class="f6">edx</font>

    <font class="f1">push</font> <font class="f6">eax</font> <font class="f4">; save reg

    </font><font class="f1">and</font> <font class="f6">eax</font><font class="f1">,</font><font class="f6">edx</font> <font class="f4">;(x) &amp; ((1 &lt;&lt; 5)-1)
    </font><font class="f1">mov</font> <font class="f6">ecx</font><font class="f1">,</font>-<font class="f3">1</font> <font class="f4">;FB_STIP_ALLONES

    </font><font class="f1">push</font> <font class="f6">ecx</font> <font class="f4">; save reg
    </font><font class="f1">shr</font> <font class="f6">ecx</font><font class="f1">,</font><font class="f6">eax</font> <font class="f4">;(-1)&gt;&gt;((x) &amp; ((1 &lt;&lt; 5)-1))

    </font><font class="f1">mov</font> <font class="f6">esi</font><font class="f1">,</font><font class="f6">ecx</font>

    <font class="f1">pop</font> <font class="f6">eax</font>
    <font class="f1">pop</font> <font class="f6">ecx</font>
    <font class="f1">pop</font> <font class="f6">edx</font>

    <font class="f1">add</font> <font class="f6">eax</font><font class="f1">,</font><font class="f6">ebx</font> <font class="f4">;((x)+(w))
    </font><font class="f1">sub</font> <font class="f6">edx</font><font class="f1">,</font><font class="f6">eax</font> <font class="f4">;((1 &lt;&lt; 5) - ((x)+(w)))

    </font><font class="f1">shl</font> <font class="f6">ecx</font><font class="f1">,</font><font class="f6">edx</font> <font class="f4">;(-1)&lt;&lt;(((1 &lt;&lt; 5) - ((x)+(w))
    </font>
    <font class="f1">pop</font> <font class="f6">edx</font>
    <font class="f1">dec</font> <font class="f6">edx</font> <font class="f4">;((1 &lt;&lt; 5)-1)

    </font><font class="f1">and</font> <font class="f6">ecx</font><font class="f1">,</font><font class="f6">edx</font> <font class="f4">;(-1)&lt;&lt;(((1 &lt;&lt; 5) - ((x)+(w))) &amp; ((1 &lt;&lt; 5)-1))
    </font>
    <font class="f1">and</font> <font class="f6">esi</font><font class="f1">,</font><font class="f6">ecx</font> <font class="f4">;((-1)&gt;&gt;((x) &amp; ((1 &lt;&lt; 5)-1))) &amp; ((-1)&lt;&lt;(((1 &lt;&lt; 5) - ((x)+(w))) &amp; ((1 &lt;&lt; 5)-1)))

    </font>
    <font class="f1">xor</font> <font class="f6">eax</font><font class="f1">,</font><font class="f6">eax</font>
    <font class="f1">mov</font> <font class="f6">eax</font><font class="f1">,</font><font class="f6">esi</font>
    <font class="f1">ret</pre>
    </body>
    </html>


    Я в начале думал что это: ((FbStip) -1)
    Понимается как ((FbStip) -1)=чтото, а оказалось что это просто -1