بسم الله الرحمن الرحيم
ربي يسر و اعن
مترجمات السي تدعم الاسمبلي ليس فقط دعم برمجي بل من الممكن
ان تكتب سي و يكون الناتج اسمبلي تأخذه و تلعب به ثم تستعمل اسمبلر
لترجمته. كتب الاسمبلي الان شحيحة و لا تواكب باي حال من الاحوال التطورات
البرمجية.
فاذا كنت تريد ان تتعلم شئ جديد في الاسمبلي فهذهه هي اسرع - افضل - الطرق:
اكتب برنامجك بالسي او السي بلس بلس ثم استعمل
cl /Fa myprog.cpp
يعني تريد لسبب ما ان تتعلم Multithreading in assembly
و الناتج باستعمال cl /Fa
; Listing generated by Microsoft (R) Optimizing Compiler Version 14.00.50215.44 TITLE C:\Documents and Settings\Administrator\multi.cpp .686P .XMM include listing.inc .model flat INCLUDELIB MSVCRT INCLUDELIB OLDNAMES PUBLIC ?side@@3HA ; side CONST SEGMENT $SG3896 DB '*** Pointing to a function.', 00H $SG3897 DB ' --** Hello World! **--', 0aH, 00H ORG $+3 $SG3914 DB 'Done!', 0aH, 00H ORG $+1 $SG3923 DB 'I The value of I is %d', 0aH, 00H $SG3924 DB 'I *** The sum is %d', 0aH, 00H ORG $+3 $SG3933 DB 'II The value of II is %d', 0aH, 00H ORG $+2 $SG3934 DB 'II *** The mul is %d', 0aH, 00H ORG $+2 $SG3943 DB 'III The Value of III is %d', 0aH, 00H $SG3944 DB 'III *** The sum of the three integers is: %d', 0aH, 00H ORG $+2 $SG3954 DB 'IVV The Value of IVV is %d', 0aH, 00H $SG3955 DB 'IVV *** The Sum is %d', 0aH, 00H ORG $+1 $SG3959 DB '%s', 0aH, 00H CONST ENDS _DATA SEGMENT ?side@@3HA DD 04H ; side _DATA ENDS PUBLIC ?DataAdd@@YAHPAH@Z ; DataAdd PUBLIC ?AddThree@@YAHQAH@Z ; AddThree PUBLIC ?factoria@@YAHH@Z ; factoria PUBLIC ?addem@@YAHH@Z ; addem PUBLIC ?StrPrint@@YAHPAD@Z ; StrPrint PUBLIC __$ArrayPad$ PUBLIC _main EXTRN __imp___beginthread:PROC EXTRN __imp__printf:PROC EXTRN ___security_cookie:DWORD EXTRN @__security_check_cookie@4:PROC ; Function compile flags: /Odtp _TEXT SEGMENT _str$ = -100 ; size = 28 __$ArrayPad$ = -72 ; size = 4 _id1$ = -68 ; size = 4 _id3$ = -64 ; size = 4 _id2$ = -60 ; size = 4 _list$ = -56 ; size = 12 _id5$ = -44 ; size = 4 _id4$ = -40 ; size = 4 _ptr$ = -36 ; size = 4 _kll$ = -32 ; size = 32 _argc$ = 8 ; size = 4 _argv$ = 12 ; size = 4 _main PROC ; File c:\documents and settings\administrator\multi.cpp ; Line 24 push ebp mov ebp, esp sub esp, 100 ; 00000064H mov eax, DWORD PTR ___security_cookie xor eax, ebp mov DWORD PTR __$ArrayPad$[ebp], eax push esi push edi ; Line 30 mov DWORD PTR _list$[ebp], 3 mov DWORD PTR _list$[ebp+4], 5 mov DWORD PTR _list$[ebp+8], 19 ; 00000013H mov DWORD PTR _kll$[ebp], 8 mov DWORD PTR _kll$[ebp+4], 1 mov DWORD PTR _kll$[ebp+8], 2 mov DWORD PTR _kll$[ebp+12], 3 mov DWORD PTR _kll$[ebp+16], 4 mov DWORD PTR _kll$[ebp+20], 5 mov DWORD PTR _kll$[ebp+24], 6 mov DWORD PTR _kll$[ebp+28], 7 ; Line 32 mov ecx, 7 mov esi, OFFSET $SG3896 lea edi, DWORD PTR _str$[ebp] rep movsd ; Line 34 mov DWORD PTR _ptr$[ebp], OFFSET ?StrPrint@@YAHPAD@Z; StrPrint ; Line 35 push OFFSET $SG3897 call DWORD PTR __imp__printf add esp, 4 ; Line 36 push 4 push 0 push OFFSET ?addem@@YAHH@Z ; addem call DWORD PTR __imp___beginthread add esp, 12 ; 0000000cH mov DWORD PTR _id1$[ebp], eax ; Line 37 push 4 push 0 push OFFSET ?factoria@@YAHH@Z ; factoria call DWORD PTR __imp___beginthread add esp, 12 ; 0000000cH mov DWORD PTR _id2$[ebp], eax ; Line 38 lea eax, DWORD PTR _list$[ebp] push eax push 0 push OFFSET ?AddThree@@YAHQAH@Z ; AddThree call DWORD PTR __imp___beginthread add esp, 12 ; 0000000cH mov DWORD PTR _id3$[ebp], eax ; Line 39 lea ecx, DWORD PTR _kll$[ebp] push ecx push 0 push OFFSET ?DataAdd@@YAHPAH@Z ; DataAdd call DWORD PTR __imp___beginthread add esp, 12 ; 0000000cH mov DWORD PTR _id4$[ebp], eax ; Line 40 lea edx, DWORD PTR _str$[ebp] push edx push 0 mov eax, DWORD PTR _ptr$[ebp] push eax call DWORD PTR __imp___beginthread add esp, 12 ; 0000000cH mov DWORD PTR _id5$[ebp], eax ; Line 41 push 20 ; 00000014H call ?addem@@YAHH@Z ; addem add esp, 4 ; Line 42 lea ecx, DWORD PTR _str$[ebp] push ecx call DWORD PTR _ptr$[ebp] add esp, 4 ; Line 43 lea edx, DWORD PTR _str$[ebp] push edx call DWORD PTR _ptr$[ebp] add esp, 4 test eax, eax je SHORT $LN1@main push OFFSET $SG3914 call DWORD PTR __imp__printf add esp, 4 $LN1@main: ; Line 53 xor eax, eax ; Line 54 pop edi pop esi mov ecx, DWORD PTR __$ArrayPad$[ebp] xor ecx, ebp call @__security_check_cookie@4 mov esp, ebp pop ebp ret 0 _main ENDP _TEXT ENDS EXTRN __imp__fflush:PROC EXTRN __imp____iob_func:PROC ; Function compile flags: /Odtp _TEXT SEGMENT _sum$ = -8 ; size = 4 _i$ = -4 ; size = 4 _count$ = 8 ; size = 4 ?addem@@YAHH@Z PROC ; addem ; Line 58 push ebp mov ebp, esp sub esp, 8 ; Line 60 mov DWORD PTR _sum$[ebp], 0 ; Line 61 mov DWORD PTR _i$[ebp], 0 jmp SHORT $LN3@addem $LN2@addem: mov eax, DWORD PTR _i$[ebp] add eax, 1 mov DWORD PTR _i$[ebp], eax $LN3@addem: mov ecx, DWORD PTR _i$[ebp] cmp ecx, DWORD PTR _count$[ebp] jg SHORT $LN1@addem ; Line 62 mov edx, DWORD PTR _i$[ebp] push edx push OFFSET $SG3923 call DWORD PTR __imp__printf add esp, 8 ; Line 63 call DWORD PTR __imp____iob_func add eax, 32 ; 00000020H push eax call DWORD PTR __imp__fflush add esp, 4 ; Line 64 mov eax, DWORD PTR _sum$[ebp] add eax, DWORD PTR _i$[ebp] mov DWORD PTR _sum$[ebp], eax ; Line 65 jmp SHORT $LN2@addem $LN1@addem: ; Line 66 mov ecx, DWORD PTR _sum$[ebp] push ecx push OFFSET $SG3924 call DWORD PTR __imp__printf add esp, 8 ; Line 67 call DWORD PTR __imp____iob_func add eax, 32 ; 00000020H push eax call DWORD PTR __imp__fflush add esp, 4 ; Line 68 xor eax, eax ; Line 69 mov esp, ebp pop ebp ret 0 ?addem@@YAHH@Z ENDP ; addem ; Function compile flags: /Odtp _j$ = -8 ; size = 4 _mul$ = -4 ; size = 4 _don$ = 8 ; size = 4 ?factoria@@YAHH@Z PROC ; factoria ; Line 72 push ebp mov ebp, esp sub esp, 8 ; Line 74 mov DWORD PTR _mul$[ebp], 1 ; Line 75 mov DWORD PTR _j$[ebp], 1 jmp SHORT $LN3@factoria $LN2@factoria: mov eax, DWORD PTR _j$[ebp] add eax, 1 mov DWORD PTR _j$[ebp], eax $LN3@factoria: mov ecx, DWORD PTR _j$[ebp] cmp ecx, DWORD PTR _don$[ebp] jg SHORT $LN1@factoria ; Line 76 mov edx, DWORD PTR _j$[ebp] push edx push OFFSET $SG3933 call DWORD PTR __imp__printf add esp, 8 ; Line 77 call DWORD PTR __imp____iob_func add eax, 32 ; 00000020H push eax call DWORD PTR __imp__fflush add esp, 4 ; Line 78 mov eax, DWORD PTR _mul$[ebp] imul eax, DWORD PTR _j$[ebp] mov DWORD PTR _mul$[ebp], eax ; Line 79 jmp SHORT $LN2@factoria $LN1@factoria: ; Line 80 mov ecx, DWORD PTR _mul$[ebp] push ecx push OFFSET $SG3934 call DWORD PTR __imp__printf add esp, 8 ; Line 81 call DWORD PTR __imp____iob_func add eax, 32 ; 00000020H push eax call DWORD PTR __imp__fflush add esp, 4 ; Line 82 xor eax, eax ; Line 83 mov esp, ebp pop ebp ret 0 ?factoria@@YAHH@Z ENDP ; factoria ; Function compile flags: /Odtp _result$ = -8 ; size = 4 _i$ = -4 ; size = 4 _list$ = 8 ; size = 4 ?AddThree@@YAHQAH@Z PROC ; AddThree ; Line 86 push ebp mov ebp, esp sub esp, 8 ; Line 88 mov DWORD PTR _result$[ebp], 0 ; Line 90 mov DWORD PTR _i$[ebp], 0 jmp SHORT $LN3@AddThree $LN2@AddThree: mov eax, DWORD PTR _i$[ebp] add eax, 1 mov DWORD PTR _i$[ebp], eax $LN3@AddThree: cmp DWORD PTR _i$[ebp], 3 jge SHORT $LN1@AddThree ; Line 92 mov ecx, DWORD PTR _i$[ebp] push ecx push OFFSET $SG3943 call DWORD PTR __imp__printf add esp, 8 ; Line 93 mov edx, DWORD PTR _i$[ebp] mov eax, DWORD PTR _list$[ebp] mov ecx, DWORD PTR _result$[ebp] add ecx, DWORD PTR [eax+edx*4] mov DWORD PTR _result$[ebp], ecx ; Line 94 jmp SHORT $LN2@AddThree $LN1@AddThree: ; Line 95 mov edx, DWORD PTR _result$[ebp] push edx push OFFSET $SG3944 call DWORD PTR __imp__printf add esp, 8 ; Line 96 xor eax, eax ; Line 97 mov esp, ebp pop ebp ret 0 ?AddThree@@YAHQAH@Z ENDP ; AddThree ; Function compile flags: /Odtp _max$ = -12 ; size = 4 _sum$ = -8 ; size = 4 _i$ = -4 ; size = 4 _listt$ = 8 ; size = 4 ?DataAdd@@YAHPAH@Z PROC ; DataAdd ; Line 100 push ebp mov ebp, esp sub esp, 12 ; 0000000cH ; Line 102 mov DWORD PTR _sum$[ebp], 0 mov eax, DWORD PTR _listt$[ebp] mov ecx, DWORD PTR [eax] mov DWORD PTR _max$[ebp], ecx ; Line 104 mov DWORD PTR _i$[ebp], 1 jmp SHORT $LN3@DataAdd $LN2@DataAdd: mov edx, DWORD PTR _i$[ebp] add edx, 1 mov DWORD PTR _i$[ebp], edx $LN3@DataAdd: mov eax, DWORD PTR _i$[ebp] cmp eax, DWORD PTR _max$[ebp] jge SHORT $LN1@DataAdd ; Line 106 mov ecx, DWORD PTR _i$[ebp] push ecx push OFFSET $SG3954 call DWORD PTR __imp__printf add esp, 8 ; Line 107 mov edx, DWORD PTR _i$[ebp] mov eax, DWORD PTR _listt$[ebp] mov ecx, DWORD PTR _sum$[ebp] add ecx, DWORD PTR [eax+edx*4] mov DWORD PTR _sum$[ebp], ecx ; Line 108 jmp SHORT $LN2@DataAdd $LN1@DataAdd: ; Line 109 mov edx, DWORD PTR _sum$[ebp] push edx push OFFSET $SG3955 call DWORD PTR __imp__printf add esp, 8 ; Line 110 xor eax, eax ; Line 111 mov esp, ebp pop ebp ret 0 ?DataAdd@@YAHPAH@Z ENDP ; DataAdd ; Function compile flags: /Odtp _str$ = 8 ; size = 4 ?StrPrint@@YAHPAD@Z PROC ; StrPrint ; Line 114 push ebp mov ebp, esp ; Line 115 mov eax, DWORD PTR _str$[ebp] push eax push OFFSET $SG3959 call DWORD PTR __imp__printf add esp, 8 ; Line 116 mov eax, 1 ; Line 117 pop ebp ret 0 ?StrPrint@@YAHPAD@Z ENDP ; StrPrint _TEXT ENDS END
كما تركت الامر هناك ... هنا ايضا .. تعقد حلقة نقاشية تعليمية ...
البرنامج انا كتبته بغرض تعليمي و ليس غرض احترافي او تعجيزي
اين من يريد التعلم
؟؟؟؟؟
ان شاء الله لي عودة اذا كان هناك زبائن حقيقيين