arash مدير بخش سي
Joined: 27 Nov 2004 Posts: 1232 Location: www.parsx.com
|
Posted: Sat Dec 11, 2004 10:19 pm Post subject: دستورات rol,ror,rcl,rcr |
|
|
مثال : برنامه ای بنویسید که محتویات خانه 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 |
|
|