汇编网首页登录博客注册
mr_crbn的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
好友圈
文章收藏

[2019-07-14 17:43] 汇编语言实验八

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
s0:jmp short s
s1:mov ax,0
   int 21h
   mov ax,0
s2: jmp short s1
    nop
code ends 
end start
执行前:把s2的指令写入到s处 s2的指令为 跳转到s1 那么s的指令和s2是一样的,写入完 
之后 执行s0 跳转到s s再跳转到s1。s1处并没发现 mov ax 4c00h这个指令,
__________________________________________________________
执行后:在moa cs:[di],ax之后 执行了 s0处的指令 但是 执行完了
在debug查看的时候发现 发现 s处的指令为jmp 0000。 为什么跳转到是程序的开始呢?
__________________________________________________________
首先程序执行开始时我分析的就不对, 先要认清一个概念, 跳转指令是根据距离标号位 位移来进行跳转的,不是根据标号
的ip偏移地址来跳转的,那么其实 把ip 为 s2中的机器指令复制到s里面 复制的是 s2 在内存单元中的指令,并不是直接把s2处汇编指令给复制下来的
那么复制的 只能是 s2到s1的位移,那么s2到s1的位移为-10(debug 查看可知)那么这串机器指令到了s处 ,向前位移10个字节 刚好指向的下一条指令就是mov ax,4c00h
评论次数(0)  |  浏览次数(517)  |  类型(汇编作业) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码