You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

字符串对齐函数异常:为何文本未按预期对齐?

字符串对齐函数未按预期工作的问题分析

你的汇编实现代码存在多处逻辑错误,导致三种对齐方式都无法正确工作,以下是具体问题:

1. 寄存器滥用与计算逻辑混乱

在pad_spaces段,代码将总需填充的空格数(size - 输入长度)存入ebx,但后续对齐分支的逻辑完全偏离预期:

  • 居中对齐时,shr ebx,1计算出左侧应填充的空格数,但后续代码完全没有处理左侧空格的填充,仅在输入字符串后补了部分空格。
  • 右对齐时,错误地将空格填充在输入字符串右侧,而非左侧;左对齐时则完全没有填充右侧的补位空格。

2. 对齐方向完全颠倒

右对齐(align=2)分支错误

右对齐要求输入字符串靠右侧,左侧补空格,但代码逻辑是:

  1. 错误地在输出起始位置提前设置终止符(随后被输入字符串覆盖)
  2. 将输入字符串从输出缓冲区起始位置开始复制
  3. 在输入字符串右侧填充空格
    最终得到的是左对齐的结果(如Hello ),而非预期的 Hello。

左对齐(align=0)分支错误

左对齐要求输入字符串靠左侧,右侧补空格,但代码仅复制了输入字符串,未填充右侧的补位空格,且提前在output+空格数位置设置的终止符被输入字符串覆盖,最终输出长度远小于指定的size。

居中对齐(align=1)分支错误

居中对齐需要先填充左侧空格,再复制输入字符串,最后填充右侧剩余空格,但代码:

  1. 未处理左侧空格的填充
  2. 仅在输入字符串后填充了总空格数的一半(shr ebx,1的结果),未处理剩余的1个空格(当总空格数为奇数时)
    最终输出既不居中,长度也不达标。

3. 终止符处理错误

所有对齐分支中提前设置终止符的操作完全多余,且会被后续的字符串复制操作覆盖。正确的做法应该是在填充完所有空格和输入字符串后,在output[size-1]位置设置终止符(保证输出缓冲区的所有字节都被正确填充)。


内容的提问来源于stack exchange,提问作者Jakub Nevrlý

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 05:24:52