2.9

阅读: 评论:0

2.9

2.9

段寄存器有四类:cs,ds,ss,es.
其中,cs是代码寄存器,它指向的代码段是一组地址连续,起始地址为16的倍数的内存单元。这个代码段可以存储长度为N(N<=64KB)的一组代码。
而与之相关联的是IP(指令指针寄存器),
步骤如下:
(1)cs:ip在地址加法中获得内存地址(csX16+ip),然后将通过输入输出控制电路和20位地址总线获得内存地址,将指令通过数据总线和输入输出控制电路放到指令缓冲区,
(2)ip=ip+指令长度,指向下一条指令
(3)执行指令缓冲器中的指令,再返回步骤(1)

如下图所示

在跳转指令时,用jmp ,
如:jmp ax,相当于mov ip,ax。
即用ax的值赋给ip,从ax开始执行指令。

看看问题2.3,执行序列,初始化cs=2000H,ip=0000H

分析下:

指令必然执行从cs:ip所指向的地址。
初始化时:cs=2000H,ip=0000H,那么地址是cs*16+ip=20000H,执行mov ax,6622H。结果是ax=6622H,cs=2000H,ip=0003H.
继续执行20003H, jmp 1000:3,此时改变cs=1000H,ip=0003H
继续执行10003H,mov ax,0000,结果是ax=0000H,cs=1000H,ip=0006H,
继续执行10006H,mov bx,ax,结果是ax =0000H,bx=0000H,cs=1000H,ip=0008H
继续执行10008H, jmp bx,结果是cs=1000H,ip=0000H
继续执行10000H,mov ax,0123H结果是ax=0123H,cs=1000H,ip= 0003h
继续执行10003h,mov ax,0000,结果是ax=0000H,cs=1000H,ip=0006H,

开始循环了.

看看答案,OK

我认为每次执行指令都会修改ip的值,由于第二步ax=0,所以在第三步跳转到ax是,ip=0.

运行下看看

ok

本文发布于:2024-02-01 00:35:28,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170671892832544.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23