在下面的代码中,我能够反转字符串,但我不知道如何在此代码中添加函数以获得以下结果:
输入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
答案 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