ist die Zuordnung:Assembly Language-Programm - schwerwiegender Fehler A1010
schreiben „menu-driven“ Programm, das einen Absatz von der Tastatur liest und verarbeitet es in der folgenden Art und Weise:
Zähle die Anzahl der Zeichen im Absatz, Zählen Sie die Anzahl der Wörter, . Zählen Sie die Anzahl der Buchstaben, die mit dem dritten Buchstaben Ihres Nachnamens übereinstimmen, . Zählen Sie die Anzahl der Großbuchstaben.
den Absatz mit Sonderzeichen beenden:
Wenn Ihr Nachname beginnt mit A, B, C, D, E, F, G, H, um den Absatz mit # beenden,
Wenn Ihr Nachname beginnt mit I, J, K, L, M, N, O, P Beendet den Absatz mit%,
Wenn Ihr Nachname mit R, S, T, U, V, W, X, Y, Z beginnt Beenden Sie den Absatz mit &,
Für diese Übung müssen Sie Unterprogramme verwenden. Lesen Sie den Abschnitt im Hauptverfahren.
Absatz in Unterroutinen verarbeiten (separate Prozedur für jede Zählung).
Hier ist mein Code, ich bekomme einen A1010 Fehler (unübertroffene Blockverschachtelung: Haupt) auf der letzten Zeile und ich kann nicht herausfinden warum, bitte helfen. Ich bin mit Visual Studio 2015:
include Irvine32.inc
displayMSG MACRO MSG
MOV AH, 09H
LEA DX, MSG
INT 21H
ENDM
.DATA
para DB 100 , ? , 100 DUP('$')
;messages for menu
mes1 DB 0AH, 0DH, 'MENU $'
mes21 DB 0AH, 0DH, '1.COUNT CHARACTERS $'
mes22 DB 0AH, 0DH, '2.COUNT WORDS $'
mes23 DB 0AH, 0DH, '3.COUNT CAPITAL LETTERS $'
mes24 DB 0AH, 0DH, '4.COUNT THIRD LETTER $'
mes25 DB 0AH, 0DH, '5.EXIT $'
mes3 DB 0AH, 0DH, 'ENTER YOUR CHOICE : $'
mes4 DB 0AH, 0DH, 'WRONG CHOICE $'
mes5 DB 0AH, 0DH, 'ENTER THE PARAGRAPH : $'
mes6 DB 0AH, 0DH, 'NUMBER OF CHARACTERS IS : $'
mes7 DB 0AH, 0DH, 'NUMBER OF WORDS $'
mes8 DB 0AH, 0DH, 'NUMBER OF CAPITAL LETTERS $'
mes9 DB 0AH, 0DH, 'NUMBER OF THIRD LETTER $'
.CODE
main PROC
start:
mov ax, @data
mov ds, ax
mov es, ax
displayMSG mes5 ;PROMPT THE USER TO ENTER A PARAGRAPH
mov ah, 0ah ; Accept PARAGRAPH
lea dx, para
int 21h
;DISPLAY MENU TO THE USER
menu :
displayMSG mes1
displayMSG mes21
displayMSG mes22
displayMSG mes23
displayMSG mes24
displayMSG mes25
displayMSG mes3 ; accept choice
mov ah, 01h
int 21h
mov bl, al ; userChoice BL
cmp bl, 31h ; if userChoice=1
je FINDCHAR ; Find NUMBER OF CHARACTERS IN THE STRING
cmp bl, 32h ; if userChoice=2
je FINDWORDS ; FIND NUMBER OF WORDS
cmp bl, 33h ; if userChoice=3
je FINDCAPITAL ; FIND NUMBER OF CAPITAL LETTERS
cmp bl, 34h ; if userChoice=4
je FINDLETTER
cmp bl, 35h ; if userChoice=5
je L1 ; exit
displayMSG mes4 ; Wrong Choice
jmp menu
FINDCHAR:
call FINDCHARPROC
jmp menu
FINDWORDS :
call FINDWORDSPROC
jmp menu
FINDCAPITAL:
call FINDCAPITALSPROC
jmp menu
FINDLETTER :
call FINDTHIRDPROC
jmp menu
L1:
end start
exit
exit
main ENDP
;procedure THAT FINDS NUMBER OF CHARACTERS
FINDCHARPROC proc
displayMSG mes6
mov dl, para+1 ; NUMBER OF CHARACTERS IN THE PARAGRAPH
or dl, 30h
mov ah, 02h ; DISPLAY THE CHARACTERS COUNT
int 21h
ret
FINDCHARPROC ENDP
;find number of WORDS in the paragraph
FINDWORDSPROC proc
mov dl,00h
mov ch, 00h
lea esi, para+2
mov cl, para+1
mov bl,20h ;ASCII value of space
loopAn:
dec cl
cmp cl, 00h
je printWordCount
cmp bl, [esi] ;check if character is space
je incWordCnt
inc esi
jne loopAn
incWordCnt:
inc dl
inc esi
jmp loopAn
printWordCount:
displayMSG mes7
or dl,30h
mov ah,02h
int 21h
ret
FINDWORDSPROC ENDP
;find number of CAPITAL letters in the paragraph
FINDCAPITALSPROC proc
mov dl,00h
mov ch, 00h
lea esi, para+2 ; USER INPUTTED PARAGRAPH
mov cl, para+1
loopAgn:
dec cl
cmp cl, 00h
je printcapitalCount
mov al, byte ptr[esi]
cmp al,"A" ;check if character is capital
jb nextChar
cmp al,"Z" ;check if character is capital
ja nextChar
inc esi
inc dl
jne loopAgn
nextChar:
inc esi
jmp loopAgn
printcapitalCount :
displayMSG mes8
or dl,30h
mov ah,02h
int 21h
ret
FINDCAPITALSPROC ENDP
;count the number of third letter present in the paragraph
FINDTHIRDPROC proc
mov dl,00h
mov ch, 00h
lea esi, para+2 ; DESTINATION STRING
mov cl, para+1
call ReadChar ;get THIRD letter of your name
loopTemp:
dec cl
cmp cl, 00h
je printCount
cmp al, [esi] ;check if character is your third letter
je incCnt
inc esi
jne loopTemp
incCnt:
inc dl
inc esi
jmp loopTemp
printCount :
displayMSG mes9
or dl,30h
mov ah,02h
int 21h
ret
FINDTHIRDPROC ENDP
END main
Sie haben 'end start' bei' L1'. Keine Ahnung was du da machen wolltest, solltest du wahrscheinlich entfernen. – Jester
Ok, ich habe das entfernt, aber jetzt bekomme ich diesen Fehler in Zeile 59: Fehler 2004 Symboltyp Konflikt 'mov ax, @ data' – cantoX
Bitte markieren Sie Zeile 59 in der Frage. – Jester