استفاده از عملگر DUP در زبان اسمبلی Assembly

  • سه شنبه ۲۴ آذر ۱۳۹۴
  • بازدید ۲,۵۲۷ نفر

تصویر operand-dup-assembly-12659 استفاده از عملگر DUP در زبان اسمبلی Assembly

استفاده از عملگر DUP در زبان اسمبلی Assembly

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

با استفاده از عمگر DUP هنگام تعریف داده با دستورات DB، DW و DD می توانیم چندین بایت یا چندین کلمه از حافظه را که مورد نیازمان است برای استفاده انتخاب کنیم. مثلا هنگام تعریف ارایه می توانیم از عملگر DUP در بخش سگمنت داده استفاده کنیم و تعداد خانه های ارایه را مشخص کنیم. برای درک بهتر عملگر DUP در زبان اسمبلی به مثال زیر توجه کنید.

توضیحات بیشتر استفاده از عملگر DUP در زبان اسمبلی Assembly را در ادامه مطلب می توانید مشاهده کنید.

p1 dw 40 dup(0)

p2 db 30 dup(“*”)

p3 db 25 dup(‘* ‘),’*’

در کد بالا دستور خط اول 40 کلمه از حافظه را به خود اختصاص می دهد که محتویات هر کدام از آن ها شامل عدد 0 است. دستور خط دوم 30 بایت از حافظه را اختصاص می دهد که محتویات هر بایت برابر با علامت * خواهد شد. دستور خط سوم 25 بایت از حافظه را تعیین می کند که شامل 26 تا علامت ستاره است و هر ستاره با فاصله از هم جدا شده اند.

p4 db 20 dup(7 dup(‘*’),3 dup(‘+’),9 dup(‘-‘))

در دستور بالا 57 ستاره،3 علامت جمع و سپس 9 علامت منها را تعریف می شود و این کار را 20 بار تکرار می نماید.

p5 dw 200

p6 dw p1 * 10

p7 dw 10 * 8 * 7

p8 dw p7 + 5

در دستورات DB، DW و DD نیز می توانیم از عبارات محاسباتی استفاده کنیم. شاید کاربرد عبارت چندان جالب به نظر نرسد ولی ممکن است گاهی برای خوانایی برنامه خوب باشد. در مثال بالا چند نمونه کد برای استفاده از عبارات محاسباتی در دستورات تعریف داده نوشته شده است.

نحوه تعریف ارایه یک بعدی در زبان اسمبلی:

p9 db 10 dup(?)

در مثال بالا متغیر p9 به صورت ارایه یک بعدی که دارای 10 خانه 1 بایتی است تعریف شده است که عناصر ارایه نامعلوم می باشد و p9+0 به عنصر اول ارایه و p9+1 به عنصر دوم و p9+2 به عنصر سوم و تا آخر به این طریق می توان به تمام عناصر ارایه یک بعدی دسترسی داشته باشیم.

نحوه تعریف ماتریس یا ارایه دو بعدی در زبان اسمبلی:

p10 db 3 dup( 3 dup(0))

در مثال بالا یک ماتریس یا همان ارایه دوبعدی تعریف شده است که دارای 3 سطر و 3 ستون می باشد و تمام عنصرهای ارایه با عدد صفر پر شده است. ذکر این نکته مهم است که ماتریس ها یا ارایه های دو بعدی در حافظه سیستم ها یا به صورتی سطری و یا به صورت ستونی ذخیره می شوند و برای بدست آوردن سطر و ستون این ارایه باید از فرمولی استفاده کنید. در زیر زیر برنامه مربوط به محاسبه و بدست آوردن سطر و ستون ارایه را قرار دادیم که می توانید در برنامه های خود از این زیر برنامه استفاده کنید.

داده های تعریف شده در سگمنت داده

base       db      3    ;2         ;lenght  of n element
two        db      1    ;1         ;lenght of elemnet
row db 0
col db 0
address dw 0

زیر برنامه تعریف شده در سگمنت کد

compute_addres  proc
               mov       address,0
               mov       di,0                              ;
               mov       ah, 0                   ;
               mov       al, row                 ; ax=row
               dec       al                      ; I=I-1
               mul       base                    ; (i-1)*20
               mov       di, ax                  ;start  address of  row
               mov       al, col                 ; ax=col
               mov       ah, 00                  
               dec       ax                      ;j=j-1
               mul       two                     ;(j-1)*2
               add       di, ax                  ;di=(i-1)*20+(i-1)*2
               mov       address,di           
               ret
compute_addres endp

با استفاده از ماکروی زیر می توانید از سطر و ستون مورد نظر مقداری خوانده و در متغیری قرار دهد.

setvaluecost macro i1,j1,value
  pushreg
  mov cl,i1
  mov ch,j1
  mov row,cl
  mov col,ch
  pushreg
  call compute_addres
  popreg
  mov di,address
  mov cost[di],value
  popreg
endm

 

مطالب مرتبط
ثبت نظر
ریفریش کنید!
نظرات کاربران (۱ مورد)
  1. تصویر آواتار کاربر 0
    وحید شنبه , 31 تیر

    بسیار خوب و عالی بود . ممنون . زنده باد اسمبلی