movs stos rep df
传入函数前首先应参数入栈,最先入栈的为最后的函数形参,想要push一个字符串进去,我们不能简单的push str,我们应该把字符串的地址传入函数参数。所以,我们能否自己实现一个真正的裸函数?即这个函数里连这些汇编指令都没有。任何函数都具有这些操作,所以说一个什么都没有的函数其实并不是空的。我们一般认为它是空的,但是它真的是空的吗?我们在裸函数里自己实现一个小功能?我们省略了填充的过程,运行如下;
解释了底层C语言的语句执行情况,在此后,我也会写很多有意义的C++反汇编的代码,帮助大家理解C/C++的底层含义。
子程序的cx也会返回,进而覆盖了主程序的cx(原本外层的cx用来换行每一个字符串),因此需要利用在进入子程序之前或者进入子程序马上push cx来保存外层的cx,在结束到over或者处理结束进入主程序之后再pop cx得到原来外层的cx,进而进行下一行字符串的处理。由于bx为16位,所以另一个数一定为16位,16位对16位,ax存放一个树,16位reg寄存器存放另一个数。100和10 都是8位(小于256),所以一个数放在al中,另一个数放在另一个8位reg寄存器中,结果放在ax中。
【代码】汇编语言的除法计算。
在主程序中用call去跳转到一个子程序,call保存之后的偏移地址IP,将其压入栈中,以便能够执行完子程序之后返回,call之后,跳转到子程序标号,执行子程序,执行完毕后,使用ret弹出IP栈值,这时的IP指向call之后的地址,因此会跳转回call之后的下一条指令,重新指向主程序。开始时ax=9,执行call ax后,把IP=3入栈,之后跳转到IP=0009(即ax的偏移地址)处。执行完毕后:CS=0000 IP=0123 SP=0EH。call指令:可以将IP或者CS和IP压入栈中。
汇编语言 jmp offset jcxz loop等转移指令的原理
汇编语言(王爽) 实验9 打印字符串以多种不同的颜色
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号