これが私のプログラムです。2 つの文字列を入力し、それらの長さを計算し、長さが等しいかどうかをチェックします。長さが等しい場合、最初の文字列を反転し、2 番目と等しいかどうかをチェックします。長さが等しくない場合、または文字列を反転した後に文字列が同じでない場合、プログラムはそれ以外の場合を出力し"String is not palindrome"
ます"String is palindrome"
。これは実際の回文型のソリューションではないことはわかっていますが、これが私がやりたかったことです。
問題:STRLEN1
作成した変数は実際にはDB
型であるため、"Operand types do not match"
エラーが発生します。
考えられる解決策: DD
or型の別の変数を作成し、値を新しく作成した変数にDW
保存します。これが問題で、やり方がわかりません。STRLEN1
STRLEN1_ DW
グーグルでたくさん検索した後、これは私が見つけたものですhttps://www.hex-rays.com/products/ida/support/idadoc/453.shtmlそしてそれを使用しようとしましたが、リストに追加されたエラーがもう1つしかありません: NEED EXPRESSION
. これを解決する方法がわかりません。
DATA SEGMENT
STR1 DB 'ENTER STRING ONE : $'
STR2 DB 'ENTER STRING TWO : $'
STR_PALIN DB "STRING IS PALINDROME$"
STR_NOT_PALIN DB "STRING IS NOT PALINDROME$"
INSTR1 DB 20 DUP("$")
INSTR2 DB 20 DUP("$")
RSTR DB 20 DUP("$")
NEWLINE DB 10,13,"$"
STRLEN1 DB 0
STRLEN2 DB 0
STRLEN1_ DW 0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
MOV ES, AX
LEA SI, INSTR1
LEA DI, INSTR2
;GET STRING
MOV AH, 09H
LEA DX, STR1
INT 21H
MOV AH, 0AH
MOV DX, SI
INT 21H
MOV AH, 09H
LEA DX, NEWLINE
INT 21H
;GET LENGTH OF STRING ONE
MOV BL, INSTR1+1
ADD BL, 30H
MOV STRLEN1, BL
;TAKE SECOND INPUT OF THE STRING
MOV AH, 09H
LEA DX, STR2
INT 21H
MOV AH, 0AH
MOV DX, DI
INT 21H
MOV AH,09H
LEA DX,NEWLINE
INT 21H
;GET LENGTH OF STRING 2
MOV BL, INSTR2+1
ADD BL, 30H
MOV STRLEN2, BL
;COMPARE STRING LENGTH
MOV CX, 6
MOV AL, STRLEN1
MOV BL, STRLEN2
CMP AL, BL
JNE NOT_PALIN
;REVERSE STRING ONE
MOV STRLEN1 -> STRLEN1_
MOV CX, STRLEN1
MOV CX, -2
LEA DI, RSTR
ADD SI, STRLEN1
ADD SI, -2
L1:
MOV AL, [SI]
MOV [DI], AL
DEC SI
INC DI
LOOP L1
MOV AL, [SI]
MOV [DI], AL
INC DI
MOV DL, '$'
MOV [DI], DL
MOV CX, STRLEN1
LEA SI, RSTR
LEA DI, INSTR2
REPE CMPSB
JNE NOT_PALIN
JMP PALIN
NOT_PALIN:
MOV AH, 09H
LEA DX, STR_NOT_PALIN
INT 21H
JMP EXIT
PALIN:
MOV AH, 09H
LEA DX, STR_PALIN
INT 21H
JMP EXIT
EXIT:
MOV AX, 4CH
INT 21H
CODE ENDS
END START