-1

在以下代码中,我能够反转字符串,但我不知道如何在此代码中添加函数以获得以下结果:

输入 AbCDeF_XYz 输出:Zyx_fEdcBa

name "REVERSE"

include "emu8086.inc" 

      print "Enter a string:"
      MOV DX,11
      CALL get_string   
      printn
      MOV DI,0x0

ReadString:

      MOV AL,[ds+di]
      CMP AL,0x0
      JE Reverse
      INC DI
      PUSH AX
      JMP ReadString
Reverse:

      POP AX
      MOV AH,0xE
      INT 0x10
      CMP AL,0x0
      JNE Reverse

HLT

DEFINE_GET_STRING
END
4

1 回答 1

1

我可以为您的程序建议这 3 个解决方案:

  • 在您的推送循环中,您还应该推送零,因为现在您的弹出循环将无法正确找到最终零!

      MOV DI,0x0
    ReadString:
      MOV AL,[ds+di]
      INC DI
      PUSH AX
      cmp al, 0
      jne ReadString
    Reverse:
    
  • 您可以通过仔细查看输入字符串来解决大小写交换问题。它只有下划线字符_会造成问题。您必须对其进行测试,然后绕过案例交换:

      MOV DI,0x0
    ReadString:
      MOV AL,[ds+di]
      INC DI
      cmp al,"_"
      je  NoSwap
      xor al,32  ;This toggles lowercase and uppercase
    NoSwap:
      PUSH AX
      cmp al, 0
      jne ReadString
    Reverse:
    
  • 在您当前的程序中,您打印终止零。这几乎肯定不是你应该做的!

    Reverse:
      POP AX
      cmp al,0
      je  EndOfReverse
      MOV AH,0xE
      INT 0x10
      Jmp Reverse
    EndOfReverse:
      HLT
    
于 2015-11-14T11:36:01.063 回答