汇编语言学习

心碎记录:

2.9 段贮存器

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

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

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

  8086CPU贮存器都为14个人的,可贮存七个字节;AX、BX、CX、DX那4个存放器是日常用来寄放在平时性的数额,被称呼通用寄放器。
  AX:

2.10 CS和IP

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

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

图片 1

   
 1.起来状态(CS:二〇〇三H,IP:0000H,CPU将从内存二零零零Hx16+0000H处读取指令推行卡塔尔

   
 2.CS、IP中的内容送入地址加法器(地址加法器完结:物理地址=段地址x16+偏移地址卡塔 尔(英语:State of Qatar)

     3. 地址加法器将大要地址送入输入输出调节电路

     4. 输入输出调整电路将物理地址二〇〇二0H送上地址总线

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

此地本身有三个纠缠,为何它理解要读取B8 23
01啊?它是怎么规定这是叁个完好无损的授命?CPU如何剖断指令长度此处给出了比较清楚的答案。

     6. 输入输出调控电路将机器指令B8 23 01
送入指令缓冲器(读取这一条指令后,IP中的值自动增添,以使CPU能够读取下一条指令。因眼下读入的指令B82301长度为3个字节,所以IP中的值加3,这个时候CS:IP指向内部存款和储蓄器单元二零零三::0003卡塔尔国

     7.实践调控器实施命令 B8 23 01 (即mov ax 0123H卡塔 尔(英语:State of Qatar)

   
 8.指令被执行后AX中的内容为0123H(那时,CPU将从二〇〇〇::0003处读取指令卡塔尔

     9. 再度以上的动作。

小结如下:

(1卡塔尔从CS:IP指向的内部存款和储蓄器单元读取指令,读取的下令步入指令缓冲区

(2卡塔尔国 IP=IP+所读取的授命的长度,进而指向下一条指令

(3卡塔尔 施行命令、转到步骤(1卡塔 尔(英语:State of Qatar),重复那几个进度。

在8086CPU加电运营或重置后(即CPU刚开首职业时卡塔 尔(英语:State of Qatar)CS和IP设置为CS=FFFFH,IP=0000H,即在8086PC机刚运营时,CPU从内部存款和储蓄器FFFF0H单元中读取指令实行,FFFF0H单元中的指令是8086PC机开机后进行的首先条指令。

主题素材:CPU依据什么奖内存中的消息看作指令?

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

图片 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=二〇〇四H,IP=0003H

              指令实践后,ax=1000H,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

(7卡塔尔试行第三步

 

2.12 代码段

大家得以依附需求将生龙活虎组内部存款和储蓄器单元定义为叁个段。大家能够将长度为N(N<=64KB卡塔 尔(英语:State of Qatar)(代码段也是段啊,所以无法逾越64KB卡塔尔国的豆蔻年华组代码,存在大器晚成组地方接二连三,初始地址为16的倍数的内部存款和储蓄器单元中,大家能够感到定义了叁个代码段:

mov ax,0000 (B8 00 00)

add ax,0123H(05 23 01)

mov bx,ax(8B D8)

jmp bx (FF E3)

这段长度为12个字节的吩咐,寄存在123B0H~123B9H的风姿浪漫组内部存款和储蓄器单元中,大家就足以感觉,123B0H~123B9H这段内部存款和储蓄器是用来贮存在代码的,是四个代码段,它的段地址为123BH,长度为十个字节。

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

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

 

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

  8086CPU中提交物理地址方法: 几个十几位地方合成二个十八位物理地址:
    段地址×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;
    安装DOSBox,最棒选取安装C盘(系统盘卡塔 尔(英语:State of Qatar)外的盘,幸免出难题,之后展开安装的公文夹的DOSBox0.74 Options.bat文件,拉到最尾部,加多如下代码:

  图片 5

  也足以将代码在DOSBox中输入,但这么做防止每趟张开都要输叁遍。
  命令中D为作为虚构盘的实在磁盘,:DOSBOX_SELF为自定义的文件夹,之后参预未有自带的debug.exe,将下载的debug.exe归入该公文夹,张开DOSBox输入debug就可以使用。

 

  正常使用:

图片 6

*/
  -大切诺基:查看、退换CPU贮存器内容;
  查看CS和IP值,比如:

图片 7

  当中CS为073F,IP为0102;正是说CPU当前要读取CS:IP即0x74F2处的吩咐,并且在debug中还体现出了该内部存款和储蓄器单元中寄存的机器码,为呃。。0000,前边则为翻译的汇编指令。

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

图片 8

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

发表评论

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