我正在处理程序集中的函数,我需要计算空终止数组中的字符。我正在使用visual studio。该数组是用C ++编写的,内存地址传递给我的汇编函数。问题是,当我达到null(00)时,我的循环没有结束。我尝试过使用test
和cmp
,但似乎比较了4个字节而不是1个字节(字符大小)。
我的代码:
_arraySize PROC ;name of function
start: ;ebx holds address of the array
push ebp ;Save caller's frame pointer
mov ebp, esp ;establish this frame pointer
xor eax, eax ;eax = 0, array counter
xor ecx, ecx ;ecx = 0, offset counter
arrCount: ;Start of array counter loop
;test [ebx+eax], [ebx+eax] ;array address + counter(char = 1 byte)
mov ecx, [ebx + eax] ;move element into ecx to be compared
test ecx, ecx ; will be zero when ecx = 0 (null)
jz countDone
inc eax ;Array Counter and offset counter
jmp arrCount
countDone:
pop ebp
ret
_arraySize ENDP
如何只比较1个字节?我只是想改变我不需要的字节,但这似乎浪费了一条指令。
答案 0 :(得分:1)
如果要比较单个字节,请使用单字节指令:
mov cl, [ebx + eax] ;move element to be compared
test cl, cl ; will be zero when NUL
(请注意,零字符是ASCII NUL,而不是ANSI NULL值。)