给出下列编程代码的参数传递方式 include io32.inc .data array byte 'Hello ' .code start: mov eax,offset array ;将数组主存偏移地址给eax mov ecx,lengthof array ;ecx存放字节数 call dispmem ;调用子程序按字节从低地址到高地址输出 jmp done ;子程序部分 dispmem proc push eax ;保护eax push ecx ;保护ecx mov ebx,eax ;先把整体32位传给ebx,ebx做数组指针 again: mov eax,[ebx] ;把数组中元素传给eax,ebx指向代码表 call disphb ;十六进制字节显示子程序 mov eax, 32 ;输出空格 call dispc inc ebx ;指针移动 loop again dispmem endp ;子程序结束 done: exit 0 end start
时间: 2023-06-18 21:02:03 浏览: 155
关于C#参数传递的方法
该代码使用的是寄存器传递参数的方式。具体如下:
1. mov eax,offset array:将数组主存偏移地址给eax,即将数组的首地址传递给eax寄存器。
2. mov ecx,lengthof array:将数组的长度(字节数)存放在ecx寄存器中,即将数组的长度传递给ecx寄存器。
3. push eax:将eax寄存器的值(即数组的首地址)压入栈中,为调用子程序做准备。
4. push ecx:将ecx寄存器的值(即数组的长度)压入栈中,与eax寄存器的值一同传递给子程序。
5. 调用子程序dispmem,该子程序将按字节从低地址到高地址输出数组中的每个元素。
6. dispmem子程序中,首先使用mov ebx,eax将eax寄存器的值(即数组的首地址)传递给ebx寄存器,使ebx成为数组的指针。
7. 接着使用mov eax,[ebx]将数组中的元素传递给eax寄存器。
8. 调用子程序disphb,该子程序将以十六进制形式显示eax寄存器中的字节。
9. 使用mov eax,32将ASCII码为32的空格字符传递给eax寄存器。
10. 调用子程序dispc,该子程序将以字符形式显示eax寄存器中的字符,即输出一个空格字符。
11. 使用inc ebx将指针ebx加1,指向数组中的下一个元素。
12. 使用loop again实现循环,重复执行步骤7至步骤11,直到数组中的所有元素都被输出。
13. dispmem子程序结束。
因此,该代码使用的是寄存器传递参数的方式。
阅读全文