Я тут начал переводить из С (не с++) в Асм и сразу проблемы вышли. Я в обоих языках новичок (по ходу 2 языка изучаю). Вот такой код: Код (Text): typedef uint32_t FbStip; //Как в фасме typedef делать? #define FB_STIP_ALLONES ((FbStip) -1) #define FB_STIP_MASK (FB_STIP_UNIT - 1) #define FbStipRight(x,n) FbScrRight(x,n) #define FbScrRight(x,n) ((x) << (n)) #define FB_STIP_MASK (FB_STIP_UNIT - 1) #define FbStipLeft(x,n) FbScrLeft(x,n) #define FbScrLeft(x,n) ((x) >> (n)) #define FB_STIP_UNIT (1 << FB_STIP_SHIFT) #define FB_STIP_SHIFT LOG2_BITMAP_PAD #define LOG2_BITMAP_PAD 5 macro FbRightStipMask x {;;#define FbRightStipMask (x) ( ((FB_STIP_UNIT - (x)) and FB_STIP_MASK) ? \ FbScrLeft(FB_STIP_ALLONES,(FB_STIP_UNIT - (x)) and FB_STIP_MASK) : 0) mov ecx,1 shl ecx,5;;ecx=FB_STIP_UNIT push ecx mov edx,1 sub ecx,edx mov esi,ecx ;;esi=FB_STIP_MASK pop ecx sub ecx,x and ecx,esi shl FB_STIP_ALLONES,esi;???????? ;????? } macro FbStipMask x,w { ;; #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)) mov ecx,1 shl ecx,5;;ecx=FB_STIP_UNIT mov ebx,x add ebx,w sub ecx,ebx push ecx mov edx,1 sub ecx,edx mov esi,ecx ;;esi=FB_STIP_MASK pop ecx and ecx,esi shl FB_STIP_ALLONES,ecx;???? mov eax,x and eax,esi shr FB_STIP_ALLONES,eax;???? and FB_STIP_ALLONES, FB_STIP_ALLONES;?????? } А это я совсем не понял как: #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): ;ENUM ;by mammon_ ;Summary: A NASM macro emulating the C 'ENUM" command ;Assembler: NASM macro ENUM 2-* { ;Usage: ENUM int SYMBOLS %assign i %1 ; where int is the number to begin enumeration at [0] %rep %0 ; SYMBOLS is a list of Symbols to define %2 EQU 0xi ;Example: ENUM 0 TRUE FALSE %assign i i+1 ; this EQUates TRUE to 0 and FALSE to 1 %rotate 1 ;Example: ENUM 11 JACK QUEEN KING %endrep ; this EQUs JACK to 11, QUEEN to 12, KING to 13 Если есть вспомогательные макросы дайте пожалуйста. Для перевода из С. А есть ли у кого нить Libc в асме писанный? Вот и все для начала
typedef - это, можно сказать, псевдоним типа. typedef uint32_t FbStip отределяет тип FbStip, который является псевдонимом uint32. А uint32 в свою очередь - это 32-битное беззнаковое целое число. на fasm это dword.
Спс конечно. Но я это знаю, но как это зделать? Наверное просто буду переименовывать. Внизу есть проблемы и похуже.
Ой, я кажется полу переведенную версию дал. Извините. #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))
Чтобы в 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 << 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 << 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)>>((1 << 5)-(x) </font><font class="f1">dec</font> <font class="f6">edx</font> <font class="f4">;((1 << 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)>>((1 << 5)-(x)) & ((1 << 5) - 1)) </font> <font class="f4">;and EBX,EDX ;(((1 << 5)-(x)) & ((1 << 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 << 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) & ((1 << 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)>>((x) & ((1 << 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 << 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)<<(((1 << 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 << 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)<<(((1 << 5) - ((x)+(w))) & ((1 << 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)>>((x) & ((1 << 5)-1))) & ((-1)<<(((1 << 5) - ((x)+(w))) & ((1 << 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