汇编 什么时候需要push pop,我见有些代码没有用也没出

__asm
{
//保存写入前的数据,用于驱动卸载恢复。
mov ebx,dangqian //将dangqian的地址给EBX
lea ecx,yuanshidate //将yuanshidate的地址给ECX
mov al,byte ptr [ebx] //取EBX的第一个字节给AL
mov byte ptr [ecx],al //AL 内容以字节方式写入ECX=yuanshidate里
mov eax,[ebx+1] //EBX=dangqian的地址+1的4字节内容给EAX
mov [ecx+1],eax //EAX的内容写入ECX=yuanshidate的地址+1偏移处。

///////////////////////////
//写入数据
mov ebx,dangqian //将dangqian的地址给EBX
lea ecx,JmpDate //将JmpDate结构的地址给ECX
mov al,byte ptr [ecx] //取出JmpDate结构地址的第一个字节给AL
mov byte ptr[ebx],al //al=JmpDate.E9 ,将数据写入到EBX=dangqian的地址中。
mov eax,[ecx+1] //[ECX+1]=JmpDate.JMPADDR ,将数据写入到EAX里保存
mov [ebx+1],eax //将EAX的数据写入到EBX+1=dangqian的地址+1偏移处。

}
上面这段C++内敛汇编怎么不用成对的push pop哪?
是不是一段汇编代码只要不涉及运算就可以不需要push pop ?

push pop 是用来堆栈的。也就是一个寄存器原先有数据,后来又要有新的数据写入,原先的数据又有用处,这时候就要用push pop,先把原先的数据存着,这样有新数据写入原先的数据就不会丢掉,等要用的时候再拿出来。如果只要刷新数据,原先的数据不用了,就不用push pop。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-02-06
这题目,和PUSH、POP,有什么关系?追问

上面的代码是对的,没有错误,我就是想知道上面的代码干嘛不在
汇编的开头用上
push eax
push ebx
push ecx
结尾用上pop eax,如下面写入数据
pop ecx
pop ebx
pop eax

追答

汇编 什么时候需要push pop
--当主函数中寄存器(或存储空间)中的内容,不想被子函数破坏的时候,就可以用PUSH、POP来保护与恢复。(当然,也可以用其它的方法来保护。)

我见有些代码没有用也没出
--那就是说,这个程序中,并没有什么可以保护、恢复的。

楼主给出的程序,有什么东西需要保护和恢复吗?

楼主说:上面的代码是对的,没有错误,这就说明,不用保护和恢复。

那么:汇编的开头用上:
push eax
push ebx
push ecx
加上这几行,还想要保护什么呢?

本回答被提问者采纳

汇编 什么时候需要push pop,我见有些代码没有用也没出
push pop 是用来堆栈的。也就是一个寄存器原先有数据,后来又要有新的数据写入,原先的数据又有用处,这时候就要用push pop,先把原先的数据存着,这样有新数据写入原先的数据就不会丢掉,等要用的时候再拿出来。如果只要刷新数据,原先的数据不用了,就不用push pop。

汇编 什么时候需要push pop,我见有些代码没有用也没出错
push和pop用于变量只是保存数值而已,例如把b的值给c,只能用a传数,就写成 push a a =b c =a pop a 等同于 d =a a =b c =a a =d

汇编语言字符串复制指令?PUSH和POP指令必须成对出现吗?如果不必要那在...
根据我的理解,PUSH和POP并不是非用不可的指令,无非是临时保护一下有可能会被破坏的寄存器数据,你也可以手动将这些数值保存到一个中间暂存的寄存器,等突发事件(通常是中断)过后,再把原来的值取回来,效果一样,但你必须设置一些寄存器来做暂存器。但是用PUSH和POP可以更方便地保存一大堆需要保护的...

汇编push和pop指令
push指令用于将寄存器中的数据压入栈中,pop指令则用于从栈中弹出数据到寄存器中。具体操作如下:push寄存器:将指定寄存器的内容压入栈顶。pop寄存器:从栈顶弹出数据到指定寄存器中。下面通过一段汇编代码演示栈操作的实现过程,代码使用MASM编辑器进行编写(假设使用了王爽的环境配置)。假设选择10000H至100...

汇编中pop和push是成对使用的,如果我只用push不用pop,最后执行时会出现...
call的时候会将下一条指令地址压栈,retn的时后会pop一次,弹出之前保存的eip,然后将当前eip的值还原,这样才能实现整个call的正常调用。如果调用的时候堆栈没平衡好,就比如lz说的push之后忘了pop,那么程序执行retn的时候,还是会认为栈顶是保存的eip值,照样会设置eip的值,这样程序就乱套了,给什么...

汇编里的"PUSH"和"POP"起了什么功能,,谁能用通俗点的话告诉我吗???
如果什么都没有装时,桶顶和桶底相等,当装一层沙子后,桶顶升高(即栈顶地址-2,相当于入栈PUSH),再装一层水泥,桶顶再次升高,(即栈顶地址又-2),当你往出倒东西的时候,你先倒出最上层的水泥,桶顶下降(即栈顶地址+2,相当出栈POP),然后你才能倒出沙子。所以堆栈是先进来的先出去...

汇编语言中,PUSH和POP对CS:IP有什么影响?
PUSH和POP指令一般用在调用子程序之前用来保护现场,以便返回时返回到正确的代码处。在中断时,系统也默认的会将一些寄存器的值压入堆栈。PUSH指令,将IP压栈,用于保存断点,SP先减2指向栈顶,再将IP(16位地址,即一个字)低八位存进低地址((SP)=IP低八位)),高八位存进高地址(SP+1)=IP...

单片机汇编语言中push与pop
只写这么些就问错误原因,其它的怎么写的呢,暂就按这些分析吧 push direct pop 30H 1,这是两条指令,要写成两行 push direct pop 30H 2,在push direct 指令中出现了字符direct,在程序的前面要用伪指令来定义才行的,如 direct EQU 31H; 这个地址要根据你的需要来定义的。

什么是push ,pop
1.push就是推,延伸为推进。这个它是汇编的一个指令,当然你也可能在其它语言中见到它。意思都是差不多的,就是把一个元素放入栈中。2.pop和push相反,它的意思是弹出,就是从栈里弹出一个元素,每次弹出的都是栈顶(光盘盒最上面那个,也就是最后放进去的那个)的那个元素。

汇编中push cs有意义吗,不是不能pop cs.
有,不可以pop cs并不代表不能修改CS,push cs后pop到其他寄存器,总是有用的

相似回答
大家正在搜