图片 8

汇编语言学习

零星记录:

二.玖 段寄存器

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

80八6有八个段寄存器:CS、 DS、 SS、 ES

当80八陆CPU要访问内部存款和储蓄器时,由着五个段寄存器提供内部存款和储蓄器单元的段地址。

  80八陆CPU寄存器都为13人的,可存放多少个字节;AX、BX、CX、DX这伍个寄存器是不乏先例用来存放在一般性的多少,被号称通用寄存器。
  AX:

2.10 CS和IP

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

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

图片 1

   
 壹.初始状态(CS:两千H,IP:0000H,CPU将从内部存款和储蓄器两千Hx1陆+0000H处读取指令实践)

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

     三. 地方加法器将大意地址送入输入输出调控电路

     四. 输入输出调控电路将大要地址两千0H送上地址总线

     伍. 从内存30000H单元开首存放的机器指令B八 2三 01通过数据总线被送入CPU中

此间作者有叁个质疑,为何它精通要读取B8 23
0一呢?它是怎么规定这是一个全部的指令?CPU如何判别指令长度此地给出了相比清楚的答案。

     6. 输入输出调整电路将机器指令B八 贰三 0壹送入指令缓冲器(读取这一条指令后,IP中的值自动增添,以使CPU能够读取下一条指令。因眼下读入的吩咐B8230一长度为二个字节,所以IP中的值加三,此时CS:IP指向内部存款和储蓄器单元3000::000三)

     7.实施调节器推行命令 B八 二三 0一 (即mov ax 012叁H)

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

     九. 再一次以上的动作。

小结如下:

(1)从CS:IP指向的内部存款和储蓄器单元读取指令,读取的授命进入指令缓冲区

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

(三) 实施命令、转到步骤(壹),重复那些进度。

在80八陆CPU加电运行或重新复苏设置后(即CPU刚开端职业时)CS和IP设置为CS=FFFFH,IP=0000H,即在80捌陆PC机刚运维时,CPU从内部存款和储蓄器FFFF0H单元中读取指令推行,FFFF0H单元中的指令是808六PC机开机后实行的率先条指令。

题材:CPU遵照什么奖内部存款和储蓄器中的音信看作指令?

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

图片 2

2.11 修改CS、IP的指令

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

,如

jmp 2AE三:三,实施后:CS=二AE三H,IP=000三H,CPU将从贰AE33H处读取指令

jmp 三:0B1陆,推行后:CS=0003H,IP=0B16H,CPU将从00B四六H读取指令

若想仅修改IP的内容,可用形如“jmp 某壹法定寄存器”的吩咐完毕,如

jmp ax,指令实行前,ax=一千H,CS=三千H,IP=000叁H

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

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

(七)施行第二步

 

2.12 代码段

大家能够根据供给将一组内部存款和储蓄器单元定义为叁个段。大家可以将长度为N(N<=64KB)(代码段也是段啊,所以不可能超越64KB)的壹组代码,存在壹组地方延续,初阶地址为1陆的倍数的内部存款和储蓄器单元中,大家得以认为定义了1个代码段:

mov ax,0000 (B8 00 00)

add ax,0123H(05 23 01)

mov bx,ax(8B D8)

jmp bx (FF E3)

那段长度为十一个字节的命令,存放在1二三B0H~1二三B9H的一组内部存款和储蓄器单元中,咱们就足以以为,1二3B0H~12叁B玖H那段内部存款和储蓄器是用来存放代码的,是3个代码段,它的段地址为1贰3BH,长度为拾个字节。

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

  以808六CPU来说,那多个寄存器都可分为多少个可独自使用的5个人寄存器使用,以-H和-L表示左右5个人;
图片 4

 

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

  808陆CPU中提交物理地址方法: 八个15人地方合成八个212人物理地址:
    段地址×1陆+偏移地址 = 物理地址;
  ’段地址×1六’
可视为基础地址;内部存款和储蓄器也以此分段的艺术管理内部存款和储蓄器;段寄存器:CS 和
IP,贰者提醒了CPU当前要读取的指令的地址,CS为代码段寄存器,IP为命令指针寄存器;若CS中为M,IP中为N, 808陆CPU将从内部存款和储蓄器M×1陆+N单元初步读取一条指令并实践。

  CS和IP不能够通过mov改造,可用 ‘jmp’命令,形如“jmp
段地址:偏移地址”,那是修改了三头的内容,若仅想修改IP的剧情,可用“jmp
某一官方寄存器”,如 jmp ax 或 jmp bx。
  最后要专注CPU的做事进度:
    一从CS:IP指向的内部存款和储蓄器单元读取指令,读取的通令进入指令缓冲区;
    贰IP指向下一条指令;
    3推行命令。(转到一重复步骤)。

DOS中Debug的使用:
/*关于win10中debug用不了
  1.一个措施是能够透过开机时为出现开机分界面时按 f8进入方式接纳命令行情势…

  二.图形分界面中:
    假若有debug最棒,未有的话win+Haval输入command;再不行的话看下去;
    笔者的windows拾家庭版未有了debug程序也无法运营command,只好协调想方法了,比如说度娘;emmm,分享一下。
    下载二个DOSBox,再平昔展开搜狗寻觅下载1个debug.exe;
    安装DOSBox,最佳采取安装C盘(系统盘)外的盘,幸免出难点,之后张开安装的文本夹的DOSBox0.74 Options.bat文件,拉到最底部,增加如下代码:

  图片 5

  也能够将代码在DOSBox中输入,但如此做防止每一次打开都要输三遍。
  命令中D为作为虚拟盘的真实磁盘,:\DOSBOX_SELF为自定义的公文夹,之后参与未有自带的debug.exe,将下载的debug.exe放入该公文夹,打开DOS博克斯输入debug就能够使用。

 

  通常使用:

图片 6

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

图片 7

  当中CS为07三F,IP为0拾2;正是说CPU当前要读取CS:IP即0x74F二处的命令,而且在debug中还显示出了该内部存款和储蓄器单元中存放的机器码,为呃。。0000,前边则为翻译的汇编指令。

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

图片 8

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

发表评论

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