零星记录:

2.9 段寄存器

段寄存器就是提供段地址的。

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

当8086CPU要访问内存时,由着4个段寄存器提供内存单元的段地址。

王爽第三版依照课后陶冶题顺序,结合课本读书效果更佳,简单的标题不再提出

.段寄存器

【澳门金沙国际】汇编语言学习,16位汇编复习。  8086CPU寄存器都为16位的,可存放八个字节;AX、BX、CX、DX那4个寄存器是常常用来存放在一般性的数量,被号称通用寄存器。
  AX:

2.10 CS和IP

CS和IP是8086CPU中最珍惜的寄存器,它们指令了CPU当前要读取指令的地点。

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

澳门金沙国际 1

   
 1.方始状态(CS:2000H,IP:0000H,CPU将从内存2000Hx16+0000H处读取指令执行)

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

     3. 地址加法器将物理地址送入输入输出控制电路

     4. 输入输出控制电路将大体地址20000H送上地址总线

     5. 从内存20000H单元初步存放的机器指令B8 23 01
通过数量总线被送入CPU中

此地我有一个迷惑,为何它知道要读取B8 23
01啊?它是怎么确定那是一个完整的吩咐?CPU怎么着判断指令长度此处给出了相比较清楚的答案。

     6. 输入输出控制电路将机器指令B8 23 01
送入指令缓冲器(读取这一条指令后,IP中的值自动伸张,以使CPU可以读取下一条指令。因眼前读入的授命B82301长度为3个字节,所以IP中的值加3,此时CS:IP指向内存单元2000::0003)

     7.举行控制器执行命令 B8 23 01 (即mov ax 0123H)

   
 8.指令被执行后AX中的内容为0123H(此时,CPU将从2000::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根地址总线,那就是它为什么用三个16位的段地址和偏移地址来合成一个20位的情理地址的原由。
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 1000:0 情趣就是查看内容地址为10000h-10070h内存中的内容。
-d 1000:0 9翻看1000:0-1000:9单元中的内容
-d 1000:10 10翻看1000:10内存中的始末
-e 改写内存中的通令:
-e 1000:0 1 ‘a’ 2 ‘b’ 3 ‘c’
向1000:0 1000:2 1000:4单元中写入1,2,3, 向1000:1 1000:3
1000:5单元中写入”a” “b” “c”。
-u 将内存中的机器指令翻译成汇编指令:
-u 1000:0
-t 执行一条机器指令:
实践cs:ip所指向的下令
-a 以汇编指令的格式在内存中写入一条机器指令

3.1
多留意内存中的上位与没有地方。

8086CPU在造访内存时是要由有关部件提供内存单元的段地址和摇头地址,送入地址加法器合成物理地址。段地址存放在段寄存器中,8086CPU有4个段寄存器:CS,
DS, SS,ES。

澳门金沙国际 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=2000H,IP=0003H

              指令执行后,ax=1000H,CS=2000H,IP=1000H

jmp ax,在含义上好似:mov IP,ax(并不是真的有那般的一声令下)

标题:内存中存放的机器码和对应的汇编指令境况如图,设CPU早先状态:CS=2000H,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;

……

.CS和IP

 

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)

这段长度为10个字节的下令,存放在123B0H~123B9H的一组内存单元中,我们就足以认为,123B0H~123B9H那段内存是用来存放在代码的,是一个代码段,它的段地址为123BH,长度为10个字节。

CPU并不会自行的将我们定义的代码段中的指令当做指令来举办。CPU只认被CS:IP指向的内存单元中的内容为命令。所以要让CPU执行,必必要将CS:IP指向所定义的代码段中的第一条指令的首地址。本例中,大家可设CS=123BH,IP=0000H。

CS和IP寄存器,提醒了CPU当前要读取指令的地点。CS为段寄存器,IP为命令指针寄存器。

  以8086CPU而言,那五个寄存器都可分为多个可单独运用的8位寄存器使用,以-H和-L代表左右八位;
澳门金沙国际 4

在8086CPU中,设CS内容为M,IP中内容为N,8086CPU将从M*16+N单元起先,读取一条指令并实施。也可以那样讲述,任意时刻,CPU将CS:IP指向的情节作为指令执行。

 

8086CPU的办事进程可以大约描述如下:

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

澳门金沙国际 5

  8086CPU中付出物理地址方法: 多少个16位地点合成一个20位物理地址:
    段地址×16+偏移地址 = 物理地址;
  ’段地址×16′
可就是基础地址;内存也以此分段的艺术管理内存;段寄存器:CS 和
IP,二者提示了CPU当前要读取的下令的地点,CS为代码段寄存器,IP为命令指针寄存器;若CS中为M,IP中为N, 8086CPU将从内存M×16+N单元先河读取一条指令并实施。

澳门金沙国际 6

  CS和IP无法透过mov改变,可用 ‘jmp’命令,形如“jmp
段地址:偏移地址”,那是修改了两边的内容,若仅想修改IP的情节,可用“jmp
某一官方寄存器”,如 jmp ax 或 jmp bx。
  最后要专注CPU的干活进度:
    ①从CS:IP指向的内存单元读取指令,读取的授命进入指令缓冲区;
    ②IP指向下一条指令;
    ③执行命令。(转到①重新步骤)。

.修改CS,IP的指令

DOS中Debug的使用:
/*关于win10中debug用不了
  1.一个措施是可以通过开机时为出现开机界面时按 f8
进入情势采取命令行形式…

8086CPU一大半寄存器的值,都足以用mov开修改,比如通用寄存器ax
bx cx
dx等,mov指令被叫做传送指令。不过mov指令无法改改CS,IP的值,8086未曾为mov提供这么些功效,可是提供了别的的的命令来改变她们的值,可以转移CS,IP的情节指令被系统称为转移指令。先介绍一个最简便可以修改CS,IP的授命:jmp指令。

  2.图形界面中:
    如若有debug最好,没有的话win+R输入command;再不行的话看下来;
    我的windows10家庭版没有了debug程序也无从运转command,只好协调想办法了,比如说度娘;emmm,分享一下。
    下载一个DOSBox,再向来打开搜狗搜索下载一个debug.exe;
    安装DOSBox,最好选取设置C盘(系统盘)外的盘,防止出难题,之后打开安装的文本夹的DOSBox
0.74 Options.bat文件,拉到最底部,添加如下代码:

若想同时修改CS,IP的情节,可用形如:jmp
段地址:偏移地址     的通令来形成。

  澳门金沙国际 7

eg:

  也得以将代码在DOSBox中输入,但诸如此类做防止每一回打开都要输三回。
  命令中D为作为虚拟盘的忠实磁盘,:\DOSBOX_SELF为自定义的文本夹,之后进入没有自带的debug.exe,将下载的debug.exe放入该公文夹,打开DOSBox输入debug即可使用。

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

 

jmp 段地址:偏移地址
 指令的功力为:用命令中付出的段地址修改CS,偏移地址修改IP。

  正常使用:

如想要仅仅修改IP的始末,可用“jmp
某一合法寄存器”的下令已毕。

澳门金沙国际 8

eg:

*/
  -R:查看、改变CPU寄存器内容;
  查看CS和IP值,比如:

jmp
 ax,指令执行前:ax=1000H,CS=2000H,IP=0003H

澳门金沙国际 9

    
 指令执行后:ax=1000H,CS=1000H,IP=1000H

  其中CS为073F,IP为0102;就是说CPU当前要读取CS:IP即0x74F2处的下令,而且在debug中还出示出了该内存单元中存放的机器码,为呃。。0000,前边则为翻译的汇编指令。

jmp 某一法定寄存器  
指令的效率为:用寄存器中的值修改IP

  用r指令改变寄存器中的值,如:

jmp  ax,在含义上如同mov
IP,ax一样,即使mov
IP,ax那样的吩咐是不当的,然则用汇编语言来描写汇编语言能更好支持驾驭和记念。

澳门金沙国际 10

澳门金沙国际 11

  -D:命令查看内容,形如 d 1000:0,为”-d 段地址 :
偏移地址”方式,会来得接下去的128个单元的内容, 左侧为ascii码值;

 

澳门金沙国际 12

 澳门金沙国际 13

澳门金沙国际,  可以尝试 d 1000:9,同样输出128单元内容;再譬如 d 1000:9
9可控制输出;

若果看了内存机器码和对应汇编指令无法博取地方的解析结果,回看P33页。

  -E:改写内存中的情节,一种是形如 e 1000:0
回车,会有下一行每个字节值,’.’前边平昔输入修改值,空格不修改或延续下一个,回车停止;第三种形如
e 1000:0  “fdfd”   “dfds”  12  121;用-R可查阅;但写入的是机器码如:b8
01 00 (mov ax,0001)、b90200(mov cx,0002)、01c8(add
ax,cx),-d命令不能出示代码,能够用-u命令查看(形如u  1000:0)

.代码段

澳门金沙国际 14

大家将长度为N(N<=64KB)的一组代码,存在一组地方一而再、初阶地址为16的翻番的内存单元中,大家可以说那段内存是用来存放在代码的,从而定义了一个代码段。为啥N<=64KB,段寄存器和摇头指针决定了指令在何地执行,因为IP是16位的寄存器,所以最大寻址2的16次方即64KB。你或许会说,不是还有CS*16+IP吗,那不是该远远大于64KB的哎,不过寻址能力指的是在首地址确定后,可以偏移多少地点,所以偏移最多16位,等于64KB。

 

 

  -T命令可用来实施大家写入的命令,但必须先让CS:IP指向欲执行的指令单元,每一次一条指令:

澳门金沙国际 15

  各寄存器数值随指令发生变化;

  -A命令以汇编指令格局在内存中写入机器指令:方式:-a 
1000:0(1000:0为输入指令的预设地址)

澳门金沙国际 16

  输入完毕回车停止,-d命令查看机器码。

 

各指令可以印证指令和数据在机器中精神上是均等的。

  查看寄存器音讯、修改修改寄存器:-R;

  查看内存单元内容:-D;

  修改内存单元内容:-E;

  解释内存内容为机器码及对应汇编指令:-U;

  执行CS:IP指向的内存单元处:-T;

  写入汇编指令至内存中:-A。

 

  在PC及主板的ROM中写有一个生产日期,在内存FFF00H~FFFFFH的某多少个单元,其中内容无法修改,也不可以用d的出口长度控制,因为为只读内存区域。

がんばって

相关文章