【汇编】用栈传参的案例及分析
创始人
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

相关内容

热门资讯

墨韵承古意 文心写春秋 宏基始创凭耕凿;盛德长垂励后昆。 撰联 陈新长 书者 陈新长 水秀山青,未许寻常人领趣;...
强化党建引领 提升育人实效 王成涛 高校是落实立德树人根本任务的主阵地,承担着培养德智体美劳全面发展的社会主义建设者和接班人的重...
去年全国演出票房收入616.5...   2025年10月7日晚,游客在河北省唐山市丰南区河头老街景区观看演出。 新华社发  本报记者 韩...
东西城推动中轴线文保示范区创建   本报讯(记者 张骜)围绕中轴线系统性保护与提升,核心区将有哪些新动作?昨天,记者从东城区两会发布...
我省畅联“软联通”激活辐射中心... 转自:云南日报从制度创新到要素流动,从金融互联到贸易畅通……云南建设我国面向南亚东南亚辐射中心10年...