استفاده از عملگر 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
بسیار خوب و عالی بود . ممنون . زنده باد اسمبلی