www.1862.net > 汇编push Ax 会影响Ax

汇编push Ax 会影响Ax

push ax //ax值入栈 pop ds //此时(ds)=(ax) push 4//4入栈

push ax ; ax 的数据压入堆栈pop ax ; 出栈 恢复 ax 数据调用子程序前为了 保存 ax 的数据 不 受到影响,返回时 恢复原来的数据.如果子程序不用到 ax 则可以 省去上述操作.

push ax 是将 ax 寄存器中的值压入栈中,压入后 ax 的值不变.

不会,push ax是把ax里的值压入堆栈.即当前esp-4出的值变为ax的值,ax本身的值不变.pop dx是把当前esp的值赋给dx,并且esp+4(dx的值改变,esp在pop之前指向的地方的值不变,即堆栈里的哪个值不会自动清零)这些东西你可以直接在debug里实践,然后看它们的值,就是实际经验了

起到现场保护的作用,push ds是把ds压入栈保护,,,,

程序加载后,DS存放着程序所在内存的段地址,这个内存区域的前256个字节存放在的是PSP.PSP:程序段前缀,是DOS操作系统在执行程序时为程序所建立的一个信息块, 里面包括了传递给待运行程序的命令行参数, 程序运行结束时返回DOS所需的地址等有用的信息. 汇编程开始时 push ds sub ax,ax push ax 这三条语句是为后面的ret做准备,ret即执行pop ip, pop cs,执行完ip的值为0,cs的值为ds.程序转移到程序PSP的起始地址,起始地址的前两个字节放的是int 20指令,用于返回DOS.不过不推荐这样做,现在常用 mov ax 4c00h int 21h;终止程序,返回值为al.

这个是为了最后返回,push ax 是将偏移地址,其实也就是0压入堆栈,以便以后返回,push ds是将段地址压入堆栈.这一段代码等效于push ah,4chint 21h

寄存器ax,ds的内容(字类型)压入堆栈段,同时sp=sp-2;sp=sp-2,即指针sp上移四个单元

你好!push ax的意思是将ax的数据压入栈 第二句同理 pop ax的意思是将【原来si的数据(后进)】出栈至ax 第四局同理 我的回答你还满意吗~~

main: ;输入AL mov ah, 01h int 21h ;输入的内容,在AL中 push ax ;入栈保护 output INPUT_TIPS ;在这里AL将被变化……

网站地图

All rights reserved Powered by www.1862.net

copyright ©right 2010-2021。
www.1862.net内容来自网络,如有侵犯请联系客服。zhit325@qq.com