ParsX.com
پذیرش پروژه از دانشجویی ... تا سازمانی 09376225339
 
   ProfileProfile   Log in to check your private messagesLog in to check your private messages  |  FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups Log inLog in   RegisterRegister 

دستورات rol,ror,rcl,rcr

 
Post new topic   Reply to topic    ParsX.com Forum Index -> ساختمان و زبان ماشين
View previous topic :: View next topic  
Author Message
arash
مدير بخش سي
مدير بخش سي


Joined: 27 Nov 2004
Posts: 1232
Location: www.parsx.com

PostPosted: Sat Dec 11, 2004 10:19 pm    Post subject: دستورات rol,ror,rcl,rcr Reply with quote

مثال : برنامه ای بنویسید که محتویات خانه n از حافظه را بر 8 تقسیم وخارج قسمت را در خانه q و باقی مانده را در خانه r از حافظه قرار دهد . در این برنامه نمی توان از دستور div استفاده کرد ؟( n,q,r دو بایتی هستند . در این برنامه نه جیزی از صفحه کلید گرفته شده نه جیزی بروی صفحه نمایش چاپ می شود)
این برنامه را به دوصورت میتوان نوشت . اولین روش به شکل زیر می باشد :
. model small
. stack 64
. data
       n dw ?
       q dw ?
       r dw ?
. code
    start : mov  ax,@data
               mov ds,ax
               mov ax,n
               sar ax,3
               mov q,ax
               sal ax,3
               mov r,n
               sub r,ax
               mov ah,4ch
               INT 21h
End start


دومین روش به شکل زیر می باشد :
. model small
. stack 64
. data
       n dw ?
       q dw ?
       r dw ?
. code
    start : mov  ax,@data
               mov ds,ax
               mov ax,n
               sar ax,3
               mov q,ax
               mov ax,n
               and ax,7
               mov r,ax
               mov ah,4ch
               INT 21h
End start

دستور چرخش به چپ: ( Rotate left )
دستور چرخش به چپ که به صورت Rol نوشته می شود به این صورت عمل میکند که اول کل عبارت را یک شیفت به چپ داده سپس عددی که از سمت چپ خارج می شود دوباره از سمت راست وارد می کند و البته یک کپی از این عدد را در cf ( کری فلگ ) قرار می دهد .

دستور چرخش به راست: ( Rotate right )
دستور چرخش به راست که به صورت Ror نوشته می شود به این صورت عمل میکند که اول کل عبارت را یک شیفت به راست داده سپس عددی که از سمت راست خارج می شود دوباره از سمت چپ وارد می کند و البته یک کپی از این عدد را در cf ( کری فلگ ) قرار می دهد .

دستور Rcl :
در این دستور اول عددی که در cf وجود دارد از سمت چپ وارد می کند و عدد را شیفت به چپ می دهد سپس عددی را که از سمت چپ خارج می شود را درون cf قرار می دهد .

دستور Rcr :
در این دستور اول عددی که در cf وجود دارد از سمت راست وارد می کند و عدد را شیفت به راست می دهد سپس عددی را که از سمت راست خارج می شود را درون cf قرار می دهد .

مثال : برنامه ای بنویسید که عددی را که در bx وجود دارد را بدون استفاده از ئستور div در مبنای 2 جاپ کند . پس از پایان نمایش ، bx باید همان مقدار اولیه خود را داشته باشد ؟
.model small
. stack 64
. data
         n dw 1326
. code
  start : mov ax,@data
             mov ds,ax
             mov bx,n
             mov  cx,16
             rol bx,1
             jc L1
             mov ah,2
             mov dl.'0'
                  INT 21h
             Jmp L3
             L2:mov ah,2
             Mov dl,'1'
                  INT 21h
             L3:Loop L1
             Mov ah,4ch
                  INT 21h
End start

مثال : پروسیجری بنویسید که یک عدد چهار بایتی که دو بایتی پر ارزش آن در dx و دو بایت کم ارزش آن در ax است یکی به سمت چپ شیفت دهد ؟
4chl proc
             shl ax,1
             Rcl dx,1
Ret
Endp

اگر بخواهیم عمل شیفت به چپ را بیش از یک بار اجرا کرد کافیست دستور زیررا بنویسیم :
4chl proc
             mov cx,4
             L1:shl ax,1
             Rcl dx,1
             Loop L1
Ret
Endp
Back to top
Display posts from previous:   
Post new topic   Reply to topic    ParsX.com Forum Index -> ساختمان و زبان ماشين All times are GMT + 3.5 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum