汇编语言学习,段寄存器

by admin on 2019年3月30日

散装记录:

2.9 段寄存器

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

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

home88一必发,当8086CPU要访问内部存款和储蓄器时,由着5个段寄存器提供内部存储器单元的段地址。

王爽第二版依据课后演习题顺序,结合课本读书效果更佳,不难的题材不再提议

.段寄存器

  8086CPU寄存器都为13个人的,可存放多少个字节;AX、BX、CX、DX那4个寄存器是日常用来存放一般性的数额,被称为通用寄存器。
  AX:

2.10 CS和IP

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

汇编语言学习,段寄存器。CS为代码段寄存器,IP为命令指针寄存器

home88一必发 1

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

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

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

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

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

此地本身有三个迷惑,为啥它知道要读取B8 23
01吧?它是怎么规定那是二个完好无损的指令?CPU如何判定指令长度此处给出了比较清楚的答案。

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

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

   
 8.指令被执行后AX中的内容为0123H(此时,CPU将从3000::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的寻址能力是由地址总线决定的,一个地址总线宽度对应3个内部存款和储蓄器单元。8086有20根地址总线,
CPU数据总线一根传三个bit,8086为16根数据总线,一次传输四个字节。数据总线与寄存器,处理位数相同,对应大家将来学到的最大拍卖数据钦命:word
ptr。
在存款和储蓄器中数量和次序以二进制码存放,大家用-d查看内部存款和储蓄器时,用16进制数呈现,各类字节空一格。
2.2
段地址与偏移地址
物理地址=段地址x16+偏移地址
8086有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 一千:0 意思就是翻开内容地址为一千0h-10070h内存中的剧情。
-d 一千:0 9查看一千:0-1000:9单元中的内容
-d 1000:10 10翻看1000:10内部存款和储蓄器中的剧情
-e 改写内存中的吩咐:
-e 1000:0 1 ‘a’ 2 ‘b’ 3 ‘c’
汇编语言学习,段寄存器。向一千:0 一千:2 一千:4单元中写入1,2,3, 向一千:1 一千:3
一千:5单元中写入”a” “b” “c”。
-u 将内部存款和储蓄器中的机器指令翻译成汇编指令:
-u 1000:0
-t 执行一条机器指令:
施行cs:ip所指向的授命
-a 以汇编指令的格式在内存中写入一条机器指令

3.1
多注意内部存款和储蓄器中的上位与没有地方。

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

home88一必发 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=一千H,CS=三千H,IP=0003H

              指令执行后,ax=1000H,CS=3000H,IP=一千H

jmp ax,在含义上好似:mov IP,ax(并不是真的有如此的通令)

题材:内部存款和储蓄器中存放的机器码和呼应的汇编指令情形如图,设CPU开头状态:CS=三千H,IP=0000H,请写出指令执行体系。思考后分析

home88一必发 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,是1个段寄存器(全体段寄存器都不能够直接赋值),我们要求叁个寄存器来中间转播。

寄存器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)

那段长度为11个字节的吩咐,存放在123B0H~123B9H的一组内部存款和储蓄器单元中,大家就足以认为,123B0H~123B9H那段内部存款和储蓄器是用来存放在代码的,是三个代码段,它的段地址为123BH,长度为10个字节。

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

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

  以8086CPU而言,那多少个寄存器都可分为七个可独立行使的六个人寄存器使用,以-H和-L表示左右五人;
home88一必发 4

在8086CPU中,设CS内容为M,IP中内容为N,8086CPU将从M*16+N单元开首,读取一条指令并履行。也足以如此讲述,任意时刻,CPU将CS:IP指向的内容作为指令执行。

 

8086CPU的工作经过能够省略描述如下:

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

home88一必发 5

  8086CPU中付出物理地址方法: 八个16位地点合成三个十八位物理地址:
    段地址×16+偏移地址 = 物理地址;
  ’段地址×16′
可视为基础地址;内部存款和储蓄器也以此分段的法门管理内存;段寄存器:CS 和
IP,二者指示了CPU当前要读取的通令的地址,CS为代码段寄存器,IP为命令指针寄存器;若CS中为M,IP中为N, 8086CPU将从内部存款和储蓄器M×16+N单元开端读取一条指令并施行。

home88一必发 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超过33.33%寄存器的值,都足以用mov开修改,比如通用寄存器ax
bx cx
dx等,mov指令被称之为传送指令。不过mov指令不能够修改CS,IP的值,8086尚无为mov提供那几个作用,然而提供了别的的的指令来改变他们的值,能够转移CS,IP的剧情指令被系统称为转移指令。先介绍3个最简易能够修改CS,IP的吩咐:jmp指令。

  2.图形界面中:
    要是有debug最佳,没有的话win+库罗德输入command;再尤其的话看下去;
    小编的windows10家庭版没有了debug程序也无力回天运行command,只能协调想方法了,比如说度娘;emmm,分享一下。
    下载3个DOSBox,再平昔打开搜狗搜索下载叁个debug.exe;
    安装DOSBox,最棒采用安装C盘(系统盘)外的盘,制止出标题,之后打开安装的公文夹的DOSBox0.74 Options.bat文件,拉到最底部,添加如下代码:

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

  home88一必发 7

eg:

  也足以将代码在DOSBox中输入,但如此做防止每便打开都要输3次。
  命令中D为作为虚拟盘的实际磁盘,:\DOSBOX_SELF为自定义的文件夹,之后加入没有自带的debug.exe,将下载的debug.exe放入该文件夹,打开DOSBox输入debug即可使用。

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

 

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

  常常使用:

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

home88一必发 8

eg:

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

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

home88一必发 9

    
 指令执行后:ax=一千H,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那样的下令是漏洞卓殊多的,不过用汇编语言来描写汇编语言能更好救助了然和回想。

home88一必发 10

home88一必发 11

  -D:命令查看内容,形如 d 一千:0,为”-d 段地址 :
偏移地址”形式,会议及展览示接下去的12九个单元的始末, 左侧为ascii码值;

 

home88一必发 12

 home88一必发 13

  能够尝试 d 一千:9,同样输出128单元内容;再比如 d 一千:9
9可决定输出;

假若看了内部存款和储蓄器机器码和对应汇编指令不能够获得地方的剖析结果,重放P33页。

  -E:改写内部存款和储蓄器中的剧情,一种是形如 e 1000:0
回车,会有下一行各类字节值,’.’前面一向输入修改值,空格不修改或继续下2个,回车甘休;第叁种形如
e 壹仟:0  “fdfd”   “dfds”  12  121;用-奔驰M级可查阅;但写入的是机器码如:b8
01 00 (mov ax,0001)、b90200(mov cx,0002)、01c8(add
ax,cx),-d命令不也许出示代码,能够用-u命令查看(形如u  一千:0)

.代码段

home88一必发 14

大家将长度为N(N<=64KB)的一组代码,存在一组地方一连、发轫地址为16的倍数的内部存款和储蓄器单元中,大家得以说这段内部存款和储蓄器是用来存放在代码的,从而定义了一个代码段。为何N<=64KB,段寄存器和偏移指针决定了指令在何地执行,因为IP是15位的寄存器,所以最大寻址2的拾陆遍方即64KB。你大概会说,不是还有CS*16+IP吗,那不是该远远大于64KB的呦,但是寻址能力指的是在首地点明确后,能够偏移多少地点,所以偏移最多13人,等于64KB。

 

 

  -T命令可用来举办我们写入的授命,但必须先让CS:IP指向欲执行的吩咐单元,每便一条指令:

home88一必发 15

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

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

home88一必发 16

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

 

各指令可以证实指令和数据在机械中精神上是如出一辙的。

  查看寄存器消息、修改修改寄存器:-福睿斯;

  查看内部存款和储蓄器单元内容:-D;

  修改内部存款和储蓄器单元内容:-E;

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

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

  写入汇编指令至内部存款和储蓄器中:-A。

 

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

がんばって

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图