Qwezar

Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору Люди, помогите плиз, эта прога ищет все полиндромы до 5000 нужно их вывести на экран и в файл, с экраном все ОК, а вот с файлом проблема, создается пкстой txt и все. Код: MODEL TINY .486 .CODE assume cs:@code,ds:@code,es:@code,ss:@code org 100h begin: mov ah,3ch ;Создание файла mov cx,0 ;Для записи и чтения mov dx,offset fn mov bx,fnd int 21h mov fnd,ax mov word ptr count,0 ;до 10 mov eax,-1 p1: inc eax push eax inc count call print_n pascal,eax,word ptr 0,word ptr 1,word ptr 1,word ptr 0,word ptr 0 mov ah,2h mov dl,32 int 21h pop eax cmp eax,9 jb p1 ;двузначные mov eax,-1 mov ebx,0 p2: t1: inc eax jmp t3 t2: inc ebx jmp t3 t3: cmp eax,ebx jnz nm1 push eax push ebx inc count call print_n pascal,eax,word ptr 0,word ptr 1,word ptr 1,word ptr 0,word ptr 0 call print_n pascal,ebx,word ptr 0,word ptr 1,word ptr 1,word ptr 0,word ptr 0 mov ah,2h mov dl,32 int 21h pop ebx pop eax nm1: cmp ebx,9 jz nm2 jmp t2 nm2: mov ebx,0 cmp eax,9 jz p3 jmp t1 ;трехзначные p3: mov eax,0 mov ebx,0 mov ecx,0 jmp r4 r1: inc eax jmp r4 r2: inc ebx jmp r4 r3: inc ecx jmp r4 r4: cmp eax,ecx jnz mn1 push eax push ebx push ecx inc count call print_n pascal,eax,word ptr 0,word ptr 1,word ptr 1,word ptr 0,word ptr 0 call print_n pascal,ebx,word ptr 0,word ptr 1,word ptr 1,word ptr 0,word ptr 0 call print_n pascal,ecx,word ptr 0,word ptr 1,word ptr 1,word ptr 0,word ptr 0 mov ah,2h mov dl,32 int 21h pop ecx pop ebx pop eax mn1: cmp ecx,9 jz mn2 jmp r3 mn2: mov ecx,0 cmp ebx,9 jz mn3 jmp r2 mn3: mov ebx,0 cmp eax,9 jz p4 jmp r1 p4: ;четырехзначные mov eax,0 mov ebx,0 mov ecx,0 mov edx,0 jmp m5 m1: inc eax jmp m5 m2: inc ebx jmp m5 m3: inc ecx jmp m5 m4: inc edx jmp m5 m5: cmp eax,edx jnz n1 cmp ebx,ecx jz m7 n1: cmp edx,9 jz n2 jmp m4 n2: mov edx,0 cmp ecx,9 jz n3 jmp m3 n3: mov ecx,0 cmp ebx,9 jz n4 jmp m2 n4: mov ebx,0 cmp eax,4 jz exit jmp m1 m7: inc count push eax push ebx push ecx push edx call print_n pascal,eax,word ptr 0,word ptr 1,word ptr 1,word ptr 0,word ptr 0 call print_n pascal,ebx,word ptr 0,word ptr 1,word ptr 1,word ptr 0,word ptr 0 call print_n pascal,ecx,word ptr 0,word ptr 1,word ptr 1,word ptr 0,word ptr 0 call print_n pascal,edx,word ptr 0,word ptr 1,word ptr 1,word ptr 0,word ptr 0 mov ah,2h mov dl,32 int 21h pop edx pop ecx pop ebx pop eax jmp n1 exit: call print_n pascal,word ptr count,word ptr 0,word ptr 1,word ptr 1,word ptr 0,word ptr 0 mov ah,4ch int 21h print_n proc near ;Процедура вывода десятичного числа на экран и в файл locals @@ arg beg,zero,f_handle,pp0,num_off:word,numb:dword=arg_size ;Аргументы процедуры: ;numb: число(dword) ;num_off: смещение строки, где содержится число(word) ;pp0: 0-не печатать, 1-на экран, 2-в файл(word) ;f_handle: дескриптор файла(word) ;zero: 0-не печатать ведущие нули(word) ;beg: отступ в знаках от начала печатаемого числа(<=9)(word) push bp mov bp,sp push eax push ebx push cx push edx push si mov cx,10 ;Max длина выводимого числа mov si,num_off push cx @p: mov byte ptr [si],'0' ;Заполняем символами '0' inc si loop @p pop cx mov eax,numb ;Представляемое число mov si,num_off ;Адрес результата для печати add si,9 mov ebx,10 ;Делитель для выделения цифры @@pr: mov edx,0 div ebx add dl,'0' ;Переводим символ в цифру mov byte ptr [si],dl or eax,eax ;eax=0? jz short @@pr2 dec si loop @@pr @@pr2: ;В si фдрес первой ведущей ненулевой цифры cmp pp0,0 ;Признак печати=0? Да- je @@e6 ;Выход без печати mov ah,40h ;Нет-печать числа mov cx,10 ;Max длина числа mov dx,offset num_off mov bx,1 ;Дескриптор экрана cmp pp0,2 je @@e1 jmp short @@e2 @@e1: mov bx,f_handle ;Дескриптор файла @@e2: cmp zero,0 jne short @@e3 add cx,dx ;Помещаем в cx адрес первой ненулевой цифры sub cx,si mov dx,si jmp short @@e4 @@e3: sub cx,beg ;Ведущие нули add dx,beg @@e4: int 21h @@e6: pop si pop edx pop cx pop ebx pop eax mov sp,bp ;Восстанавливаем указатель стека к моменту выхода pop bp ret arg_size print_n endp count dw ? ent db ' ' fn db 'asm.txt',0 fnd dw ? end begin |
|