王爽《汇编语言》第3版——实验8

分析实验8:一个奇怪的程序
书上问道程序能否正确的返回
答案:肯定可以
1、分析结果如下:
在这里插入图片描述
debug下的反汇编地址图:
在这里插入图片描述

2、代码:

assume cs:code

code segment
							;地址
	mov ax,4c00h			;0000
	int 21h					;0003	
	start:			
		mov ax,0			;0005
	;------------------------------------
	;nop占用1字节,但是cpu不做任何操作
	;这两个字节的nop是用来存储之后mov cs:[di],ax的指令 jmp short s1,也就是 EBF6,此处的字节偏移恰好是10,所以之后IP-10 = 0 跳转到cs:0000处执行
	s:	nop					;0008
		nop					;0009
	;------------------------------------
		mov di,offset s		;000A	mov di,0008
		mov si,offset s2	;000D	mov si,0020
		mov ax,cs:[si]		;0011	cs:[si]就是cs:[0020],则ax存储的是jmp short s1的操作码EBF6	
		mov cs:[di],ax		;0014 	将ax存储的操作码传给cs:[di] = cs:[0008] = EBF6
	s0:	jmp short s			;0016
									;跳转到s处执行,执行操作码EBF6
									;EBF6 其中偏移量是F6,其二进制11110110,取反:00001001 加1变为补码:0000 1010 就是10
									;IP=IP+所读指令字节数,向前跳10个执行,就是mov ax,4c00h
									;可以正常结束
	s1: mov ax,0			;0018
		int 21h				;001B
		mov ax,0			;001D
	s2: jmp short s1		;0020 机器码是EBF6
		nop					;0022
code ends
end start 
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值