如何找出字符串长度

时间:2017-04-08 09:47:39

标签: assembly

我有一个字符串,我试图找出它的长度。我使用的是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

2 个答案:

答案 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