有趣的汇编

思考retf指令

assume cs:code,ss:stack

stack segment
	db 16 dup(0)
stack ends

code segment 
		mov ax, 4c00h
		int 21h
		
	start:
		mov ax, stack
		mov ss, ax
		mov sp, 16
		mov ax, 0 
		push cs
		push ax
		mov bx, 0
		retf

code ends
end start

在这里插入图片描述
思考:为什么执行mov ss,ax后 cs进入了栈 01a4又是什么
在这里插入图片描述
此时ax寄存器中的值进栈,sp-2
在这里插入图片描述
此时cs为什么发生变化?
应该是先ip入栈但实验结果为cs先入栈又是为何?且cs为何不是0000而是01a4呢?
为什么没执行第一行的程序 mov ax, 4c00h呢?

下面看ret指令

assume cs:code,ss:stack

stack segment
	db 16 dup(0)
stack ends

code segment 
		mov ax, 4c00h
		int 21h
		
	start:
		mov ax, stack
		mov ss, ax
		mov sp, 16
		mov ax, 0 
		push ax
		mov bx, 0
		ret

code ends
end start

在这里插入图片描述

执行mov ss,ax后 cs进入了栈 01a4又是什么
在这里插入图片描述
结果同上
在这里插入图片描述

感觉现实栈清零,然后cs入栈,ip在入栈?但IP为什么不是0000,而是01a4?
且与retf指令不同的是,ret指令cs未变,而retf执行后cs发上变化?
ret执行后跳转至mov ax, 4c00h,而retf指令去没有,以为cs变化了?

retf程序少了一句 push cs 严重错误

assume cs:code,ss:stack

stack segment
	db 16 dup(0)
stack ends

code segment 
		mov ax, 4c00h
		int 21h
		
	start:
		mov ax, stack
		mov ss, ax
		mov sp, 16
		mov ax, 0 
		push cs
		push ax
		mov bx, 0;这一句的作用是什么呢?
		ret

code ends
end start

在这里插入图片描述
依旧是cs 和01a4入栈
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
mov bx, 0;这一句的作用是什么呢?

在这里插入图片描述
现在唯一的问题就是 mov ss, ax 后栈中出现的变化的问题,日后进行深入研究

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值