Voortex » 29 дек 2008, 07:35
Все, ребята, откат...Я показал преподавателю работу, какая есть, и он мне засчитал ее на отлично, оказывается достаточно было просто чтоб смогла вычислить 1000, а я уж переволновался, что полностью оформить надо....
вот ниже код для будущих студентов, если кому-то когда-нибудь понадобиться вычислить факториал 1000!
model tiny
.386
masm
.code
assume cs:@code, ds:@code, ss:@code
org 100h
begin:
jmp @start
Num1 db 2599 dup (0), 1
Num2 db 2600 dup (0)
NFact dw 1000 ; // N! you want to calc
fName db 'Result.txt',0 ;// Output file
hFile dw 0 ; // File handle
;//========================= Addition
;// Input:
;// SI - First number
;// DI - Second number
;//
;// Output:
;// SI - Result
Addition proc near
pusha
mov cx, 2599
add di, cx
add si, cx
@add_1:
mov al, [si]
add al, [di]
daa
add al, ah
daa
mov ah, al
shr ah, 4
and al,0Fh
mov [si], al
dec si
dec di
dec cx
jnz @add_1
popa
ret
Addition endp
;//================= Main code
@start:
push cs
pop ds
push ds
pop es
mov ah, 3Ch ; // Create file
xor cx, cx
lea dx, Fname
int 21h
mov hFile, ax
mov bx, 2
@fact:
lea si, Num1
lea di, Num2
cld
mov cx, 1300
rep movsw ; // Num2 = Num1
lea si, Num1
lea di, Num2
mov cx, bx
dec cx
@fact1: ; // (Num1 = Num1 + Num2) * BX
call Addition
loop @fact1
inc bx
cmp bx, NFact
jle @fact
lea si, Num1 ; // Convert Num1 to ASCII
mov cx, 2600
@toascii:
add byte ptr [si], '0'
inc si
loop @toascii
lea si, Num1 ; // Removes forward zeroes
mov cx, 2600
xor di, di
@k1:
cmp byte ptr [si], '0'
jnz @k2
inc di
inc si
loop @k1
@k2:
mov ah, 40h ; // Write to file
mov bx, hFile
mov cx, 2600
sub cx, di
mov dx, si
int 21h
mov ax, 4C00h
int 21h
end begin
Все, ребята, откат...Я показал преподавателю работу, какая есть, и он мне засчитал ее на отлично, оказывается достаточно было просто чтоб смогла вычислить 1000, а я уж переволновался, что полностью оформить надо....
вот ниже код для будущих студентов, если кому-то когда-нибудь понадобиться вычислить факториал 1000!
[quote]
model tiny
.386
masm
.code
assume cs:@code, ds:@code, ss:@code
org 100h
begin:
jmp @start
Num1 db 2599 dup (0), 1
Num2 db 2600 dup (0)
NFact dw 1000 ; // N! you want to calc
fName db 'Result.txt',0 ;// Output file
hFile dw 0 ; // File handle
;//========================= Addition
;// Input:
;// SI - First number
;// DI - Second number
;//
;// Output:
;// SI - Result
Addition proc near
pusha
mov cx, 2599
add di, cx
add si, cx
@add_1:
mov al, [si]
add al, [di]
daa
add al, ah
daa
mov ah, al
shr ah, 4
and al,0Fh
mov [si], al
dec si
dec di
dec cx
jnz @add_1
popa
ret
Addition endp
;//================= Main code
@start:
push cs
pop ds
push ds
pop es
mov ah, 3Ch ; // Create file
xor cx, cx
lea dx, Fname
int 21h
mov hFile, ax
mov bx, 2
@fact:
lea si, Num1
lea di, Num2
cld
mov cx, 1300
rep movsw ; // Num2 = Num1
lea si, Num1
lea di, Num2
mov cx, bx
dec cx
@fact1: ; // (Num1 = Num1 + Num2) * BX
call Addition
loop @fact1
inc bx
cmp bx, NFact
jle @fact
lea si, Num1 ; // Convert Num1 to ASCII
mov cx, 2600
@toascii:
add byte ptr [si], '0'
inc si
loop @toascii
lea si, Num1 ; // Removes forward zeroes
mov cx, 2600
xor di, di
@k1:
cmp byte ptr [si], '0'
jnz @k2
inc di
inc si
loop @k1
@k2:
mov ah, 40h ; // Write to file
mov bx, hFile
mov cx, 2600
sub cx, di
mov dx, si
int 21h
mov ax, 4C00h
int 21h
end begin
[/quote]