我正在写一个子程序显示(Z,n,flag),其中Z是一个int / string数组,n是数组的长度,flag表示Z是否是字符串或整数数组的地址。
根据标志的值,子程序将Z显示为长度为n的字节数组,将每个字节显示为字符,或者将Z显示为整数数组。
这就是混乱的地方。我很难理解如何区分2地址。我觉得这是非常基本的东西,但我似乎无法弄明白。任何/所有的想法将不胜感激!
答案 0 :(得分:1)
其中Z是一个int / string数组
如果 Z 是整数数组的地址,则地址指向包含这些整数的实际数值的dwords。
mov ebx, Z
mov eax, [ebx] ;value of 1st integer
mov eax, [ebx+4] ;value of 2nd integer
如果 Z 是字符串数组的地址,则地址指向每个指向内存中字符串的地址列表。
mov ebx, Z
mov esi, [ebx] ;address of 1st string
mov al, [esi] ;1st character of 1st string
mov al, [esi+1] ;2nd character of 1st string
...
mov esi, [ebx+4] ;address of 2nd string
mov al, [esi] ;1st character of 2nd string
mov al, [esi+1] ;2nd character of 2nd string
n是数组的长度
n 表示这些数组中有多少元素。在字符串数组的情况下,通过查找终止零来确定单个字符串的长度。