شکستن شاخِــ غـولِ assembly !

شکستن شاخِــ غـولِ assembly !

سلام .

روزی بود و روزگاری ... در سرزمین کامپیوتر ها  غولی شکست ناپذیر زندگی میکرد ، دسترسی او بر کامپیوتر ها بی‌انتها  هییچ برنامه نویسی  قادر به رام کردن او نبود ..
این غول اَسِمبِلی نام داشت.

اسمبلی سرعت ، دقت و قدرت بسیار زیادی داشت ، همین‌بود که کسی نمیتوانست در مقابل او بایستد ... .
او از نسل Plankalkül و زبان (الگوریتم نویسیِ ) ماشین بود  ، از  خانواده ای که حکومت بر کامپیوتر ها برای آنها موروثی بود
سال ها گذشت ؛ طی این سال ها افراد زیادی برای شکست دادن این غول تلاش کردند .. اما هیچ یک از آنها موفق نشد ..

تا اینکه!

تا اینکه روزی ... وقتی  CPU (خورشید) شروع به سرد شدن کرده بود ( شروع به غروب کردن کرده بود :)  )  غریبه ای با روی پوشیده از دروازه های سرزمین کامپیوتر ها وارد شد!

با گام های شمرده به طرف اسمبلی که در مرکز این سرزمین بود ، رفت و رفت و رفت تا به اسمبلی رسید .

سرش را بالا گرفت و با نگاهی تیز و بُرَنده  اسمبلی را نگاه کرد!
در جواب ، اسمبلی هم به او نگاه ســــــرد و تحقیر آمیزی انداخت ..

اسمبلی که قبلا تجربه ی شکست دادن زبان ها را داشت ، به غریبه ( که خیلی خیلی در برابر او کوچک بود ) رو کرد و شروع کرد به گفتن از توانایی و سرعت و قدرتش .

غریبه چهره اش را آشکار کرد و فریاد زد : « من فرترن (fortran)  هستم! و دوران تو به سر آمده! » 

میان زبان های برنامه نویسی  برای زورآزمایی و مبارزه ، رسم بود تا نام خود را خروجی بدهند و هر که با تعداد خط کد کمتر و کد های واضح تری این کار را کرده بود ، برنده‌ی میدان نبرد بود ...

پس اسمبلی  و فرترن شروع کردند به زورآزمایی .

پس از چند دقیقه اسمبلی و فرترن هر دو دست از کار کشیدند .

نتیجه ی کار فرترن :

program hello
  ! This is a comment line; it is ignored by the compiler
  print *, 'Hello, World!'
end program hello

و اسمبلی :

    global _main
    extern  _GetStdHandle@4
    extern  _WriteFile@20
    extern  _ExitProcess@4

    section .text
_main:
    ; DWORD  bytes;    
    mov     ebp, esp
    sub     esp, 4

    ; hStdOut = GetstdHandle( STD_OUTPUT_HANDLE)
    push    -11
    call    _GetStdHandle@4
    mov     ebx, eax    

    ; WriteFile( hstdOut, message, length(message), &bytes, 0);
    push    0
    lea     eax, [ebp-4]
    push    eax
    push    (message_end - message)
    push    message
    push    ebx
    call    _WriteFile@20

    ; ExitProcess(0)
    push    0
    call    _ExitProcess@4

    ; never here
    hlt
message:
    db      'Hello, World', 10
message_end:

ثانیه‌هایی اسمبلی به کد ها نگریست ... سپس اشک ریزان سرزمین را ترک کرد ...

اما قول داد که دست از سر آنها برنمیدارد و روزی می رسد که دوباره باز خواهد گشت گفت  که این سرزمین هنوز برای نوشتن سیستم عامل به او نیاز دارد ...

 

این بود که فرترن ، غول عظیم‌الجثه‌‌ی زبان ها را شکست داد و سال ها تمام زبان ها باهم در خوبی و خوشی زندگی کردند!

از بهترین نوشته‌های کاربران سکان آکادمی در سکان پلاس


online-support-icon