汇编中push寄存器的影响

简介: 由于汇编代码中的不同位置 ESP+40所指的地址不像EBP+40的地址那个是一定的,ESP+40指向的地址由栈顶变化影响。也就是和操作栈指令 PUSH POP 等影响。   汇编栈是一个线性的地址区间,地址上面小大面大。

由于汇编代码中的不同位置 ESP+40所指的地址不像EBP+40的地址那个是一定的,ESP+40指向的地址由栈顶变化影响。也就是和操作栈指令 PUSH POP 等影响。

 

汇编栈是一个线性的地址区间,地址上面小大面大。如下图所示,ESP指向栈顶地址

 

PUSH 寄存器相当于 ESP减4。由此可推算

 

那么则有如下公式

前面PUSH数目为PUSH_COUNT

前面POP数目为POP_COUNT

ESP基础值为 B_ESP

则汇编代码中的 ESP+OFFSET = ESP基础值+OFFSET-PUSH数*4。

则有计算代码中ESP+XX的地址实际相对于基础EPS有如下公式:  ESP+OFFSET = B_ESP + OFFSET-(PUSH_COUNT*4)+(POP_COUNT*4)。

那么定一相值,就可以使汇编代码中所有 ESP+XXX。转换为基础值+XXX 这样即可增加汇编代码可读性。

 

相关文章
|
6月前
|
存储 程序员
【汇编】“转移”综述、操作符offset、jmp指令
【汇编】“转移”综述、操作符offset、jmp指令
338 1
汇编(五)栈、CPU提供的栈机制、push、pop指令
汇编、栈、CPU提供的栈机制、push、pop指令、编程、汇编语言
30934 2
8086 汇编笔记(九):call 指令 和 ret 指令
8086 汇编笔记(九):call 指令 和 ret 指令
8086 汇编笔记(十):标志寄存器
8086 汇编笔记(十):标志寄存器
|
6月前
|
存储
8086 汇编笔记(二):寄存器(内存访问)
8086 汇编笔记(二):寄存器(内存访问)
|
6月前
|
存储 程序员 开发者
深入理解汇编:push、pop、add、sub、lea 指令详解
深入理解汇编:push、pop、add、sub、lea 指令详解
756 1
|
6月前
|
存储 程序员 数据处理
【汇编】mov和add指令、确定物理地址的方法、内存分段表示法
【汇编】mov和add指令、确定物理地址的方法、内存分段表示法
651 1
【汇编】mov和add指令、确定物理地址的方法、内存分段表示法
|
6月前
|
编译器 存储 网络协议
【汇编】CS、IP寄存器与代码段,用汇编语言写的源程序,jmp指令
【汇编】CS、IP寄存器与代码段,用汇编语言写的源程序,jmp指令
274 1
【汇编】CS、IP寄存器与代码段,用汇编语言写的源程序,jmp指令
|
6月前
|
存储 程序员 开发者
【汇编】其他转移指令、call指令和ret指令
【汇编】其他转移指令、call指令和ret指令
188 2
|
存储 缓存
当执行汇编指令MOV [0001H] 01H时,计算机都做了什么?
今天和几位单位大佬聊天时,讨论到一个非常有趣的问题-当程序执行MOV [0001H], 01H计算机实际上都做了哪些工作?乍一看这个问题平平无奇,CPU只是把立即数01H放在了地址为0001的内存里,但仔细想想这个问题远没有那么简单,由于现代计算机体系中CPU速度比内存要快2到3个个数量级,因此从CPU执行MOV指令,到实际把01H写入内存之间,还有非常漫长而复杂的过程。