汇编 w5

阅读: 评论:0

汇编 w5

汇编 w5

;代码转换
include irvine32.inc
.data	
dat	word 10 dup(?)	;对于这个参数设计模式不太明白
p	word 10 dup(?)
no	word ?
.code	
main	proccall inputpush lengthof datpush offset datcall judgecall outputexitmain	endpinput	proc		;子程序:输入数组push esipush ecxpush ebxpush eaxmov ebx,offset datmov ecx,10xor esi,esistart:	cmp ecx,0jz done1xor eax,eaxcall readint	;这种输出模式每输入一个数都要换行mov dat[esi*2],axinc esidec ecxjmp startdone1:	pop eaxpop ebxpop ecxpop esiret
input	endpjudge	proc		;子程序:判断一个数组中的所有偶数并存放;入口参数:顺序压入数据个数 数据偏移地址push ebp	;将ebp入栈mov ebp,esp	;esp放入ebp中进行操作push ebxpush edipush eaxpush ecxpush edx	;保护寄存器mov ebx,[ebp+8]	;堆栈中取出的偏移地址mov ecx,[ebp+12];堆栈中取出数组个数xor esi,esi	;控制dat数组xor edi,edi	;控制p数组start1:	cmp ecx,0jz done3xor edx,edxxor eax,eaxmov dx,[ebx+esi*2]mov ax,dxand dx,01hcmp dx,01hjz oddmov p[edi*2],axinc edi
odd:	dec ecxinc esijmp start1done3:	mov no,dipop edxpop ecxpop eaxpop edipop ebxpop ebpret 8		;因为主程序压入两个参数,使用堆栈区8个字节	
judge	endp		;返回一个数组output	proc		;子程序:数组输出程序;参数:相关待输出数组xor esi,esixor ecx,ecxmov ecx,dword ptr noxor eax,eaxmov eax,ecxcall writeintcall crlfha6:	cmp ecx,0jz done3xor eax,eaxmov ax,p[esi*2]call writeintcall crlfinc esidec ecxjmp ha6
done3:	ret
output	endp		;无输出end main	;汇编结束
;总结:堆栈传递参数和其他的区别
;提前将数组的数量和偏移量入栈
;在最后要ret 8用于平衡堆栈
;其余的操作没有什么不一样

本文发布于:2024-02-01 01:15:19,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170672132132778.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23