Witam moze ktos rozgarniety znajdzie w tym programie blad. Nie tworzy katalogu i pliku. Ja juz nie mam pomyslow. Dziekuje za pomoc.


.586P
.MODEL flat, STDCALL

;--- stale z pliku .\include\windows.inc ---

STD_INPUT_HANDLE                     equ -10
STD_OUTPUT_HANDLE                    equ -11
GENERIC_READ                         equ 80000000h
GENERIC_WRITE                        equ 40000000h
CREATE_NEW                           equ 1
CREATE_ALWAYS                        equ 2
OPEN_EXISTING                        equ 3
OPEN_ALWAYS                          equ 4
TRUNCATE_EXISTING                    equ 5
FILE_FLAG_WRITE_THROUGH              equ 80000000h
FILE_FLAG_OVERLAPPED                 equ 40000000h
FILE_FLAG_NO_BUFFERING               equ 20000000h
FILE_FLAG_RANDOM_ACCESS              equ 10000000h
FILE_FLAG_SEQUENTIAL_SCAN            equ 8000000h
FILE_FLAG_DELETE_ON_CLOSE            equ 4000000h
FILE_FLAG_BACKUP_SEMANTICS           equ 2000000h
FILE_FLAG_POSIX_SEMANTICS            equ 1000000h
FILE_ATTRIBUTE_READONLY              equ 1h
FILE_ATTRIBUTE_HIDDEN                equ 2h
FILE_ATTRIBUTE_SYSTEM                equ 4h
FILE_ATTRIBUTE_DIRECTORY             equ 10h
FILE_ATTRIBUTE_ARCHIVE               equ 20h
FILE_ATTRIBUTE_NORMAL                equ 80h
FILE_ATTRIBUTE_TEMPORARY             equ 100h
FILE_ATTRIBUTE_COMPRESSED            equ 800h
FORMAT_MESSAGE_ALLOCATE_BUFFER       equ 100h
FORMAT_MESSAGE_IGNORE_INSERTS        equ 200h
FORMAT_MESSAGE_FROM_STRING           equ 400h
FORMAT_MESSAGE_FROM_HMODULE          equ 800h
FORMAT_MESSAGE_FROM_SYSTEM           equ 1000h
FORMAT_MESSAGE_ARGUMENT_ARRAY        equ 2000h
FORMAT_MESSAGE_MAX_WIDTH_MASK        equ 0FFh

;--- funkcje API Win32 z pliku  .\include\user32.inc ---
CharToOemA PROTO :DWORD,:DWORD
;--- z pliku .\include\kernel32.inc ---
GetStdHandle PROTO :DWORD
ReadConsoleA PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD
WriteConsoleA PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD
ExitProcess PROTO :DWORD
wsprintfA PROTO C :VARARG     ;; int wsprintf(LPTSTR lpOut,// pointer to buffer for output 
                              ;; LPCTSTR lpFmt,// pointer to format-control string 
                              ;;    ...	// optional arguments  );
lstrlenA PROTO :DWORD
GetCurrentDirectoryA PROTO :DWORD,:DWORD  
      ;;nBufferLength, lpBuffer; zwraca length
CreateDirectoryA PROTO :DWORD,:DWORD      
      ;;lpPathName, lpSecurityAttributes; zwraca 0 jeśli bład
lstrcatA PROTO :DWORD,:DWORD              
      ;; lpString1, lpString2; zwraca lpString1
CreateFileA PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD 
      ;; LPCTSTR lpszName, DWORD fdwAccess, 
      ;; DWORD fdwShareMode, LPSECURITY_ATTRIBUTES lpsa, DWORD fdwCreate, 
      ;; DWORD fdwAttrsAndFlags, HANDLE hTemplateFile
lstrcpyA PROTO :DWORD,:DWORD  
      ;;LPTSTR lpString1 // address of buffer, LPCTSTR lpString2	// address of string to copy 
CloseHandle PROTO :DWORD      
      ;; BOOL CloseHandle(HANDLE hObject)
WriteFile PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD    
   ;; BOOL WriteFile(
   ;; HANDLE hFile,	// handle to file to write to
   ;; LPCVOID lpBuffer,	// pointer to data to write to file
   ;; DWORD nNumberOfBytesToWrite,	// number of bytes to write
   ;; LPDWORD lpNumberOfBytesWritten,	// pointer to number of bytes written
   ;; LPOVERLAPPED lpOverlapped 	// pointer to structure needed for overlapped I/O 
   ;;);
ReadFile PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD
    ;;BOOL ReadFile(
    ;;HANDLE hFile,	// handle of file to read 
    ;;LPVOID lpBuffer,	// address of buffer that receives data  
    ;;DWORD nNumberOfBytesToRead,	// number of bytes to read 
    ;;LPDWORD lpNumberOfBytesRead,	// address of number of bytes read 
    ;;LPOVERLAPPED lpOverlapped 	// address of structure for data 
    ;;);
CopyFileA PROTO :DWORD,:DWORD,:DWORD      
    ;; BOOL CopyFile(
    ;;LPCTSTR lpExistingFileName,	// pointer to name of an existing file 
    ;;LPCTSTR lpNewFileName,	// pointer to filename to copy to 
    ;;BOOL bFailIfExists 	// flag for operation if file exists  
    ;;);
GetLastError PROTO

GetFileSize PROTO :DWORD, :DWORD
    
;--- z pliku .\include\masm32.inc ---

nrandom     PROTO :DWORD

;--- funkcje----------------


includelib .\lib\user32.lib
includelib .\lib\kernel32.lib
includelib .\lib\masm32.lib

;-------------------------------------------------
_DATA SEGMENT
;-------------------------------------------------------
	consoleOut			DD			?
	sth				DB			0
	dir				DB			128 dup(?)
	align				4
	dirSize			DD			128
	bufor				DB			128 dup(?)
	align 			4
	buforSize			DD			128
	
	liczbaLosowa		DD			32,32,32,32,32,32,13,10
	
	newDirName		DB			"C:\dane",0
	align				4
	newDirNameSize		DD			$ - newDirName
	
	testFile			DB			"C:\dane\test.txt",0
	align				4
	testFilePath		        DB			128 dup(?)
	align				4
	hfile			        DD			?
	
		
	temp				DB			"%d " ,0Dh,0Ah,0
	align				4
	
	zPliku				DB			128 dup(?)
	align 				4
	zPlikuSize			DD			?
	
	asd				DB			"%d",0Dh,0Ah,0
	align 4
	
	odczytanaLiczba		DD			?
	licznik1			DD			?
	licznik2			DD			?
	
_DATA ENDS
_TEXT SEGMENT
	ScanInt	PROC
		;; funkcja ScanInt przekształca ciąg cyfr do liczby, którą jest zwracana przez EAX
		;; argument - zakończony zerem wiersz z cyframi
		;; rejestry: EBX - adres wiersza, EDX - znak liczby, ESI - indeks cyfry w wierszu, EDI - tymczasowy
		
		;--- początek funkcji
			push	EBP
			mov	EBP, ESP	; wskaźnik stosu ESP przypisujemy do EBP
		
		;--- odkładanie na stos
			push	EBX
			push	ECX
			push	EDX
			push	ESI
			push	EDI

		;--- przygotowywanie cyklu
			mov		EBX, [EBP+8]
			push	      EBX
			call	      lstrlenA
			mov		EDI, EAX	;ilość znaków
			mov		ECX, EAX	;ilość powtórzeń = ilość znaków
			xor		ESI, ESI	; wyzerowanie ESI
			xor		EDX, EDX	; wyzerowanie EDX
			xor		EAX, EAX	; wyzerowanie EAX
		;--- cykl --------------------------
			@@pocz:
				cmp	BYTE PTR [EBX+ESI], 02Dh	;porównanie z kodem -
				jne	@@et1
				mov	EDX, 1
				jmp	@@nast
			@@et1:
				cmp	BYTE PTR [EBX+ESI], 030h	;porównanie z kodem 0
				jae	@@et2
				jmp	@@nast
			@@et2:
				cmp	BYTE PTR [EBX+ESI], 039h	;porównanie z kodem 9
				jbe	@@et3
				jmp	@@nast
			;----
			@@et3:	
				push	EDX	; do EDX procesor może zapisać wynik mnożenia 
				mov	EDI, 10
				mul	EDI		;mnożenie EAX * EDI
				mov	EDI, EAX	; tymczasowo z EAX do EDI
				xor	EAX, EAX	;zerowani EAX
				mov	AL, BYTE PTR [EBX+ESI]
				sub	AL, 030h	; korekta: cyfra = kod znaku - kod 0	
				add	EAX, EDI	; dodanie cyfry
				pop	EDX
			@@nast:	inc	ESI
			loop	@@pocz
				
		;--- wynik
			or	EDX, EDX	;analiza znacznika EDX
			jz	@@et4
			neg	EAX
		@@et4:	
		
		;--- zdejmowanie ze stosu
			pop	EDI
			pop	ESI
			pop	EDX
			pop	ECX
			pop	EBX
		
		;--- powrót
			pop	EBP
			ret
	ScanInt	ENDP
	
start:
	;pobieranie uchwytów wyjśćiowych konsoli
	push	STD_OUTPUT_HANDLE
	call	GetStdHandle	; wywołanie funkcji GetStdHandle
	mov		consoleOut, EAX	; deskryptor wyjściowego bufora konsoli
	


    ;pobieranie aktualnego katalogu
	invoke GetCurrentDirectoryA, dirSize,offset dir
	
	;przygotowanie adresu nowego katalogu
	invoke lstrcatA, offset dir, offset newDirName
	
	;pobieranie dlugosci
	invoke lstrlenA, offset dir
	mov dirSize, EAX

	;tworzenie nowego katalogu
	invoke CreateDirectoryA, offset dir, 0
	
	;przygotowywanie adresu do pliku test.txt
	invoke lstrcpyA, offset testFilePath, offset dir

	invoke lstrcatA, offset testFilePath, offset  testFile

		
	;tworzenie nowego pliku:
	invoke CreateFileA,OFFSET bufor, GENERIC_WRITE OR GENERIC_READ, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0 
	
	mov hfile, EAX

	;losowanie liczb calkowitych z zakresu od -99 do 99
	mov EBX, 0
	petla:
	;losowanie liczby od 0 do 99
	
	invoke nrandom, 199
    sub eax,100
	mov liczbaLosowa, EAX
		
	invoke wsprintfA, offset bufor, offset temp, liczbaLosowa
	mov buforSize, EAX
	
	invoke WriteFile, hfile, offset bufor, buforSize, offset sth,  0
    mov [bufor], 0
	inc EBX
	cmp EBX, 100
	jne petla
	
	invoke CloseHandle, hfile
	
		invoke ExitProcess, 0
_TEXT	ENDS
END start