【汇编】用栈传参的案例及分析
创始人
2024-06-02 00:47:53

目录

案例分析

案例一代码

分析

案例二代码

知识补充


案例分析

案例一代码

bubbleSort proc
;bubbleSort(int *arr,int len) call C style
;input:
;push len
;push offset arrpush ebpmov ebp,esppushadmov edx,[ebp+8]mov ecx,[ebp+12]mov  esi,0;i=esisub  ecx,1;ecx=n-1
again_1: cmp  esi,ecx jge  final_1mov  edi,0;j=edimov  ebx,ecxsub  ebx,esi
again_2: cmp  edi,ebx;ebx=n-1-i jge  final_2mov  eax,[edx+4*edi]cmp  eax,[edx+4*edi+4]jle  nextpush [edx+4*edi+4]pop  [edx+4*edi]mov  [edx+4*edi+4],eax
next:	 inc  edijmp   again_2
final_2:	 inc esijmp again_1
final_1: popadpop ebpret 8
bubbleSort endpoutput proc
;output(int *arr ,int len)
;input:
;edx=arr
;ecx=lenpushadmov esi,0
again:	cmp esi,ecxjge finalmov eax,[edx+4*esi]call writeintmov  al,' 'call writecharinc  esijmp again
final:	popadret
output endp

分析

push len
push offset arr

先将长度和首地址进行入栈

push ebp
mov ebp,esp
pushad

将ebp进栈方便对len和arr进行寻址,将各寄存器进栈

mov edx,[ebp+8]
mov ecx,[ebp+12]

此时edx,ecx分别为arr首地址和长度

进行逻辑运算后

popad
pop ebp

ret 8

将各寄存器出栈,将ebp出栈,ret 8让栈平衡

案例二代码

  • 源代码
void insertionSort( int arr[], int n){
int i;
for(i = 1; i < n; i++) {
insert(arr, i);
}
}void insert ( int arr[], int n){
int key = arr[n];
int i = n;
while (arr[i - 1] > key) {
arr[i] = arr[i-1];
i--;
if(i == 0) break;
}
arr[i] = key;
}
  • 汇编代码 
INCLUDE Irvine32.inc
.data
arr dd 99, 2, 3, -11, 22, 88, 7, 77, 547, 717, -54
len dd ($-arr)/4
a dd ?
.code
insert PROC
;arr,a(i)
push ebp
mov ebp,esp
pushad
mov ebx,[ebp+8];ebx=i(n)
mov eax,[ebp+12];eax=arr
mov ecx,[eax+ebx*4];ecx=key
again:
cmp [eax+4*ebx-4],ecx
jle final
mov edx,[eax+4*ebx-4]
mov [eax+4*ebx],edx
sub ebx,1
cmp ebx,0
je final
jmp again
final:mov [eax+4*ebx],ecxpopadpop ebpret 8
insert ENDPmain PROC
mov a,1
again:
mov eax,a;a为下标(eax)
cmp eax,len;(len=n)
jae myout
push offset arr
push a
call insert
add a,1
jmp againmyout:mov ebx,0again2:cmp ebx,lenjae final2mov eax,arr[ebx*4]call WriteIntadd ebx,1jmp again2final2:exit
main ENDP
END main

知识补充

  • 寄存器批量进(出)栈

  •  数据交换

  • 换行函数

call crlf

相关内容

热门资讯

阳光电源取得储能一体机相关专利... 5月9日消息,国家知识产权局信息显示,阳光电源股份有限公司申请一项名为“一种储能汇流升压一体机、储能...
阳光电源取得电力转换装置相关专... 5月9日消息,国家知识产权局信息显示,阳光电源股份有限公司申请一项名为“电力转换装置以及储能系统”的...
迁西大黑汀成京津冀 短途游“香... (来源:唐山劳动日报) 近期,迁西县大黑汀水库畔迎来露营热潮,成为京津冀市民短途出游的热门选择。湖畔...
宁德时代申请电池单体相关专利,... 5月9日消息,国家知识产权局信息显示,宁德时代新能源科技股份有限公司申请一项名为“电池单体、电池装置...
邱姓股民向*ST雅博发起索赔 ...   受损股民可至Hehson股民维权平台登记该公司维权:http://wq.finance.sina...