使用include'emu8086.inc'反转字符串的大小写和顺序

时间:2015-11-14 02:11:10

标签: assembly x86 dos x86-16 emu8086

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

  

输入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

1 个答案:

答案 0 :(得分:1)

我可以为您的计划推荐这3个解决方案:

  • 在你的推送循环中你也应该推零,因为现在你的 pop 循环将无法正确找到结束零!

      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