我对大会相当陌生(老实说,一般来说,编程)。我正在尝试使用堆栈。 这段代码的目的:
- 输入一个字符串,限制为 80 个字符
- 重新打印输入的字符串
- 打印每个字符,因为它被推入堆栈
- 打印从堆栈中弹出的每个字符
- 打印反转的字符串。
代码在最后一步失败。
如果输入的字符串是“帮助”,它会打印出“pleHe”。最终字符串中的最后一个字符是原始字符串的第二个字符。
请帮我看看我在哪里搞砸了!
。数据 缓冲区字 81 DUP(0) 字节数 WORD ? 。代码 主进程 call Clrscr ;清屏 回复: mov edx, OFFSET buffer ; 将字符串移动到 edx mov cl, [SIZEOF buffer]-1 ;将循环计数器设置为(缓冲区大小)-1 call ReadString ;读取用户的字符串 mov byteCount, ax ;移动用户字符串的大小到字节数 cmp byteCount, 80 ;比较 byteCount 和 80 ja RS ;如果 byteCount 大于 80,请求另一个字符串 call WriteString ;将用户的字符串写入屏幕 call Crlf ;换行 call reverseIt ; 反转字符串的顺序 出口 反向程序 movzx ecx, byteCount ; 将 Loop1 计数器设置为字符串的大小 mov esi, 0 ;将 ESI 归零 L1: ;Loop1 - 一次将字符串推入堆栈一个字符 movzx eax, buffer[esi] ;取消引用缓冲区并放入eax call Crlf ;换行 call WriteChar ;将当前字符打印到屏幕上 push eax ;将当前字符压入堆栈 inc esi ; 移动到下一个字符 循环 L1 呼叫 Crlf movzx ecx, byteCount ; 将 Loop2 计数器设置为字符串的大小 mov esi, 0 ;将 ESI 归零 L2: ;Loop2 - 以相反的顺序将字符弹出回字符串 pop eax ;从栈顶取出字符 call Crlf ;换行 call WriteChar ;将当前字符打印到屏幕上 mov buffer[esi], ax ;将字符写入字符串 inc esi ;增加esi 循环 L2 call Crlf ;换行 call Crlf ;换行 mov edx, OFFSET buffer ; 将字符串移动到 edx 用于 WriteString call WriteString ;将字符串打印到屏幕上 call Crlf ;换行 ret ;返回主程序 反向ENDP 主要ENDP 结束主