0
であれば、私はこのコードは、これらの特定の行にどのように機能するかを理解することはできません。DISPLAY MSG2
後チェック文字列が回文
、どのようにそれはDISPLAY P11
とMSGを印刷するには知っていますか?
の後DISPLAY MSG3
アレイの長さを印刷するには、これらの4行でどのように知っていますか? L1
は "?
"となっていますが、どのように長さをすでに取得していますか?
MOV DL,L1
ADD DL,30H
MOV AH,2
INT 21H
私はそれでMACRO
とLEA
についてのある程度の知識が不足していると思います。私はLEA
がMOV blabla, OFFSET blabla2
であることを知っています。
非常に高く評価されました。
.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
ここで意味P1は必要ありません。ありがとうございました! –
@IlanAizelmanWS P1とM1は同じ場所を指すので、必要なのは1つだけです。 –
あなたは以下のことを行うためにコードをどのようにアップグレードすればよいですか?文字列がpalindromなら、同じ文字が2回以上あるかどうかをチェックしたいと思います。 'a'は2回繰り返されるので(例えば、パリンドロームでも) –