我对大会相当陌生(老实说,一般来说,编程)。我正在尝试使用堆栈。 这段代码的目的:
- 输入一个字符串,限制为 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
结束主