PDA

View Full Version : مشکلی در اجرا برنامه



ice cream
دوشنبه 28 آذر 1390, 13:30 عصر
سلام
برنامه فاکتوریل عدد 6 را نوشتم اما موقع اجرا با مشکل زیر برخورد کردم میشه راهنماییم کنید
http://s2.picofile.com/file/7217878709/Capture.png
و کد برنامه ای که نوشتم به صورت زیر است :
PAGE 110,100
TITLE 'Factorial 6.ASM' Program compute factorial 6 = 6*5*4*3*2*1 =720
;--------------------------------------------------------------------------------------------------------
; 1-Define Stack Segment
; --------------------------------
S_SEG SEGMENT PARA STACK 'STACK'
DW 32H DUP(0) ;32H word for stack
S_SEG ENDS ;End of segment
;--------------------------------------------------------------------------------------------------------
; 2-Define Data Segment
; --------------------------------
D_SEG SEGMENT PARA PUBLIC 'DATA'
CONTER DB 1 ;conter loop
FACT DB 0 ;factorial 6 = 720
D_SEG ENDS ;end of segment
;---------------------------------------------------------------------------------------------------------
; 3-Define Code Segment
; --------------------------------
C_SEG SEGMENT PARA PUBLIC 'CODE'
ASSUME SS:S_SEG , DS:D_SEG , CS:C_SEG
MAIN PROC
PUSH DS
MOV AX,0
PUSH AX
MOV AX , D_SEG
MOV DS , AX
; main program
;
; --------------------
MOV SI,0000H ;Initialize SI to 0000H

;compute factorial 6
;--------------------------------------------------------------------------------------
MOV AL,1
MOV BH ,2
MOV CX , 6
L1:
MUL BH
INC BH
LOOP L1

;--------------------------------------------------------------------------------------

MOV BX , 10
MOV SI , 6
NX:
CMP AX , 10
JL EZ
MOV DX , 0
DIV BX
ADD DL , 30H
MOV FACT[SI] , DL
DEC SI
JMP NX
EZ:
ADD AL , 30H
MOV FACT[SI] , AL



MOV AH, 40
MOV BX,1
LEA DX,FACT
MOV CX , 6
INT 21H

MAIN ENDP
RET
C_SEG ENDS
END MAIN

xman_1365_x
دوشنبه 28 آذر 1390, 15:06 عصر
فکر میکنم میخواستین از تابع 40h برای نوشتن در فایل استفاده کنید
با این حال برنامه رو اصلاح کردم هم نمایش میده و هم با تابع 40h در فایل قرار میده
اشتباهاتی هم که داشتین تصحیح کردم


PAGE 110,100
TITLE 'Factorial 6.ASM' Program compute factorial 6 = 6*5*4*3*2*1 =720
;--------------------------------------------------------------------------------------------------------
; 1-Define Stack Segment
; --------------------------------
S_SEG SEGMENT PARA STACK 'STACK'
DW 32H DUP(0) ;32H word for stack
S_SEG ENDS ;End of segment
;--------------------------------------------------------------------------------------------------------
; 2-Define Data Segment
; --------------------------------
D_SEG SEGMENT PARA PUBLIC 'DATA'
CONTER DB 1 ;conter loop
FACT DB 5 dup(' '),'$' ;factorial 6 = 720
pathnam db "fact.txt",0
handle dw 0
pkey db 13,10,"press any key...$"
D_SEG ENDS ;end of segment
;---------------------------------------------------------------------------------------------------------
; 3-Define Code Segment
; --------------------------------
C_SEG SEGMENT PARA PUBLIC 'CODE'
ASSUME SS:S_SEG , DS:D_SEG , CS:C_SEG
MAIN PROC

MOV AX , D_SEG
MOV DS , AX
; main program
;
; --------------------
MOV SI,0000H ;Initialize SI to 0000H
xor ax,ax
;compute factorial 6
;--------------------------------------------------------------------------------------
MOV AL,1
MOV BH ,2
MOV CX , 6-1
L1:
MUL BH
INC BH
LOOP L1

;--------------------------------------------------------------------------------------

MOV BX , 10
MOV SI , 4 ;maximum 65535
NX:
CMP AX , 10
JL EZ
MOV DX , 0
DIV BX
ADD DL , 30H
MOV FACT[SI] , DL
DEC SI
JMP NX
EZ:
ADD AL , 30H
MOV FACT[SI] , AL



mov ah, 3ch
mov cx, 0
mov dx, offset pathnam
mov ah, 3ch
int 21h ; create file...
mov handle, ax

mov ah,3dh
mov al,1
lea dx,pathnam
int 21h ; open file for write
mov handle,ax

MOV AH,40h
MOV BX,handle
LEA DX,FACT
MOV CX , 5
INT 21H ;Write To File or Device Using Handle

mov bx, handle
mov ah, 3eh
int 21h ; close file...


;show in display
mov ah,9
lea dx,FACT
int 21h

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

C_SEG ENDS
END MAIN

موفق باشی

ice cream
دوشنبه 28 آذر 1390, 19:38 عصر
ممنون دوست عزیز خیلی لطف کردید یک هفته است که فکرمو مشغول کرده بود ممنون