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

目录

案例分析

案例一代码

分析

案例二代码

知识补充


案例分析

案例一代码

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

相关内容

热门资讯

持续爆单!“满18减18”,有... 来源:温州都市报 “换了三拨,骑士也累了。”“我的外卖小哥说‘放到电梯里了,我按电梯了’,不送上来,...
港澳大学生逐浪海南自贸港:从骑... 中新网海口7月13日电 (黄方舟)“咔嚓、咔嚓——”清脆的快门声在海口骑楼老街的拱廊间此起彼伏,来自...
女子喝了网购现挤鲜奶高烧不退,... 转自:扬子晚报为了追求更高的营养价值,部分消费者热衷网购鲜牛奶、羊奶,多个电商平台均有售现挤鲜奶的产...
高端媒体看邯郸丨邯郸倾力实施东... 转自:邯郸网络广播电视台促进全市区域协调发展取得实质性提升邯郸倾力实施东部补短板行动今年起,邯郸市实...
每日网签 | 7月12日北京新... 转自:北京商报北京商报讯(记者 王寅浩 李晗)北京市住建委官网数据显示,7月12日北京新房网签497...
梦比优斯奥特曼中第35集希卡利... 梦比优斯奥特曼中第35集希卡利说的蓝色巨人是高斯奥特曼吗首先,从奥特世界观的角度来看,不可能,因为高...
今天18:00截止!河南公布普... 本文来自微信公众号“大象新闻”我省2025年普通高校招生普通本科提前批、体育本科批按程序投档录取后,...
外卖骑手怎么加入需要什么条件?...   现在的外卖平台越来越多,骑手也是必不可少的。目前最熟知的是美团和饿了吗,是大家经常用到的,非常受...
同城达达快递怎么叫?达达收费明...   现在配送的平台很多,在生活中也离不开大家,网上购买东西达达也可以配送,想必大家都有使用过,可以说...
追忆最初的文科人:朱光潜、伯林... 在历史上,有那么一本书,自它面世后,“人文世界”与“自然科学世界”的边界及争议也就同时形成了。这就是...