모든 대문자가 포함 된 길이가 L 인 임의의 문자열을 생성하는 절차를 만들어야합니다. 프로 시저를 호출 할 때 EAX에서 L의 값을 전달하고 임의의 문자열을 보유 할 바이트 배열에 대한 포인터를 전달해야합니다. 그런 다음 프로 시저를 20 번 호출하고 콘솔 창에 문자열을 표시하는 테스트 프로그램을 작성해야합니다.20 대문자가 모두 포함 된 임의의 문자열
아래 코드는 늘는 이러한 오류가 돌아 오면 작업 :
Line (33): error A2008: syntax error : main ENDP
Line (35): error A2144: cannot nest procedures
Line (46): error A2008: syntax error : RandomString
Line (48): error A2144: cannot nest procedures
Line (59): warning A6001: no return from procedure
Line (66): fatal error A1010: unmatched block nesting
나는 내가 잘못을하고 어떻게 이러한 오류를 수정하고있는 무슨에 어떤 아이디어 ... 어셈블리 언어로 여전히 매우 새로운 오전? 고맙습니다.
;Random Strings.
INCLUDE Irvine32.inc
TAB = 9 ;ASCII code for Tab
strLen=10 ;length of the string
.386
.model flat,stdcall
.stack 4096
ExitProcess PROTO, dwExitCode:DWORD
.data
str1 BYTE"The 20 random strings are:", 0
arr1 BYTE strLen DUP(?)
.code
main PROC
mov ed x, OFFSET str1 ;"The c20 random strings are:"
call WriteString ;Writes string
call Crlf ;Writes an end-of-line sequence to the console window.
mov ecx,20 ;Create 20 strings
L1: mov esi,OFFSET arr1 ;ESI: array address
mov eax,strLen ;EAX: string length
call RandomString ;generates the random string
call Display
mov al,TAB
call WriteChar ;leaves a tab space
exit
main ENDP
RandomString PROC USES eax esi
mov ecx,eax ;ECX = string length
L1: mov eax, 26
call RandomRange
add eax,65 ;EAX gets ASCII value of a capital letter
mov arr1[esi],eax
inc esi
loop L1
RandomString EXDP
Display PROC USES eax esi ;Displays the generated random string
mov ecx,eax ;ECX=string length
L1: mov eax, arr1[esi] ;EAX = ASCII value
call WriteChar ;writes the letter
inc esi
loop L1
Display ENDP
call dumpregs
INVOKE ExitProcess,0
END main
사용중인 아키텍처 및 어셈블러에 태그하십시오. –