Ich kann nicht verstehen, wie dieser Code in diesen speziellen Linien funktioniert:Überprüfen Sie, ob String palindrom
Nach DISPLAY MSG2
, Woher weiß er das msg mit DISPLAY P11
drucken?
Nach DISPLAY MSG3
Woher weiß es mit diesen 4 Zeilen, um die Länge des Arrays zu drucken? L1
soll "?
" sein, wie hat es schon die Länge bekommen?
MOV DL,L1
ADD DL,30H
MOV AH,2
INT 21H
Ich glaube, mir fehlt etwas Wissen über die MACRO
und LEA
darin. aber ich weiß, dass LEA
MOV blabla, OFFSET blabla2
ist.
Helfed wird sehr geschätzt.
.MODEL SMALL
.STACK 100h
.DATA
MSG1 DB 10,13,'ENTER ANY STRING :- $'
MSG2 DB 10,13,'ENTERED STRING IS :- $'
MSG3 DB 10,13,'LENGTH OF STRING IS :- $'
MSG4 DB 10,13,'NO, GIVEN STRING IS NOT A PALINDROME $'
MSG5 DB 10,13,'THE GIVEN STRING IS A PALINDROME $'
MSG6 DB 10,13,'REVERSE OF ENTERED STRING IS :- $'
P1 LABEL BYTE ;start of label byte
M1 DB 0FFH ;assign maximum length of array
L1 DB ? ;length of string
P11 DB 0FFH DUP ('$') ;init array (max 256)
P22 DB 0FFH DUP ('$') ;init array (max 256)
DISPLAY MACRO MSG ;Called like that: <Display argument>
MOV AH,9
LEA DX,MSG
INT 21H
ENDM
.CODE
START:
MOV AX,@DATA ;Assign data to AX
MOV DS,AX ;Assign data to Data Segment
DISPLAY MSG1 ; Enter string
LEA DX,P1 ;DX points to P1's offset
MOV AH,0AH ; buffer filled with user input
INT 21H
DISPLAY MSG2 ;The entered string is:
DISPLAY P11 ;This will display the string
DISPLAY MSG3 ;Display length
;Ap
ply string's length to DL,
; covert from ASCII to DEC, and output the length value.
MOV DL,L1
ADD DL,30H
MOV AH,2
INT 21H
DISPLAY MSG6
;initialize P11 to SI register and P22 to DI register
LEA SI,P11
LEA DI,P22
;Jump SI to the end of string
MOV DL,L1
DEC DL
MOV DH,0
ADD SI,DX
;Move length of actual string to CL, and apply CH = 0
MOV CL,L1
MOV CH,0
;CX = string's length.
REVERSE:
;Put P11's REVERESED string into P22 string
MOV AL,[SI]
MOV [DI],AL
INC DI
DEC SI
LOOP REVERSE
DISPLAY P22 ; Display the reversed string
;Re-assign P11,P22 to SI,DI registers
LEA SI,P11
LEA DI,P22
;Move length of actual string to CL, and apply CH = 0
MOV CL,L1
MOV CH,0
;CX = string's length.
CHECK:
MOV AL,[SI]
CMP [DI],AL
JNE NOTPALIN
INC DI
INC SI
LOOP CHECK
DISPLAY MSG5
JMP EXIT
NOTPALIN:
DISPLAY MSG4
EXIT: MOV AH,4CH
INT 21H
CODE ENDS
END START
Bedeutung P1 wird hier nicht benötigt. Danke! –
@IlanAizelmanWS P1 und M1 zeigen auf den gleichen Platz, so dass nur einer benötigt wird. –
Haben Sie Ideen, wie kann ich den Code aktualisieren, um Folgendes zu tun: Wenn die Zeichenfolge Palindrom ist, möchte ich überprüfen, ob wir nicht mehr als zweimal die gleichen Zeichen haben. zum Beispiel 'aba' ist in Ordnung, aber 'aabaa' ist nicht, weil 'a' zweimal wiederholt wird (obwohl es ein Palindrom ist) –