我有一个字符串,我试图找出它的长度。我使用的是rw32-2017。尝试使用repe scasb
扫描字符串,但它根本不会更改ZF。有没有更简单的方法来找出字符串的长度?
我的程序看起来像这样:
%include "rw32-2017.inc"
section .data
; write your data here
string1 db "how long is this string",0
section .text
main:
mov ebp, esp
; write your code here
mov esi,string1
mov eax,0
mov ecx,50 ;max lenght of string is 50
mov ebx,ecx
cld
repe scasb
sub ebx, ecx
mov eax,ebx
call WriteUInt8
ret
答案 0 :(得分:1)
对于SCAS
,您应该将字符串的地址放在EDI
中,而不是ESI
。而不是REPE
你需要REPNE
(重复而不等于ecx!= 0)。
mov edi,string1
mov eax,0
mov ecx,50 ;max lenght of string is 50
mov ebx,ecx
cld
repne scasb ; find AL (0), starting at [ES:EDI]
答案 1 :(得分:1)
len equ $-string1
允许len,您可以将其用作:
mov edx, len