📌  相关文章
📜  8086程序检查字符串是否是回文

📅  最后修改于: 2021-06-28 09:29:37             🧑  作者: Mango

问题:编写8086程序来检查给定的字符串是否是回文。

例子:

Input String: "abba"
Output: String is palindrome

Input String: "abbca"
Output: String is not palindrome 

解释:

  1. 创建一个字符串
  2. 遍历到字符串的末尾
  3. 获取字符串末尾的地址,DI
  4. 加载字符串的起始地址,SI
  5. 比较存储在地址中的值
  6. 递增指针,SI
  7. 递减指针,DI
  8. 再次比较存储在si和di处的值
  9. 重复这些步骤,直到SI <= DI
  10. 如果所有字符匹配,则打印字符串为回文,否则不打印回文

程序:

.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仿真器运行该程序。