码迷,mamicode.com
首页 > 编程语言 > 详细

汇编语言实验8

时间:2015-05-12 13:18:02      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:

assume cs:code

code 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//把s2处的两个字节传到s处 即把jmp short s1传到s处

s0:jmp short s

s1:mov ax,0
int 21h
mov ax,0

 s2:jmp short s1
 nop

code ends
end start

 

问题奇怪的是执行程序过程中 当执行到jmp short s处 dos显示 jmp 0008 只是没问题的 但再执行 即此时已经传过来的jmp short s1时

dos显示 jmp 0000 有没有搞错? s1明明在下面好不好!

 

解释:内部传过来的不是Jmp short s1而是其对应的ASCII码 而根据jmp short的内部转移机制 其ascii码代表的是其相对当下地址的转移地址(也是因为该原因 只能在一个字节内转移 且只需2个字节就能储存完(其中一个字节表示偏移量 一个表示jmp)) 故真正转移过来的代码 代表的意思是向上偏移8个字节(根据原来jmp short s1跳到s1算出的) 此时cp=8 故jmp 0000了

 

汇编语言实验8

标签:

原文地址:http://www.cnblogs.com/aloney/p/4496679.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!