这是我的程序。它接受两个字符串的输入,计算它们的长度,检查长度是否相等。如果长度相等,它将反转第一个字符串并检查它是否等于第二个。如果长度不相等或反转后的字符串不相同,则程序将打印"String is not palindrome"
否则"String is palindrome"
。我知道这不是实际的回文类型解决方案,但这是我想做的。
问题:STRLEN1
我创建的变量实际上是一个DB
类型,所以它给出了一个"Operand types do not match"
错误。
可能的解决方案:创建另一个DD
orDW
类型的变量并将值存储STRLEN1
到新创建的STRLEN1_ DW
变量中。这就是问题所在,我不知道该怎么做。
在谷歌上搜索了很多之后,我发现了https://www.hex-rays.com/products/ida/support/idadoc/453.shtml并尝试使用它,但只在列表中添加了一个错误: 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