学习笔记分享之汇编—3. 堆栈&标志寄存器

前言:
  此文章收录在本人的《学习笔记分享》分类中,此分类记录本人的学习心得体会,现全部分享出来希望和大家共同交流学习成长。附上分类链接:
  //www.cnblogs.com/tibbors/category/1729804.html

学习内容:堆栈

image-20200321212731984

  • 堆栈的优点:临时存储大量数据,便于查找
  • 堆栈中越往顶部地址编号越小
  • 压栈出栈变的都是栈顶

堆栈的操作分解:

前提操作:
	MOV EBX,13FFDC	//BASE
	MOV EDX,13FFDC	//TOP


操作一:压入数据
	法一:
	MOV DWORD PTR DS:[EDX-4],0xAAAAAAAA		//先压入数据
	SUB EDX,4								//再上移地址(寄存器)

	法二:
	SUB EDX,4								//先上移地址(寄存器)
	MOV DWORD PTR DS:[EDX],0xBBBBBBBB		//再压入数据
	
	法三:
	MOV DWORD PTR DS:[EDX-4],0xDDDDDDDD		//先压入数据
	LEA EDX,DWORD PTR DS:[EDX-4]			//再通过LEA指令上移地址(寄存器)
	
	法四:
	LEA EDX,DWORD PTR DS:[EDX-4]			//先通过LEA指令上移地址(寄存器)
	MOV DWORD PTR DS:[EDX],0xEEEEEEEE		//再压入数据


操作二:读取某个数据
	法一:
	//通过[BASE+偏移量]读取
	MOV ESI,DWORD PTR DS:[EBX-4]

	法二:
	//通过[TOP+偏移量]读取
	MOV EDI,DWORD PTR DS:[EDX+4]


操作三:弹出数据
	法一:
	MOV ECX,DWORD PTR DS:[EDX]				//先弹出数据(保存到其他存储空间)
	LEA EDX,DWORD PTR DS:[EDX+4]			//再下移地址(寄存器)

	法二:
	MOV ESI,DWORD PTR DS:[EDX]				//先弹出数据(保存到其他存储空间)
	ADD EDX,4								//再下移地址(寄存器)
	
	法三:
	LEA EDX,DWORD PTR DS:[EDX+4]			//先下移地址(寄存器)
	MOV EDI,DWORD PTR DS:[EDX-4]			//再弹出(下移前地址)数据(保存到其他存储空间)

堆栈的专用操作:

  • 操作系统默认把ESP当栈底,EBP当栈顶
  • PUSH(压栈) = 操作一
  • POP(出栈) = 操作三