王爽汇编实验9

这个是自己的一点理解,首先上源代码:

assume cs:codesg
codesg segment
	mov ax,4c00h
	int 21h
	start: mov ax,0
	    s:  nop
	    	nop
	    	
	    	mov di,offset s
	    	mov si,offset s2
	    	mov ax,cs:[si]
	    	mov cs:[di],ax
	    	
	    s0:	jmp short s
	    s1:	mov ax,0
	    
	    	int 21h
	    	mov ax,0
	    s2: jmp short s1
	    	nop
codesg ends
end start


-------------------------------------------------说明分割线----------------------------------------------------------------------------------------------------------------------------------------------------------------

	    	mov di,offset s
	    	mov si,offset s2
	    	mov ax,cs:[si]
	    	mov cs:[di],ax

下面这个代码实际是将s2处的代码复制到s处,执行完之后代码在内存中就变成了下面的样子:


assume cs:codesg
codesg segment
	mov ax,4c00h
	int 21h
	start: mov ax,0
	    s:  jmp short s1
	    	nop
	    	
	    	mov di,offset s
	    	mov si,offset s2
	    	mov ax,cs:[si]
	    	mov cs:[di],ax
	    	
	    s0:	jmp short s
	    s1:	mov ax,0
	    
	    	int 21h
	    	mov ax,0
	    s2: jmp short s1
	    	nop
codesg ends
end start


然后当执行到

s0:	jmp short s

的时候,然后下一条它实际执行的是:

s:  jmp short s1
 

注意,jmp是ip的值,也就是代码执行的偏移量,在原来的代码里面

s2: jmp short s1
 

jmp的偏移量是-3(向上的第三条指令),也就是会跳到s0

但是现在实际执行的是:

s:  jmp short s1

jmp依然是跳转到-3(向上的第三条指令)的指令处执行,跳转就跑到了

	mov ax,4c00h
	int 21h


然后正常结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值