PDA

View Full Version : مبتدی: فاکتوریل



r_s1389@yahoo.com
سه شنبه 02 اسفند 1390, 21:42 عصر
سلام به همه دوستان

فوری فوری فوری

mov ax,0
mov al,x
mov cl,al
mov al,0
mov al,1
l1:mul cx
mov ch,0
jcxz p1
loop l1:
p1:

r_s1389@yahoo.com
سه شنبه 02 اسفند 1390, 21:44 عصر
این تکه کد اسمبلی تا 5 فاکتوریل را محاسبه میکنه
لطف کنید این تکه کد را واسه ما ترمیم کنید

xman_1365_x
دوشنبه 08 اسفند 1390, 00:10 صبح
لطف کنید این تکه کد را واسه ما ترمیم کنید
منظورتون از ترمیم چیه ؟
ضمنا این برنامه تا 8 فاکتوریل رو درست محاسبه میکنه که بیشتر بخواین به این روش نمیشه

r_s1389@yahoo.com
دوشنبه 08 اسفند 1390, 22:23 عصر
میشه یکم کمکم کنید و سورس برنامه فاکتوریل واسه دانلود بگذارید

xman_1365_x
سه شنبه 09 اسفند 1390, 03:11 صبح
mEnter macro
mov dl,13
mov ah,2
int 21h
mov dl,10
int 21h
endm

datasg segment
pkey db "press any key...$"
num db 6 dup(?)
x db ?
ends

stacksg segment
dw 128 dup(0)
ends

codesg segment
assume cs:codesg, ds:datasg, es:datasg, ss:stacksg
start:
main proc far
mov ax, datasg
mov ds, ax
mov es, ax


lea bx,num
call getnum
call asctobin
mov x,al

xor cx,cx
mov ax,0
mov al,x
mov cl,al
mov al,0
mov al,1
l1:mul cx
mov ch,0
jcxz p1
loop l1:
p1:



lea bx,num
call bintoasc

mEnter

lea dx,num
mov ah,9
int 21h

mEnter

lea dx, pkey
mov ah, 9
int 21h ; output string at ds:dx

; wait for any key....
mov ah, 1
int 21h

mov ax, 4c00h ; exit to operating system.
int 21h

main endp

asctobin proc near

mov si,10
mov ax,0
next: mul si
mov dl,[bx]
inc bx
sub dl,48
add ax,dx
cmp byte ptr[bx],13
jne next

ret
asctobin endp


bintoasc proc near

mov si,10
xor cx,cx
next2: xor dx,dx
div si
push dx
inc cx
or ax,ax
jnz next2
l_1: pop dx
add dl,48
mov [bx],dl
inc bx
loop l_1


mov byte ptr[bx],'$'

ret
bintoasc endp


getnum proc near
push ax
push bx
push dx
again: mov ah,8
int 21h
cmp al,13
je finish
cmp al,'0'
jl again
cmp al,'9'
jg again
mov [bx],al
inc bx
mov dl,al
mov ah,2
int 21h
jmp again
finish:mov [bx],al
pop dx
pop bx
pop ax
ret
getnum endp

ends
end start ; set entry point and stop the assembler.


موفق باشی

r_s1389@yahoo.com
شنبه 13 اسفند 1390, 22:34 عصر
تشکر فراوان را از شما دارم دوست عزیز

r_s1389@yahoo.com
شنبه 13 اسفند 1390, 22:56 عصر
میشه اون تبدیل مبنا را را یکم توضیح دهید
تشکر

xman_1365_x
دوشنبه 15 اسفند 1390, 13:41 عصر
میشه اون تبدیل مبنا را را یکم توضیح دهید
تشکر
قبلا بارها توضیح داده شده در تالار(فروم) جستجو کنید
محاسبات:برای محاسبات ما نیاز داریم بر روی اعداد عملیات را انجام دهیم بدلیل سرعت بیشتر و استفاده بهینه تر حافظه(بر روی کد اسکی هم میشود محاسبات را انجام داد اما نیاز به حافظه بیشتر و سرعت پایین تر دارد)
نمایش:برای نمایش روی نمایشگر و چاپگر به صورت کد های اسکی میباشد

حال برای راحتی دو پروسیجر برای این کار نوشته شده که این تبدیل ها را انجام دهیم

پروسیجر bintoasc عدد رو به صورت متوالی بر تقسیم میکنه تا برابر با صفر بشه با این کار ما اعداد رو جدا کردیم کافیه با 48 جمع کنیم هر رقم رو تا به صورت اسکی در بیاد تا بتوان در چاپگر یا مانیتور نمایش داد

پروسیجر asctobin هر کاراکتر رو از 48 کم میکنیم تا به عدد تبدیل بشه و بعد به صورت ضرب های متوالی بر 10 ادامه میدهیم با شرط پایان 13 اسکی که همان کد اینتر می باشد که هنگام دادن ورودی در بافر ذخیره شده که انتهای ورودی را مشخص میکند


موفق باشید