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

相关内容

热门资讯

当APEC遇见深圳:《奇迹》如... (来源:直新闻)今年是亚太经合组织(APEC)“中国年”,也将是深圳首次举办APEC非正式领导人会议...
百果园集团(02411)稀释百... 百果园集团(02411)公布,于2026年2月2日,公司订立增资协议,据此田锡秋先生及赖显阳先生同意...
华纳兄弟股东据悉或在3月就奈飞...   北京时间2月2日晚间消息,据报道,华纳兄弟探索很可能在3月份就向Netflix出售其流媒体和制片...
周生生回应足金挂坠被检出含铁 【#周生生回应足金挂坠被检出含铁#】 #市监局介入周生生足金挂坠检出含铁# 近日,广东清远消费者李女...
中概指数跌幅扩大至1% 格隆汇2月2日|纳斯达克中国金龙指数跌幅扩大,现跌1.0%,最新报7652.47点。小鹏汽车跌超6%...