View Full Version : بررسی چند قطعه کد
faridtabasi
سه شنبه 16 آبان 1391, 23:36 عصر
درود بر اساتید
برنامه ای که عدد a را به توان b برساند و نتیجه را در Ax قرار دهد. آیا درست نوشتم؟
mov Al, a
mov Bl, 1
mov Cx, b
P:
mul bl
mov bx,ax
loop P
mov ax,bx
برنامه بعدی اینه که مجموع 1 به توان 2، 2 به توان 2، 3 به توان 2، تا... n به توان 2 را حساب کند و در ax قرار دهد.
mov Cx, n
P:
mov Al, Cl
mul Al
add Dx, Ax
loop P
mov Ax, Dx
مورد بعدی که توش مشکل دارم اینه:
برنامه ای که مجموع n به توان1، n به توان 2، n به توان 3 تا... n به توان n را حساب کند.
مشکلی دارم اینه که اولا باید از دو تا حلقه استفاده بشه درسته؟
و آیا در اسمبلی میشه از حلقه های تو در تو استفاده کرد؟ اگر بله، ما یه شمارنده بیشتر نداریم به نام cx. اونوقت چطور می تونم دوتا حلقه با مقادیر متفاوت داشته باشم؟
بسیار متشکرم
faridtabasi
چهارشنبه 17 آبان 1391, 16:46 عصر
دوستان کسی نبود؟
mohsen4707
جمعه 19 آبان 1391, 20:57 عصر
سلام دوست عزيز .
به مقداري كه به واسطه b و n در cx ريخته مي شه حلقه هاي p اجرا مي شن و سپس نتيجه در ax ذخيره مي شه
Delphi Coder
شنبه 20 آبان 1391, 05:28 صبح
درود بر اساتید
برنامه ای که عدد a را به توان b برساند و نتیجه را در Ax قرار دهد. آیا درست نوشتم؟
mov Al, a
mov Bl, 1
mov Cx, b
P:
mul bl
mov bx,ax
loop P
mov ax,bx
برنامه بعدی اینه که مجموع 1 به توان 2، 2 به توان 2، 3 به توان 2، تا... n به توان 2 را حساب کند و در ax قرار دهد.
mov Cx, n
P:
mov Al, Cl
mul Al
add Dx, Ax
loop P
mov Ax, Dx
مورد بعدی که توش مشکل دارم اینه:
برنامه ای که مجموع n به توان1، n به توان 2، n به توان 3 تا... n به توان n را حساب کند.
مشکلی دارم اینه که اولا باید از دو تا حلقه استفاده بشه درسته؟
و آیا در اسمبلی میشه از حلقه های تو در تو استفاده کرد؟ اگر بله، ما یه شمارنده بیشتر نداریم به نام cx. اونوقت چطور می تونم دوتا حلقه با مقادیر متفاوت داشته باشم؟
بسیار متشکرماولی اشتباهه وقتی میگید a به توان b برسه یعنی a به تعداد b بار در خودش ضرب بشه در حالی که شما در کد خود نتایج هر ضرب رو در هر گردش حلقه به توان 2 میرسونید.
کد باید یه چیز این تیپی باشه:
mov Al, 1
mov Bl, a
mov Cx, b
P:
mul bl
loop P
در پایان هم نتیجه رو تو ax داریم.
کد دوم هم به نظر مشکلی نداره.
برای استفاده از حلقه تو در تو cx حلقه بیرونی رو قبل از ورود به حلقه درونی در stack بزارید و بعد اینکه حلقه درونی تموم شد از stack بردارید.
اینجوری:
mov cx,n
lp1:
push cx
.....Do Somethings......
mov cx,m
lp2:
.....Do Somethings......
loop lp2
.....Do Somethings......
pop cx
loop lp1
hamidreza_j
سه شنبه 23 آبان 1391, 12:57 عصر
سلام
توی قطعه کد روبرو من درباره 4 دستور word ptr در آخر قطعه کد به تحلیل قطعی نرسیدم.
اول اینکه منظور دقیق این دستور چیه (با توجه به حافظه)؟
دوم اینکه 2+ واحدش چیه ؟ایا به اندازه تعریف اولیه y جابجا میشه یا بر اساس low byte & high byte یا ... ؟
من هنوز هنگام برنامه نویسی توی منطق حافظه مشکل دارم . اگه تصویری توضیح بدین که عالیه.
قبلا هم تشکر می کنم
x dd 0
y dd 0
pusha
pushf
xor eax,eax
xor ebx,ebx
xor ecx,ecx
xor edx,edx
mov ax,word ptr y+0
mov bx,word ptr y+2
sub word ptr x+0,ax
sbb word ptr x+2,bx
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.