【发布时间】:2019-07-10 20:19:48
【问题描述】:
我想将字符串的结束字符与句点进行比较。
我计算了字符串的长度并将其保存在名为strlen 的变量中。所以,我做了cmp [string + strlen], '.',但它没有用,然后,我尝试将strlen 移动到一个寄存器,但它也不起作用。程序崩溃。我使用的是 x86 32 位 Windows 10 架构
MOV BL, [strlen-1] ;the length of the string minus 1 so i would end up
in the last character of the string
cmp [string + BL], '.'
JE func1
【问题讨论】:
-
您不能在寻址模式中使用
bl。请在问题中输入您的实际代码.. -
是的,我也尝试过使用 eax,但效果不佳
-
使用寄存器,而不是静态的
[strlen]。这就是寄存器的用途。尤其是不要在循环内增加内存位置;这是一个主要瓶颈(比如 6 个周期而不是 1 个。)您已经在递增一个指针,所以如果您想获得长度,只需在末尾做一个指针减法,给定一个指向开始和结束的指针。 -
您的编辑使问题和答案毫无意义。这不会组装(因为您复制的答案的第一个版本有错误,现在已修复),答案是回答您问题的旧版本。我把它回滚了,但实际上 `[string + BL]` 也不会汇编,所以这不是你的代码的 minimal reproducible example 汇编 + 运行但也崩溃了。
标签: variables assembly x86 nasm