《Intel汇编第5版》 汇编调用子过程

时间:2023-03-08 17:07:33

一、Call和Ret指令

  《Intel汇编第5版》 汇编调用子过程

二、在子过程中需要自己保存可能会修改掉的寄存器值,这里可以使用USES伪指令来生成

  《Intel汇编第5版》 汇编调用子过程

三、一个数组求和的汇编例子

  

 TITLE Call a Proc Demo
INCLUDE Irvine32.inc
includelib Irvine32.lib
includelib kernel32.lib
includelib user32.lib .data
array DWORD 1000h,2000h,3000h,4000h .code ;---------------------------------------------------
;
; Calcute the sum of an array of 32-bit int integers
; Receives: ESI = the array offset
; ECX = the size of array
; Returns: EAX = sum of an array
;--------------------------------------------------- ArraySum PROC push esi
push ecx
mov eax,
L1:
add eax,[esi]
add esi,TYPE DWORD
loop L1 pop ecx
pop esi
ret ArraySum endp ;---------------------------------------------------
;
; Calcute the sum of an array of 32-bit int integers
; Receives: ESI = the array offset
; ECX = the size of array
; Returns: EAX = sum of an array
;--------------------------------------------------- ArraySumWithUses PROC USES esi ecx mov eax,
L2:
add eax,[esi]
add esi,TYPE DWORD
loop L2 ret ArraySumWithUses endp main PROC mov esi,offset array
mov ecx,LENGTHOF array
call ArraySum
call DumpRegs
mov esi,offset array
mov ecx,LENGTHOF array
call ArraySumWithUses
call DumpRegs
ret main endp END main

执行结果:

《Intel汇编第5版》 汇编调用子过程