emu8086程序集如何获取数组长度?
How can we obtain array length in emu8086 assembly?
我想获取emu8086汇编中的数组长度。使用 length
或 sizeof
我得到一个错误:
error-wrong parameter
谁能帮我用其他方法求数组的长度?
A。您可以计算数组结尾 ($
) 和开头 (offset array1
) 之间的差异。您需要在数组定义之后立即进行计算。如果您不这样做,$
已经在程序中指向更靠下的位置了。
array1 db 65,66,67
array1len equ $ - offset array1
array2 db 'Any string is an array too!'
array2len equ $ - offset array2
B。如果已知数组有一些特殊的终止值,那么搜索该值也是找到数组长度的一种方法。考虑一个 ASCIIZ 字符串,一串以零字节结尾的 ASCII 字符:
string db 'Just a text.', 0
下一个循环将产生CX
中的长度(12,当然不包括零字节):
mov si, offset string - 1
back:
inc si
cmp byte ptr [si], 0
jne back
lea cx, [si - offset string]
我想获取emu8086汇编中的数组长度。使用 length
或 sizeof
我得到一个错误:
error-wrong parameter
谁能帮我用其他方法求数组的长度?
A。您可以计算数组结尾 ($
) 和开头 (offset array1
) 之间的差异。您需要在数组定义之后立即进行计算。如果您不这样做,$
已经在程序中指向更靠下的位置了。
array1 db 65,66,67
array1len equ $ - offset array1
array2 db 'Any string is an array too!'
array2len equ $ - offset array2
B。如果已知数组有一些特殊的终止值,那么搜索该值也是找到数组长度的一种方法。考虑一个 ASCIIZ 字符串,一串以零字节结尾的 ASCII 字符:
string db 'Just a text.', 0
下一个循环将产生CX
中的长度(12,当然不包括零字节):
mov si, offset string - 1
back:
inc si
cmp byte ptr [si], 0
jne back
lea cx, [si - offset string]