汇编语言:奇怪的程序?

分析下面的程序,然后再在Debug程序中单步执行,观察每一步完成后的结果,并解释出现的现象。
程序如下:

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

分析:
取了s和s2标号的地址分别放入di和si中,
然后把s2标号处的代码的机器码放入ax,
然后把ax的内容放入标号s的地址处,
执行s0处的代码,即跳转到标号s处,
标号s处对应的是标号s2处的代码,所以执行跳转到标号s1处,而s1处的代码对应的即为0地址处,所以直接跳转到地址为零的地方执行了结束语句。
总结:
从这个程序中,我们可以看到结束语句并不一定放到最后,在需要的时候可以通过跳转跳到结束语句

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值