问题:编写8086程序来检查给定的字符串是否是回文。
例子:
Input String: "abba"
Output: String is palindrome
Input String: "abbca"
Output: String is not palindrome
解释:
- 创建一个字符串
- 遍历到字符串的末尾
- 获取字符串末尾的地址,DI
- 加载字符串的起始地址,SI
- 比较存储在地址中的值
- 递增指针,SI
- 递减指针,DI
- 再次比较存储在si和di处的值
- 重复这些步骤,直到SI <= DI
- 如果所有字符匹配,则打印字符串为回文,否则不打印回文
程序:
.MODEL SMALL
.STACK 100H
.DATA
; The string to be printed
STRING DB 'abba', '$'
STRING1 DB 'String is palindrome', '$'
STRING2 DB 'String is not palindrome', '$'
.CODE
MAIN PROC FAR
MOV AX, @DATA
MOV DS, AX
; check if the string is;
;palindrome or not
CALL Palindrome
;interrupt to exit
MOV AH, 4CH
INT 21H
MAIN ENDP
Palindrome PROC
; load the starting address
; of the string
MOV SI,OFFSET STRING
; traverse to the end of;
;the string
LOOP1 :
MOV AX, [SI]
CMP AL, '$'
JE LABEL1
INC SI
JMP LOOP1
;load the starting address;
;of the string
LABEL1 :
MOV DI,OFFSET STRING
DEC SI
; check if the string is plaindrome;
;or not
LOOP2 :
CMP SI, DI
JL OUTPUT1
MOV AX,[SI]
MOV BX, [DI]
CMP AL, BL
JNE OUTPUT2
DEC SI
INC DI
JMP LOOP2
OUTPUT1:
;load address of the string
LEA DX,STRING1
; output the string;
;loaded in dx
MOV AH, 09H
INT 21H
RET
OUTPUT2:
;load address of the string
LEA DX,STRING2
; output the string
; loaded in dx
MOV AH,09H
INT 21H
RET
Palindrome ENDP
END MAIN
输出:
String is palindrome
笔记:
该程序无法在在线编辑器上运行,请使用MASM运行该程序,并使用dos框运行MASM,您可以使用任何8086仿真器运行该程序。