2.9-2.12段寄存器和cs:ip

段寄存器有四类: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

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值