1. مهمان گرامی، جهت ارسال پست، دانلود و سایر امکانات ویژه کاربران عضو، ثبت نام کنید.
    بستن اطلاعیه

سوال ( توضیح hello world )

شروع موضوع توسط search2 ‏4/12/15 در انجمن Assembly

  1. عضو جدید

    تاریخ عضویت:
    ‏4/12/15
    ارسال ها:
    1
    تشکر شده:
    2
    امتیاز دستاورد:
    3
    جنسیت:
    مرد
    سلام به همگی، خسته نباشید . . .
    یه سوال داشتم و ممنون میشم یه نفر راهنماییم کنه . . .
    در زبان اسمبلی توی برنامه ی emu8086 وقتی برنامه رو باز میکنی در قسمت code examples مثال hello world رو توضیحش رو میخواستم ! ( یعنی اینکه هر خط چه کاری انجام میده و توضیحش چیه؟ )
    ( میخوام سر کلاس توضیح بدم و یه جوری باشه که استاد قبول کنه )
    موفق باشید . . .
     
    *Mitra* و وضعیت سفید از این پست تشکر کرده اند.
  2. غــریبه و تـنهــا

    تاریخ عضویت:
    ‏27/9/12
    ارسال ها:
    1,467
    تشکر شده:
    3,578
    امتیاز دستاورد:
    113
    جنسیت:
    مرد
    یاالله​
    سلام
    میخوام فقط به یِ چیز اشاره کنم:
    در کد پایین که همونه، نوشته هایِ بعدِ نشانهِ ";" تا پایان اون خط ،همش توضیحِ راجب کد نوشته شده،و تاثیری روو اجرای برنامه ایجاد شده نداره. یعنی: وقتی متوجه بشیم که چه چیز توضیح نوشته برای ما در اون قسمت کد.میشه از ماجرا سردرآورد.

    کد:
    name "hi-world"
    
    ; this example prints out  "hello world!"
    ; by writing directly to video memory.
    ; in vga memory: first byte is ascii character, byte that follows is character attribute.
    ; if you change the second byte, you can change the color of
    ; the character even after it is printed.
    ; character attribute is 8 bit value,
    ; high 4 bits set background color and low 4 bits set foreground color.
    
    ; hex    bin        color
    ;
    ; 0      0000      black
    ; 1      0001      blue
    ; 2      0010      green
    ; 3      0011      cyan
    ; 4      0100      red
    ; 5      0101      magenta
    ; 6      0110      brown
    ; 7      0111      light gray
    ; 8      1000      dark gray
    ; 9      1001      light blue
    ; a      1010      light green
    ; b      1011      light cyan
    ; c      1100      light red
    ; d      1101      light magenta
    ; e      1110      yellow
    ; f      1111      white
    
    
    org 100h
    
    ; set video mode
    mov ax, 3     ; text mode 80x25, 16 colors, 8 pages (ah=0, al=3)
    int 10h       ; do it!
    
    ; cancel blinking and enable all 16 colors:
    mov ax, 1003h
    mov bx, 0
    int 10h
    
    
    ; set segment register:
    mov     ax, 0b800h
    mov     ds, ax
    
    ; print "hello world"
    ; first byte is ascii code, second byte is color code.
    
    mov [02h], 'H'
    mov [04h], 'e'
    mov [06h], 'l'
    mov [08h], 'l'
    mov [0ah], 'o'
    mov [0ch], ','
    mov [0eh], 'W'
    mov [10h], 'o'
    mov [12h], 'r'
    mov [14h], 'l'
    mov [16h], 'd'
    mov [18h], '!'
    
    
    
    
    ; color all characters:
    mov cx, 15  ; number of characters.
    mov di, 03h ; start from byte after 'h'
    
    c:  mov [di], 11101100b   ; light red(1100) on yellow(1110)
        add di, 2 ; skip over next ascii code in vga memory.
        loop c
    
    ; wait for any key press:
    mov ah, 0
    int 16h
    
    ret
    

    مثلنی یِ قسمت کد ر توضیح مینویسم:

    mov cx, 12
    mov di, 03h
    c: mov [di], 11101100b
    add di, 2
    loop c​
    اگه موقعِ اجراءِ شبیه سازیِ کد توجه کرده باشی شما،بعدِ نوشته شدنِ اون نوشتهِ مورد نظر،بعدش، نوشته ،حروف به حروف رنگ پشت زمینش زرد و خود حروف قرمز رنگ میشن. این کد برای اجرای این کارِ.
    با ایجاد یه حلقه ،که در خط اولِ کد، تعداد تکرارِ حلقه مشخص میشه (12 ، بخاطر تعداد حروف) و خط دوم نقطه شروع،خط سه برا رنگ امیزی (اغاز اجرای حلقه) خط بعدیشم برای اینکه حرف بعدی شناسایی بشه,2 بایت به di اضاف کرده احتمالاً،خط بعدیش هم برای بازگشت به ابتدای حلقه میباشد،یعنی دستور میگِ برو به : c ،این حلقه تا 12بار معین شده تکرار میشه و سپس از حلقه خارج میشه و میره به خط بعدی..

    امیدوارم مفید باشِ،هرچند چیز خاصی ننوشتم،فقط یکمی یادآوری بود.

    درود.
     
    آخرین ویرایش: ‏5/12/15
    *Mitra* و سایه های بیداری از این پست تشکر کرده اند.