汇编学习笔记(1)-80×86基础设定w88优德官网电脑版

发布时间:2018-12-18  栏目:w88优德官网电脑版  评论:0 Comments

  《80×86汇编语言程序设计教程》
首回说的是cpu的升华历史从8员cpu发展及现底64位CPU,不过intel的cpu一向是向下兼容的也就是说现在之cpu仍然配合8各样汇编的。

  我们第一来讲一下8086 CPU的根底设定,这几个设定是8086
CPU硬件设计决定的故只要记住就是了,对我们而言没什么为何,假诺确实要咨询怎么是这样这便不得不去问话设计CPU的工程师咯。

如出一辙、先行基础

     
统计机世界面临多少仍然二进制的,这样平等绝望数据线就足以表示1位,通电就是1,没通电就是0。

  可是二进制数据对我们吧实在太恶心了,于是大家表明的时又一般以这转会为16前进制数来表示,具体的转折请圈 这里 和
这里

 

第二、总线介绍

  首先总括机就是为此来测算的机器,总结由简单局部构成数据算法(算法可以明白也解题步骤实际上也是如出一辙种多少)。总结的流程虽是优先拿走数据以及算法然后总计爆发结果最后以计结果输出。这里就关系到三独过程
取数据,统计,
输出数据。因为cpu是未存储数据的,数据还存储在内存中,所以任何工艺流程虽扩充为:

  1. 告知内存我如果获取哪的数额

  2. 得数据之后进展总括

  3.
再度告诉内存要将计结果存储到哪

  提取一下上述的经过,一共在二种植音信 一声令下音讯(读取/存储) 地址消息 
数据信息

  由此CPU有三久叫总线的数量线与内存连接,即用于发送地址的地址总线,用于发送命令的指令总线,用于传输数据的多少总线

  一般而言我们无关心命令总线有微微个,因为我们一向行使CPU提供的指令即可不欲领会命令总线的底细。而地址总线和数目总线就和大家连带了。地址总线的幅度(宽度决定了能于即时根线上传的数字的极致丰富价值)决定了大家得以拜多老大之内存,而数据总线的增幅则决定了大家一样不佳可传多少数字,当然命令总线的增长率则决定我们可以使用多少种命令啦。详细解释一下,比方说地址总线是4个的,也就是说可以传4员,二进制范围就是0-1111
用十进制表示即是0-15,这虽然是不得不表示16只数字,也就代表最多表示16个字节的地方。同样假诺数据总线也止发4个之语句一样次传输的数据就是4号的只好招输0-15中的数字,即便实在数据31次之进制为11101这就是使分点儿潮污染输0001
和 1101。

  那么8086
CPU的数目总线的增长率是16个代表大家一致次等可以传16员的数额。而地址总线是20位之即刻就是代表我们得以拜2^20次于方个数据单元。内存中以8各样吗一个单位为便是一个字节为单位,20各地址总线就象征足看2^20独字节也就是是1M的数目。

 

老三、内部寄存器

  接下去我们说话出口CPU的其中,CPU内部共有14只寄存器,寄存器就是临时存储数据的装备,他们是16位之刚刚对应了16号的数额总线,所以也就是说CPU一蹩脚可存取一个寄存器的多寡。这个寄存器分别是:

  4单数据寄存器AX BX CX DX

  3只指针寄存器SP BP IP

  2个地方寄存器 SI DI

  1单标志寄存器 FLAG

  4独段落寄存器 SS DS ES CS

  为了配合8号汇编那三个数据寄存器每个又得拆有个别单8各之寄存器
AX对应AL AH,  BX对应BL BH,  CX对应CL CH,  DX对应DL DH。注意AX和AH
AH是重合的,AH和AL共同整合了AX,AH为AX的高8位AL为AX的低8号,改变AH和AL都会合就改变AX,其他3独为是如此对应之。

  我同样先导模拟的上只是死记他们之粤语名称搞的好痛苦,其实了然她们之打算后遵照英文名称都几乎都无欲特别去记念了,那么接下去我们来来挨家挨户介绍他们吧。

 (一)
数据寄存器

  首先是4独数据寄存器,以前自己直接当ABCD就是各样来之没有啥意思,认真看开之后才了解原来还有这样刚好的事情。

    AX 累加寄存器(Accumulator)

    BX 基地址寄存器(Base)

    CX 计数寄存器(Count)

    DX 数据寄存器(Data)

  首先既然被数据寄存器那么即使储存数据的,你得用他们过来时存储任何你想囤积的数,至于他们的名是诺为她们都跟对应之指令起绑定关系,就是说特定的吩咐会就此到一定的寄存器,那个未来讲话到令的时候再说。

 

 (二) 指针寄存器和段寄存器

  接下去是3个指针寄存器和4个段落寄存器,把他们放在一起介绍是出因。在上头的介绍中而是不是注意到了数额总线和寄存器都是16各项的比方地址总线却是20各项之,这代表一个完好的地点需要至少少独寄存器的多寡拼凑出。
拼凑的公示是这样的 20位地址 = 16位数 X 16
+
另一个16位数
,没错即刻虽本着承诺了4个段落寄存器和3单指针寄存器,CPU这样处理
20员地点 = 段寄存器 x 16 +
指针寄存器
。这一个公式的意见就是是段式内存管理,内存是分来治本之,将内存分成一段同样段落,然后于指定段内之摆地址。这样说可能比空虚大家举个例子,
比如 字母表abcdefg我们描述e的岗位的早晚可这么描述 “第5个字母”
,也得那样讲述”从c开始第3个字母“更或者”从d开始第2个字母”。前面的少栽表述形式就是是CPU使用的讲述道,唉~我愿意我发表的十足亮。反正就是是先期指定一个基础之地点然后讲述和外的去。你可能为发现及了一个地点之表述得生深多种不怕哼于340斯职务
340 = 20 x 16 + 20 ,340 = 10 x 16 +180 , 340 = 0 x 16 + 340
没错就是这么随便,也就是说CPU并从未给段地址的选定加上另条件,唯一的规范就是是段子地址要趁16,也尽管说每个段落的开首的地方都是
段地址 X16 + 0
所以段落地址的先导总是16的平头加倍,我们称为16个对同步。这么做看起好像很烦其实异常好用,那个以后会介绍至。

  然后就七单寄存器都是CPU专用的都起温馨的特另外效能

    CS 代码段寄存器(Code Segment) 它是暨 IP 指令指针寄存器(Instruct
Point) 一起来构成地址之,CS x 16 + IP,
CPU自动使用那些地点来收获下同样修要实践之命

    DS 数据段寄存器(Data Segment) 它的伴儿就是BP 基址指针寄存器(Base
Point) 这么些于新鲜不是简单的 DS x 16 +
BP了,那一个未来于寻址模式的当儿会介绍

    SS 堆栈段寄存器(Stack Segment) 它的伴儿就是SP
堆栈指针寄存器(Stack Ponint) 堆栈是一个相比新鲜用途的积存结构

    ES 扩大段寄存器(Extand Segment) 他即使相比较深了从未一定搭配的伴

  那里扩张一下库,堆栈是一个不同平时之贮存结构,详细的演讲见百度百科,他于内存中一般为是用来即存储数据的,往这布局存储数据称压栈,取多少称出栈。他的风味就是先进后出,就像一个堆满的仓库一样,想要用到无限早放进去的东西便务须优先拿外场的事物拿出来。具体来说就是SS给起一个库的前奏地点,而SP则指定了当下岗位。
比如最先化 SS = 100 SP =10 ,你呢得以将立刻点儿单数据 了解为仓库的地点以100 X
16 + 0处于,容量是10。
那么首先糟糕压栈数据那么数量就囤于1610以此职位,这些时候SP会–,SP就改成9
再度压栈就多少就囤于
1609,然后是1608,1607…结束1600,sp=0这多少个时便标志这一个库房满了。这里来只整脑子的地点即是数据的仓储方向是由赛地址为低地址移动的啊不怕是数的储存地方是相反在累之
10 9 8 7 6… 万一未是咱习惯的 1 2 3 4 5…
如此往往之利益就是是才所以少单寄存器就足以象征来地点与容量与时岗位,SP=0就代表满了。

 

 (三)
地址寄存器

  两十分地点寄存器SI DI

    SI 源地址寄存器(Source Index)

    DI 目标地方寄存器(Destination Index)

  这有限单铁会搀和至DS 和
BP这对好基友中去,一起出席数存储地方之代表,在寻址格局的段中详细介绍。

 

 (四) 标志寄存器

  标志寄存器厉害了,它是卓殊新鲜之,因为其是比照位从效用的,就是说它的每个位还发生特有的意义,我于网上查找了张图:

    w88优德官网电脑版 1

  这么些标志可以分成两组,一组是运算结果声明,另一样组是状态控制标志

  1. 运算结果注明

    他们根本是叫指令执行结果影响

    OF  溢起标志位(Overflow Flag
Flag)  有标志数加减的时段数据是否超能代表范围,比如 8各项数据 127 到
-128,那么一旦总计 120 + 120 = 240
超过表示范围就即便被溢起OF就更换1再不就是0,每回运算都会师潜移默化同样不良。

    SF  符号标志位(Sign
Flag)  代表运算结果的首家,正数结果SF=0,负数结果SF=1

    ZF  零标志位(Zero Flag)   表示运算结果是否为0,结果也0
ZF=1,结果部位0 ZF=0

    AF  帮助进位标志位(Auxiliary
Flag)  相比为难精通,总而言之就是是继半段落的揣度是否影响了前方半段子的乘除,举例
1010 + 1001 那么前半段是 10 + 10 后半段落是 10 + 01,那么10 +
01凡是休影响前的10+10之总计的,然则只尽管 1010+1011
那么就是非雷同了,10+11结实是 101,需要往前方进位
所在此以前边的计量会成10+10+1,对前半截有潜移默化了,同样减法也是如出一辙的,减法就是是否借位了,CPU有8各项乘除和16各项乘除,8各乘除就是
后4个上对前面4个有影响,16员乘除就是继8位是否对准眼前8位爆发震慑,爆发震慑AF=1,没影响就是AF=0

    PF   奇偶标志位(Parity Flag) 
表示运算结果受到以二进制表示通常1的数额是否是偶数,举了例子比如结果是
1010这1底个数是2那么即使是偶数,1011着1之个数是3所以是奇数 偶数单1 PF=1,
奇数只1 PF= 0

    CF  进位标志/凯丽Flag  和AF相比像,AF是半段的进位/借位标志,CF是全段的进位/借位标志。最高位的计时是不是出进位/借位,注意别这里的嵩位非是数的最高位,而是总括用之寄存器的万丈位。比如前边的游说的AL
和 AH是8各寄存器,要是是1+1 那么 2进制表示即是 AL=00000001 AH=00000001
,00000001+0000001=00000011,那么高位镇都是0,没有进位,借使出进位/借位CF=1
否则就是0。

  2. 态控制标志

    他们说了算了CPU的片段行为

    DF  方向标志位(Direction Flag)  和字符创相关的命令有关,字符串就是铺天盖地的字符,DF标志只是字符串的囤方向,比如hello
当DF=1的下固然告诉CPU 在内存中打低至高是如此存储的olleh,
当DF=0的时节便告诉CPU从没有到强是hello这样存储的。具体于说及令的当儿会详细将至。

    IF  中断标志位(Interrupt Flag)  是否同意中断(中断就是死CPU指令的正规履行后说到),IF=1表示同意中断,IF=0表示不同意中断

    TF  跟踪标志位(Trace Flag)  单补执行,借使TF=1
那么CPU执行完毕一久指令后便晤面进来单布中断。

留下评论