第二章 寄存器(三)

作者:杏彩

零星记录:

2.9 段寄放器

段存放器便是提供段地址的。

8086有4个段存放器:CS、 DS、 SS、 ES

当8086CPU要走访内部存款和储蓄器时,由着4个段存放器提供内部存款和储蓄器单元的段地址。

王爽第三版遵照课后演习题顺序,结合课本读书效果更佳,轻巧的主题材料不再提出

  8086CPU存放器都为十三个人的,可贮存三个字节;AX、BX、CX、DX那4个贮存器是普通用来寄放平时性的多寡,被誉为通用存放器。
  AX:

2.10 CS和IP

CS和IP是8086CPU中最器重的存放器,它们指令了CPU当前要读取指令的地址。

CS为代码段贮存器,IP为命令指针存放器

图片 1

     1.初步状态(CS:3000H,IP:0000H,CPU将从内部存款和储蓄器三千Hx16+0000H处读取指令推行)

     2.CS、IP中的内容送入地址加法器(地址加法器实现:物理地址=段地址x16+偏移地址)

     3. 地点加法器将物理地址送入输入输出调节电路

     4. 输入输出调控电路将概略地址三千0H送上地址总线

     5. 从内部存款和储蓄器两千0H单元开首寄放的机器指令B8 23 01 通过数量总线被送入CPU中

此处作者有贰个吸引,为何它了然要读取B8 23 01吗?它是怎么明显那是三个完全的通令?CPU怎样剖断指令长度那边给出了相比较清楚的答案。

     6. 输入输出调节电路将机器指令B8 23 01 送入指令缓冲器(读取这一条指令后,IP中的值自动扩展,以使CPU能够读取下一条指令。因日前读入的指令B82301长度为3个字节,所以IP中的值加3,此时CS:IP指向内部存款和储蓄器单元3000::0003)

     7.实践调节器执行命令 B8 23 01 (即mov ax 0123H)

     8.指令被实行后AX中的内容为0123H(此时,CPU将从三千::0003处读取指令)

     9. 再度以上的动作。

计算如下:

(1)从CS:IP指向的内存单元读取指令,读取的一声令下步入指令缓冲区

(2) IP=IP+所读取的指令的尺寸,进而指向下一条指令

(3) 实行命令、转到步骤(1),重复那几个历程。

在8086CPU加电运营或重新苏醒设置后(即CPU刚开始专业时)CS和IP设置为CS=FFFFH,IP=0000H,即在8086PC机刚运营时,CPU从内部存款和储蓄器FFFF0H单元中读取指令实行,FFFF0H单元中的指令是8086PC机开机后进行的率先条指令。

标题:CPU依照什么奖内部存储器中的消息看作指令?

CPU将CS:IP指向的内部存款和储蓄器单元中的内容作为指令。

自个儿才疏学浅,不能担保全部所写正确性,有错请提出。

1.1
CPU的寻址技巧是由地址总线决定的,贰个地址总线宽度对应四个内部存储器单元。8086有20根地址总线,
CPU数据总线一根传一个bit,8086为16根数据总线,贰遍传输三个字节。数据总线与寄存器,管理位数一样,对应大家之后学到的最大拍卖数量钦命:word ptr。
在存款和储蓄器中多少和程序以二进制码贮存,我们用-d查看内存时,用16进制数字突显示,每一个字节空一格。
2.2
段地址与偏移地址
物理地址=段地址x16+偏移地址
8086有20根地址总线,那正是它为何用七个十六个人的段地址和摇头地址来合成多少个十11人的情理地址的原由。
2.3
随机时刻CS:IP指向CPU就要实施的下一步操作,课后演习中有三条指令,因为第三条jmp修改了IP,所以共实施了四回。
jmp指令(注意jmp是一个汇编指令,不能够在debug中应用,与试验非亲非故。)
**jmp 段地址:偏移地址 ** 同临时间修改CS:IP
**jmp 贮存器名 ** 只修改IP 等同于 MOV IP,存放器名
其次章实验
e命令用来写入机器码 a写汇编指令,写完后用r指令把CS与IP修改到写入指令处,用t命令实践就能够。

-r 查看和转移CPU存放器的始末:
-r ax 后按下enter键将现出:提醒输入,输入内容就可以退换ax存放器的内容。
-d 查看内部存款和储蓄器中的开始和结果:
-d 一千:0 意思正是翻开内容地址为一千0h-10070h内部存款和储蓄器中的内容。
-d 1000:0 9翻看一千:0-一千:9单元中的内容
-d 一千:10 10查看一千:10内部存储器中的内容
-e 改写内部存款和储蓄器中的命令:
-e 1000:0 1 'a' 2 'b' 3 'c'
向1000:0 一千:2 一千:4单元中写入1,2,3, 向1000:1 一千:3 一千:5单元中写入"a" "b" "c"。
-u 将内部存储器中的机器指令翻译成汇编指令:
-u 1000:0
-t 推行一条机器指令:
进行cs:ip所指向的下令
-a 以汇编指令的格式在内部存款和储蓄器中写入一条机器指令

3.1
多介意内部存款和储蓄器中的高位与未有位置。

图片 2

2.11 修改CS、IP的指令

若想同时修改CS、IP的内容,可用形如“jmp 段地址:偏移地址”的通令实现

,如

jmp 2AE3:3,推行后:CS=2AE3H,IP=0003H,CPU将从2AE33H处读取指令

jmp 3:0B16,推行后:CS=0003H,IP=0B16H,CPU将从00B46H读取指令

若想仅修改IP的内容,可用形如“jmp 某一法定寄放器”的命令达成,如

jmp ax,指令实行前,ax=1000H,CS=3000H,IP=0003H

              指令施行后,ax=一千H,CS=两千H,IP=一千H

jmp ax,在含义上好似:mov IP,ax(并非真的有如此的授命)

难点:内部存款和储蓄器中寄存的机器码和呼应的汇编指令情形如图,设CPU开端状态:CS=三千H,IP=0000H,请写出指令实行体系。思虑后剖判

图片 3

(1)mov ax,6622H

(2)jmp 1000:3

(3)mov ax,0000

(4)mov bx,ax

(5)jmp bx

(6)mov ax 0123H

(7)推行第三步

栈的push与pop

SS:SP

3.7
栈的段地址ss,是一个段存放器(全体段寄放器都不能向来赋值),大家须求三个贮存器来中间转播。

寄存器reg:ax,bx,cx,dx,ah,al,bh,bl,ch,cl,dh,dl,sp,bp,si,di;
段存放器sreg:ds,ss,cs,es;

……

 

2.12 代码段

大家得以依赖供给将一组内部存款和储蓄器单元定义为四个段。大家得以将长度为N(N<=64KB)(代码段也是段啊,所以无法胜过64KB)的一组代码,存在一组地点一而再,开端地址为16的倍数的内部存款和储蓄器单元中,我们能够以为定义了多少个代码段:

mov ax,0000 (B8 00 00)

add ax,0123H(05 23 01)

mov bx,ax(8B D8)

jmp bx (FF E3)

这段长度为11个字节的一声令下,贮存在123B0H~123B9H的一组内部存款和储蓄器单元中,大家就能够以为,123B0H~123B9H这段内部存款和储蓄器是用来寄放代码的,是贰个代码段,它的段地址为123BH,长度为十一个字节。

CPU并不会活动的将大家定义的代码段中的指令充任指令来实施。CPU只认被CS:IP指向的内存单元中的内容为命令。所以要让CPU试行,必要求将CS:IP指向所定义的代码段中的第一条指令的首地址。本例中,大家可设CS=123BH,IP=0000H。

  以8086CPU来讲,那多个寄放器都可分为几个可独自使用的8位寄放器使用,以-H和-L代表左右八个人;
图片 4

 

    指令mov,add: 左操作数 = 左操作数与右操作数运算结果。

  8086CPU中提交物理地址方法: 五个十七位地方合成多个贰11人物理地址:
    段地址×16+偏移地址 = 物理地址;
  '段地址×16' 可身为基础地址;内部存款和储蓄器也以此分段的主意管理内部存款和储蓄器;段存放器:CS 和 IP,二者提醒了CPU当前要读取的指令的地方,CS为代码段寄放器,IP为命令指针寄放器;若CS中为M,IP中为N, 8086CPU将从内部存款和储蓄器M×16+N单元早先读取一条指令并实行。

  CS和IP不能够由此mov改动,可用 'jmp'命令,形如“jmp 段地址:偏移地址”,这是修改了两头的始末,若仅想修改IP的内容,可用“jmp 某一法定贮存器”,如 jmp ax 或 jmp bx。
  最终要留意CPU的劳作经过:
    ①从CS:IP指向的内部存款和储蓄器单元读取指令,读取的一声令下步入指令缓冲区;
    ②IP指向下一条指令;
    ③推行命令。(转到①再一次步骤)。

DOS中Debug的使用:
/*关于win10中debug用不了
  1.一个艺术是能够透过开机时为出现开机分界面时按 f8 走入格局选取命令行格局...

  2.图形界面中:
    假设有debug最佳,未有的话win+揽胜输入command;再不行的话看下去;
    小编的windows10家庭版未有了debug程序也无力回天运转command,只好协和想办法了,例如说度娘;emmm,分享一下。
    下载一个DOSBox,再一向张开搜狗寻找下载多个debug.exe;
    安装DOS博克斯,最棒采取设置C盘(系统盘)外的盘,防止出题目,之后展开安装的文件夹的DOSBox0.74 Options.bat文件,拉到最尾巴部分,增加如下代码:

  图片 5

  也得以将代码在DOSBox中输入,但如此做幸免每一回张开都要输贰回。
  命令中D为作为设想盘的真正磁盘,:DOSBOX_SELF为自定义的文书夹,之后参预没有自带的debug.exe,将下载的debug.exe放入该文件夹,展开DOSBox输入debug就可以使用。

 

  平常使用:

本文由杏彩发布,转载请注明来源

关键词: