寄存器汇编命令详解,存款和储蓄器分段

8086汇编——Introduction

1、808六CPU的二种职业形式

  1. 实格局:唯有低十十二人地方线起效用,仅能寻址第1个1MB的内存空间。MS
    DOS运转于该方式下。
  2. 爱惜格局:在该形式下,机器可提供虚拟存款和储蓄的管理和多职分的管理机制。Windows
    九x/NT/3000运营与该情势下。
  3. 虚构80八陆情势:同时效仿三个808陆处理器的工作。

壹、数据寄存器
多少寄存器首要用来保存操作数和平运动算结果等信息,从而节省读取操作数所需占用总线和访问存款和储蓄器的岁月。
三十二人CPU有伍个三十四个人的通用寄存器EAX、EBX、ECX和EDX。
对低拾伍人数据的存取,不会潜移默化高贰十二个人的数据。
这几个低16位寄存器分别命名称为:AX、BX、CX和DX,它和从前的CPU中的寄存器相平等。
七个14位寄存器又可划分成七个单身的七个人寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每一个寄存器都有投机的名目,可单独存取。
技士可选拔多少寄存器的那种“可分可合”的特征,灵活地管理字/字节的音讯。

二、80八陆管理器系统的构成

图片 1

对此汇编制程序序来说,我们供给关怀CPU中的寄存器、存款和储蓄器地址、端口(I/O地址)。

【内部存款和储蓄器单元的三个因素】: 地址(编号)和值(内容)。

【字节、字、双字】
多字节数据在存款和储蓄器中占三番五次的八个存款和储蓄单元。低位字节存入低地址,高位字节存入高地址。

字节:8086的内部存款和储蓄器以字节编址,每种内存单元有唯一的地点(物理地址),能够存放1个字节。
:一个字占领五个接二连三的字节。
双字:双字占有多少个一连的字。

以低地址表示多字节数据存款和储蓄的岗位。

【数据的地址对齐】
字单元安插在偶地址(xxx0B),双字单元陈设在模4地址(xx00B)等。

对于非对齐地址的数目,管理器访问时索要反复拜访存款和储蓄器,那样做开销时间较多。

【总线】
8086的系统总线有3种:

  1. 数量总线
  2. 地址总线:80八6CPU外部1共有20条地址总线,但在CPU内部一遍只好传送15位地方。
  3. 调整总线

【I/O】
I/O地址叫做端口,常常使用十陆进制数来表明端口:

  • 8086的I/O端口为16位,可支持64k个8位端口;
  • I/O地址范围为:0000H ~ FFFFH

【808陆的成效布局】

  • 总线接口单元BIU:首要承担读取指令和操作数。
  • 推行单元EU:首要承担指令译码和实施。

8086汇编——Introduction

四、串指令
 
  
DS:SI 源串段寄存器 :源串变址.  
  
ES I 目的串段寄存器:目标串变址.  
  
CX 重复次数计数器.  
  
AL/AX 扫描值.  
  
D标记 0代表重复操作中SI和DI应自行增量; 1表示应自行减量.  
  
Z标记 用来调控扫描或相比较操作的截至.  
  
MOVS 串传送.  
  
( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. )  
  
CMPS 串比较.  
  
( CMPSB 比较字符. CMPSW 相比字. )  
  
SCAS 串扫描.  
    
把AL或AX的始末与对象串作相比较,比较结实反映在表明位.  
  
LODS 装入串.  
    
把源串中的成分(字或字节)逐一装入AL或AX中.  
  
( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. )  
  
STOS 保存串.  
  
是LODS的逆进程.  
  
REP 当CX/ECX0时重复.  
  
REPE/REPZ 当ZF=一或比较结实至极,且CX/ECX0时重复.  
  
REPNE/REPNZ 当ZF=0或相比结实不等于,且CX/ECX0时重复.  
  
REPC 当CF=1且CX/ECX0时重复.  
  
REPNC 当CF=0且CX/ECX0时重复.  

叁、汇编语言程序、汇编制程序序、连接程序、调节和测试程序

汇编制程序序:汇编制程序序将汇编语言源程序翻译(或称为“汇编”)成机器代码目标模块。
.ASM -> .OBJ

留意区分汇编制程序序与汇编语言源程序。

连天程序:连接程序将汇编后的靶子模块转换为可实施程序。

调节和测试程序:调节和测试程序以便排错、分析等。

叁、汇编语言程序、汇编制程序序、连接程序、调节和测试程序

汇编制程序序:汇编程序将汇编语言源程序翻译(或称为“汇编”)成机器代码目标模块。
.ASM -> .OBJ

留神区分汇编制程序序与汇编语言源程序。

连接程序:连接程序将汇编后的靶子模块调换为可实践程序。

调节和测试程序:调节和测试程序以便排错、分析等。

汇编命令详解

四、寄存器组

实行单元EU有捌个通用寄存器。个中积存3个指令指针寄存器,二个标识寄存器,5个段寄存器。

【1四个人通用寄存器】
AX、BX、CX、DX、SI、DI、BP、SP
内部AX、BX、CX、DX能够分作高6位和低6位的多个单身寄存器。如:AH和AL。大家对里面七人的操作,并不影响此外对应的8个人数据。

一、数据寄存器ax、bx、cx、dx
数量寄存器用来存放总计的结果和操作数,也能够存放地方。
各样寄存器又有它们分其他专用目标。

  • AX——累加器,使用频度最高,用于算术、逻辑运算以及与外设传送消息等;
  • BX——基址寄存器,常用做存放存款和储蓄器地址;
  • CX——计数器,作为循环和串操作等一声令下中的隐含计数器;
  • DX——数据寄存器,常用来存放在双字长数据的高15个人,或存放外设端口地址。

二、变址寄存器si、di
变址寄存器常用来存款和储蓄器寻址时提供地方

  • SI是源变址寄存器
  • DI是目标变址寄存器
    串操作类指令中,SI和DI具有尤其的职能

3、指针寄存器sp、bp
指南针寄存器用于寻址内部存款和储蓄器仓库内的数额

  • SP为宾馆指针寄存器,提醒栈顶的偏移地址。
    SP不可能再用于其它目的,具备专用目的。SP始终指向栈顶。
  • BP为基址指针寄存器,表示数据在仓库段中的营地址。

SP和BP寄存器与SS段寄存器联合使用以分明仓库段中的存款和储蓄单元地址

4、堆栈
8086中货仓平时有计算机自动维持,由仓库段寄存器SS和货栈指针寄存器SP共同提醒。

5、指令指针寄存器IP
指令代码段中指令的偏移地址。与代码段寄存器CS连用(CS:IP)。

陆、标记寄存器
申明(flag)用于反映指令实施结果或调整指令实践情势。

十五人的标记寄存器——程序状态字PSW寄存器。
图片 2

情状标识(四个)——用来记录程序运营结果的情状消息,多数发令的施行都将相应地安装它。
CF ZF SF PF OF AF

支配标识(一个)——可由程序依据需求用命令设置,用于调节Computer实行命令的措施。
DF IF TF

  1. 进位标识CF(CarryFlag):当运算结果的参天有效位有进位(加法)或借位(减法)时,CF=壹,or
    CF=0;

  2. 零标记位ZF(Zero Flag):若运算结果为0时,ZF=一,or ZF=0;

  3. 标记标志位SF(Sign Flag):运算结果最高位为一,则SF=一,or SF=0。
    有暗号数据用最高有效位代表数据的暗号。所以,最高有效位就是符号标识的情状

  4. 奇偶标识位PF(Parity
    Flag):当运算结果最低字节中“一”的个数为零或偶数时,PF=一;or PF=0。
    PF标识仅反映最低7人中“一”的个数是偶或奇,尽管是进行1八位字操作。

伍.溢出标识OF(Overflow Flag):若算术结果有溢出,OF=一,or
OF=0;【什么是溢出?溢出推断】

6.救助进位标识AF(Auxiliary CarryFlag):运算时D3位(低半字节)有进位或借位时,AF=1,or
AF=0。那些标记首要由微型Computer内部使用,用于拾进制算术运算调节指令中,用户一般不要关切。

7.方向标志DF(Direction Flag):用于串操作指令中,调控地方的变型趋势:

  • 安装DF=0,存款和储蓄器地址自动扩大;
  • 安装DF=壹,存款和储蓄器地址自动削减。
  • CLD指令重新恢复设置方向标记:DF=0;
  • STD指令置位方向标记:DF=1。

捌.中断允许标记IF(Interrupt-enable
Flag):用于调节外部可屏蔽中断是还是不是足以被计算机响应:

  • 设置IF=一,允许中断;
  • 设置IF=0,禁止中断。
  • CLI指令重置中断标记:IF=0;
  • STI指令置位中断标记:IF=一。

九.陷阱标识TF(Trap Flag):用于调控计算机进入单步操作形式:

  • 设置TF=0,管理器常常专门的学业;
  • 设置TF=壹,处理器单步实行命令。
    单步推行命令——管理器在每条指令试行实现时,便发生三个号码为壹的内部中断。那种中间中断称为单步中断。所以TF也叫做单步标记。

七、段寄存器
段地址——段的初叶地址的高15位地点。段内再由13人二进制数来寻址。
舞狮地址——段内部存储器储单元到段首地址的字节的离开。
物理地址——用1十二位贰进制数表示。地址范围为00000H ~
FFFFFH。物理地址唯1标记二个存储单元。
逻辑地址——段地址:偏移地址,逻辑地址不唯壹。
大要地址=段地址x16+偏移地址

80捌陆有5个十几个人的段寄存器。

  1. 代码段CS(Code Segment):指南梁码段的 早先地址。
    代码段用来存放程序的吩咐连串。指令指针寄存器IP提示下一条指令的晃动地址。管理器利用CS:IP赚取下一条要实行的下令。

  2. 酒馆段SS(Stack Segment):指明货仓段的苗子地址。
    货仓段鲜明仓库所在的主存区域。旅馆指针寄存器SP提醒货仓栈顶的晃动地址。管理器利用SS:SP操作仓库栈顶的数目。

  3. 数码段DS(Data Segment):指明数据段的开局部址。
    数量段存放运转程序所用的数目。各样主存寻址方式(有效地址EA)得到存款和储蓄器中操作数的舞狮地址。管理器利用DS:EA存取数据段中的数据。

  4. 外加段ES(Extra Segment):指明附加段的开场面址。
    附加段是外加的数据段,也用于数据的保存。各类主存寻址格局(有效地址EA)获得存款和储蓄器中操作数的撼动地址。管理器利用ES:EA存取附加段中的数据。
    串操作指令将附加段作为其目标操作数的寄放区域。

【关于分段】

  1. 80八6对逻辑段的需要:
  • 段地址低几个人均为0
  • 每段最大不超过64KB(贰16 B),但并不必要必须为64KB
  • 各段之间能够单独,也得以有臃肿
  1. 什么分配各类逻辑段
  • 先后的吩咐体系必须安顿在代码段。
  • 程序采纳的库房一定在仓库段。
  • 程序中的数据默许是布置在数据段,也每每安顿在附加段,尤其是串操作的目的区必须是附加段。
  • 多少的存放比较灵敏,实际上能够存放在其它1种逻辑段中。

八、段超越前缀指令
并未有指明时,一般的数量访问在DS段;使用BP访问主存,则在SS段
私下认可的气象允许退换,需求利用段超过前缀指令;80八陆指令系统中有四个,用于明显钦赐数量所在的逻辑段:
CS: ;代码段抢先,使用代码段的数码
SS: ;仓库段超过,使用仓库段的多少
DS: ;数据段超过,使用数据段的数量
ES: ;附加段超过,使用附加段的数码

【段超越示例】
图片 3

【分化意利用段超过的图景】

  • 串管理指令的目标串必须用ES段;
  • PUSH指令的目的和POP指令的源必须用SS段;
  • 命令必须存放在CS段。

【段寄存器的利用规定】
图片 4

【补充】

【什么是溢出】
计算机内部以补码表示有标识数。伍位表明的平头范围是:+12七~-12813位表明的范围是:+32767~-3276八。借使运算结果出乎那个界定,就时有产生了溢出。有溢出,表达有暗号数的运算结果不得法。

【溢出和进位】
溢出标志OF和进位标识CF是七个意思分化的标识。
进位标识表示无符号数运算结果是还是不是超越范围,运算结果照旧正确;
溢出标识表示有号子数运算结果是不是超越范围,运算结果早就不科学。图片 5

【怎么着利用溢出和进位】

  • 管理器对四个操作数实行演算时,遵照无符号数求得结果,并相应设置进位标记CF;同时,依照是不是抢先有号子数的限定设置溢出标记OF。

  • 相应运用哪个标识,则由程序员来支配。也正是说,假使将要场运算的操作数以为是无符号数,就应有关切进位;感觉是有标记数,则要专注是还是不是溢出。

【溢出判别】
推断运算结果是还是不是溢出有四个简便的平整:

  • 只有当五个一律符号数相加(包涵分歧符号数相减),而运算结果的标识与原数据符号相反时,爆发溢出;因为,此时的演算结果分明不科学。

  • 任何意况下,则不会时有爆发溢出。

三十二个人CPU所包涵的寄存器有:
两个数据寄存器(EAX、EBX、ECX和EDX)
二个变址和指针寄存器(ESI和EDI)
一个指针寄存器(ESP和EBP) 
五个段寄存器(ES、CS、SS、DS、FS和GS)
3个指令指针寄存器(EIP)
二个标记寄存器(EFlags) 

【补充】

【什么是溢出】
Computer内部以补码表示有标识数。五人表达的整数范围是:+1二七~-12八十几位表达的限定是:+327陆七~-3276八。若是运算结果出乎那几个界定,就生出了溢出。有溢出,表达有暗号数的演算结果不得法。

【溢出和进位】
溢出标识OF和进位标记CF是八个意思不一致的注脚。
进位标识表示无符号数运算结果是不是超越范围,运算结果仍然依然准确;
溢出标记表示有暗号数运算结果是不是超出范围,运算结果已经不科学。图片 6

【怎么着使用溢出和进位】

  • Computer对四个操作数举办演算时,依据无符号数求得结果,并相应设置进位标识CF;同时,依照是还是不是超过有暗号数的限量设置溢出标识OF。

  • 有道是采纳哪个标记,则由技师来调控。也正是说,假若将加入运算的操作数认为是无符号数,就相应关心进位;以为是有号子数,则要留心是或不是溢出。

【溢出判别】
认清运算结果是还是不是溢出有三个简易的平整:

  • 唯有当五个1律符号数相加(包罗分裂符号数相减),而运算结果的标志与原数据符号相反时,爆发溢出;因为,此时的演算结果肯定不科学。

  • 此外景况下,则不会生出溢出。

贰、80八陆Computer系统的构成

图片 7

对于汇编制程序序来说,我们供给关爱CPU中的寄存器、存款和储蓄器地址、端口(I/O地址)。

【内部存款和储蓄器单元的多少个成分】: 地址(编号)和值(内容)。

【字节、字、双字】
多字节数据在存款和储蓄器中占一连的五个存款和储蓄单元。低位字节存入低地址,高位字节存入高地址。

字节:80捌陆的内部存款和储蓄器以字节编址,每个内存单元有唯1的地点(物理地址),能够存放一个字节。
:四个字占领多个三番五次的字节。
双字:双字攻下三个延续的字。

以低地址表示多字节数据存款和储蓄的任务。

【数据的地点对齐】
字单元安排在偶地址(xxx0B),双字单元布署在模四地址(xx00B)等。

对于非对齐地址的多寡,处理器访问时索要反复做客存款和储蓄器,那样做耗时较多。

【总线】
80八6的系统总线有三种:

  1. 数码总线
  2. 地址总线:8086CPU外部一共有20条地址总线,但在CPU内部二遍只可以传送十三人地点。
  3. 操纵总线

【I/O】
I/O地址叫做端口,经常使用十6进制数来公布端口:

  • 8086的I/O端口为16位,可支持64k个8位端口;
  • I/O地址范围为:0000H ~ FFFFH

【80八6的作用结构】

  • 总线接口单元BIU:首要承担读取指令和操作数。
  • 进行单元EU:首要担任指令译码和实践。

二、状态调控标记位
气象调节标识位是用来支配CPU操作的,它们要经过专门的下令手艺使之产生变动。
一、追踪标记TF(Trap
Flag)
当跟踪标识TF被置为一时,CPU进入单步试行措施,即每推行一条指令,发生一个单步中断请求。那种办法首要用于程序的调护治疗。
指令系统中尚无尤其的吩咐来改变标识位TF的值,但技士可用其余方式来退换其值。
二、中断允许标识IF(Interrupt-enable
Flag)
停顿允许标识IF是用来调整CPU是或不是响应CPU外部的可屏蔽中断发出的中断请求。
但随意该标识为什么值,CPU都不可能不响应CPU外部的不可屏蔽中断所爆发的中断请求,以及CPU内部发生的中断请求。
实际规定如下:
(一)、当IF=1时,CPU能够响应CPU外部的可屏蔽中断发出的中断请求;
(贰)、当IF=0时,CPU不响应CPU外部的可屏蔽中断发出的中断请求。
CPU的指令系统中也有专门的通令来改造标记位IF的值。
3、方向标识DF(Direction
Flag)
动向标记DF用来支配在串操作指令推行时有关指针寄存器发生调节的取向。具体规定在第6.2.1一节——字符串操作指令——中提交。
在管理器的指令系统中,还提供了特别的命令来更动标记位DF的值。
3、三11人标识寄存器增添的标识位
1、I/O特权标识IOPL(I/O
Privilege Level)
I/O特权标识用两位二进制位来表示,也称为I/O特权级字段。该字段钦点了须求奉行I/O指令的特权级。
借使当前的特权等级在数值上稍低于等于IOPL的值,那么,该I/O指令可进行,不然将生出3个保卫安全格外。
2、嵌套任务标识NT(Nested
Task)
嵌套职责标记NT用来调节中断重临指令IRET的实施。具体规定如下:
(壹)、当NT=0,用仓库中保存的值恢复生机EFLAGS、CS和EIP,实践例行的暂停重返操作;
(二)、当NT=壹,通过义务调换实现中断再次来到。
三、重运行标记PAJEROF(Restart
Flag)
重运行标识奔驰G级F用来决定是或不是接受调治将养故障。规定:CRUISERF=0时,表示“接受”调节和测试故障,不然拒绝之。
在成功进行完一条指令后,管理机把牧马人F置为0,当接受到1个非调节和测试故障时,管理机就把它置为壹。
四、虚拟808陆主意申明VM(Virtual
80八陆 Mode)
假若该标记的值为一,则表示管理机处于虚拟的80八陆办法下的做事情形,不然,处理机处于一般爱抚格局下的行事状态。

1、8086CPU的二种工作方式

  1. 实格局:唯有低十几个人地点线起效能,仅能寻址第二个1MB的内部存储器空间。MS
    DOS运转于该形式下。
  2. 尊敬格局:在该情势下,机器可提供虚拟存储的军管和多职分的管理机制。Windows
    玖x/NT/贰仟运营与该格局下。
  3. 虚拟80八陆形式:同时效仿多少个80八陆Computer的专业。

四、寄存器组

实行单元EU有九个通用寄存器。当中富含3个指令指针寄存器,2个标识寄存器,陆个段寄存器。

【15位通用寄存器】
AX、BX、CX、DX、SI、DI、BP、SP
中间AX、BX、CX、DX能够分作高伍位和低8个人的七个独立寄存器。如:AH和AL。咱们对内部陆位的操作,并不影响其余对应的伍人数据。

一、数据寄存器ax、bx、cx、dx
数量寄存器用来存放在总结的结果和操作数,也足以存放地点。
各类寄存器又有它们分其他专用目标。

  • AX——累加器,使用频度最高,用于算术、逻辑运算以及与外设传送音信等;
  • BX——基址寄存器,常用做存放存款和储蓄器地址;
  • CX——计数器,作为循环和串操作等一声令下中的隐含计数器;
  • DX——数据寄存器,常用来存放在双字长数据的高15位,或存放外设端口地址。

2、变址寄存器si、di
变址寄存器常用于存款和储蓄器寻址时提供地点

  • SI是源变址寄存器
  • DI是目标变址寄存器
    串操作类指令中,SI和DI具有越发的成效

三、指针寄存器sp、bp
指南针寄存器用于寻址内部存储器旅社内的多寡

  • SP为宾馆指针寄存器,提示栈顶的偏移地址。
    SP不能够再用于别的目的,具备专用目标。SP始终指向栈顶。
  • BP为基址指针寄存器,表示数据在仓库段中的营地址。

SP和BP寄存器与SS段寄存器联合使用以分明饭馆段中的存款和储蓄单元地址

4、堆栈
808陆中旅舍经常有管理器自动维持,由货仓段寄存器SS和货栈指针寄存器SP共同提醒。

5、指令指针寄存器IP
指令代码段中指令的撼动地址。与代码段寄存器CS连用(CS:IP)。

陆、标记寄存器
标明(flag)用于反映指令实践结果或调控指令实施情势。

13个人的标记寄存器——程序状态字PSW寄存器。
图片 8

状态标记(五个)——用来记录程序运营结果的情况新闻,多数指令的施行都将相应地设置它。
CF ZF SF PF OF AF

决定标识(三个)——可由程序依据要求用命令设置,用于调控Computer施行命令的章程。
DF IF TF

  1. 进位标识CF(CarryFlag):当运算结果的最高有效位有进位(加法)或借位(减法)时,CF=1,or
    CF=0;

  2. 零标记位ZF(Zero Flag):若运算结果为0时,ZF=1,or ZF=0;

  3. 标记标识位SF(Sign Flag):运算结果最高位为一,则SF=一,or SF=0。
    有号子数据用最高有效位表示数据的标志。所以,最高有效位正是标记标记的情事

  4. 奇偶标识位PF(Parity
    Flag):当运算结果最低字节中“一”的个数为零或偶数时,PF=一;or PF=0。
    PF标记仅反映最低伍人中“一”的个数是偶或奇,就算是拓展13个人字操作。

伍.溢出标识OF(Overflow Flag):若算术结果有溢出,OF=一,or
OF=0;【什么是溢出?溢出决断】

6.推抢进位标记AF(Auxiliary CarryFlag):运算时D3位(低半字节)有进位或借位时,AF=一,or
AF=0。那么些标识首要由Computer内部使用,用于十进制算术运算调治指令中,用户一般不要关切。

7.方向标记DF(Direction Flag):用于串操作指令中,调整地点的退换趋势:

  • 安装DF=0,存款和储蓄器地址自动扩张;
  • 安装DF=一,存款和储蓄器地址自动削减。
  • CLD指令复位方向标识:DF=0;
  • STD指令置位方向标记:DF=1。

8.中断允许标记IF(Interrupt-enable
Flag):用于调控外部可屏蔽中断是不是足以被计算机响应:

  • 设置IF=一,允许中断;
  • 设置IF=0,禁止中断。
  • CLI指令重新初始化中断标识:IF=0;
  • STI指令置位中断标识:IF=一。

九.陷阱标记TF(Trap Flag):用于调整Computer进入单步操作方式:

  • 设置TF=0,管理器平常职业;
  • 设置TF=一,管理器单步实践命令。
    单步实施命令——处理器在每条指令实行完成时,便发生七个数码为一的里边中断。那种中间中断称为单步中断。所以TF也称之为单步标识。

7、段寄存器
段地址——段的开场馆址的高十四个人地点。段内再由十四个人2进制数来寻址。
舞狮地址——段内部存款和储蓄器储单元到段首地址的字节的离开。
物理地址——用17位2进制数表示。地址范围为00000H ~
FFFFFH。物理地址唯一标记三个存款和储蓄单元。
逻辑地址——段地址:偏移地址,逻辑地址不唯1。
轮廓地址=段地址x1六+偏移地址

808陆有四个15人的段寄存器。

  1. 代码段CS(Code Segment):指南梁码段的 起头地址。
    代码段用来存放程序的下令种类。指令指针寄存器IP提示下一条指令的晃动地址。管理器利用CS:IP赚取下一条要实践的指令。

  2. 货仓段SS(Stack Segment):指明货仓段的序幕地址。
    宾馆段分明酒馆所在的主存区域。酒馆指针寄存器SP指示仓库栈顶的晃动地址。管理器利用SS:SP操作仓库栈顶的数额。

  3. 数码段DS(Data Segment):指明数据段的开始地址。
    数量段存放运维程序所用的数额。各个主存寻址情势(有效地址EA)获得存款和储蓄器中操作数的偏移地址。管理器利用DS:EA存取数据段中的数据。

  4. 外加段ES(Extra Segment):指明附加段的胚胎地址。
    附加段是外加的数据段,也用于数据的保留。各个主存寻址情势(有效地址EA)得到存款和储蓄器中操作数的撼动地址。管理器利用ES:EA存取附加段中的数据。
    串操作指令将附加段作为其目标操作数的寄放区域。

【关于分段】

  1. 80八6对逻辑段的须要:
  • 段地址低三个人均为0
  • 每段最大不超过64KB(二16 B),但并不供给必须为64KB
  • 各段之间能够独立,也足以有重合
  1. 什么样分配各种逻辑段
  • 次第的下令连串必须布署在代码段。
  • 先后采纳的宾馆一定在货仓段。
  • 先后中的数据默许是布署在数据段,也时不时安插在附加段,越发是串操作的目标区必须是附加段。
  • 数据的存放相比较灵敏,实际上能够存放在别的①种逻辑段中。

八、段超过前缀指令
尚未指明时,一般的数码访问在DS段;使用BP访问主存,则在SS段
暗中同意的图景允许改变,供给采用段超过前缀指令;808陆指令系统中有伍个,用于鲜明钦点数量所在的逻辑段:
CS: ;代码段超越,使用代码段的多少
SS: ;客栈段超过,使用旅馆段的数量
DS: ;数据段抢先,使用数据段的数码
ES: ;附加段超越,使用附加段的多少

【段超越示例】
图片 9

【不允许利用段领先的情状】

  • 串管理指令的目标串必须用ES段;
  • PUSH指令的目的和POP指令的源必须用SS段;
  • 一声令下必须存放在CS段。

【段寄存器的采用规定】
图片 10

四、段寄存器
段寄存器是基于内部存款和储蓄器分段的处理格局而设置的。内部存款和储蓄器单元的情理地址由段寄存器的值和四个偏移量组合而成
的,那样可用四个较少位数的值组合成3个可访问非常大物理空间的内部存款和储蓄器地址。
CPU内部的段寄存器:
ECS——代码段寄存器(Code
Segment Register),其值为代码段的段值; 
EDS——数据段寄存器(Data
Segment Register),其值为数据段的段值; 
EES——附加段寄存器(Extra
Segment Register),其值为附加数据段的段值; 
ESS——旅社段寄存器(Stack
Segment Register),其值为酒店段的段值; 
EFS——附加段寄存器(Extra
Segment Register),其值为附加数据段的段值; 
EGS——附加段寄存器(Extra
Segment Register),其值为附加数据段的段值。 
在15位CPU系统中,它惟有四个段寄存器,所以,程序在任哪天刻至多有5个正在选拔的段可间接待上访问;在三九人
Computer系统中,它有伍个段寄存器,所以,在此境况下开拓的主次最多可同时做客五个段。
三12人CPU有七个不相同的办事格局:实情势和珍惜格局。在各种方法下,段寄存器的效益是例外的。有关规定简
单描述如下:
实格局:
前多少个段寄存器CS、DS、ES和SS与此前CPU中的所对应的段寄存器的含义完全一致,内部存款和储蓄器单元的逻辑
地方仍为“段值:偏移量”的花样。为访问某内部存款和储蓄器段内的多寡,必须运用该段寄存器和存款和储蓄单元的偏移量。 
爱抚情势:
在此办法下,情形要复杂得多,装入段寄存器的不再是段值,而是称为“接纳子”(Selector)的某部值。。 

3.
目标地址传送指令.
LEA
装入有效地址.
例: LEA DX,string
;把偏移地址存到DX.
LDS
传送目的指针,把指针内容装入DS.
例: LDS SI,string
;把段地址:偏移地址存到DS:SI.
LES
传送目的指针,把指针内容装入ES.

处理器寄存器常用命令

寄存器EAX平时称为累加器(Accumulator),用累加器实行的操作大概要求更加少时间。可用以乘、
除、输入/输出等操作,使用作用异常高;

伍、程序转移指令
 
一.粗略的规格转移指令 
JZ(或jE)   
OP福睿斯—————结果为零转移,  测试条件ZF=1 
JNZ(或jNE) 
OP奥迪Q7 ————–结果不为零转移,测试条件ZF=0 
JS  
OP奥德赛———————-结果为负转移,  测试条件SF=1 
JNS  
OPLX570———————结果为正改变,  测试条件SF=0 
JO  
OP汉兰达——————— 溢出转移,      测试条件OF= 
JNO  
OPHaval ——————–不溢出转移 ,   测试条件SF=0 
JP  
OPGL450 ———————结果为偶转移,  测试条件SF=一 
JNP  
OP福睿斯 ——————–结果为奇转移 , 测试条件SF=0 
JC  
OPR ——————– 有进位转移 ,   测试条件SF=一 
JNC  
OP安德拉 ——————–无进位转移,    测试条件SF=0 
2.无符号相比原则转移指令(以下指令平常是CMP
OPD,OPS前边的下令依照比较结实来贯彻转移) 
JB(或JNAE)
opd ————–小于只怕不超过等于则转移 
JNB(或JAE)
opd—————相当的大于可能超过等于则转移 
JA(或NJBE)
OPD—————大于大概不小于等于则转移 
JNA(或JBE)
OPD—————不当先可能小于等于则转移 
叁.带符号相比基准转移指令 
JL(或JNGE)
————–小于或然不当先等于则转移 
JNL(或JGE)————–非常的大于只怕超越等于则转移 
JG(或NJLE)—————大于可能不低于等于则转移 
JNG(或JLE)—————不高于或许小于等于则转移 
六、调用子程序与重回指令 
CALL    
子程序调用指令 
RET  
子程序再次回到指令 

LFS
传送目标指针,把指针内容装入FS.
例: LFS DI,string
;把段地址:偏移地址存到FS:DI.
LGS
传送指标指针,把指针内容装入GS.
例: LGS DI,string
;把段地址:偏移地址存到GS:DI.
LSS
传送目的指针,把指针内容装入SS.
例: LSS DI,string
;把段地址:偏移地址存到SS:DI.

寄存器ECX称为计数寄存器(Count
Register)。

三、逻辑运算指令
 
  
AND 与运算.  
  
OR 或运算.  
  
XO索罗德 异或运算.  
  
NOT 取反.  
  
TEST 测试.(两操作数作与运算,仅修改标记位,不回送结果).  
  
SHL 逻辑左移.  
  
SAL 算术左移.(=SHL)  
  
SHHighlander 逻辑右移.  
  
SAENVISION 算术右移.(=SHLAND)  
  
ROL 循环左移.  
  
ROEnclave 循环右移.  
  
陆风X八CL 通过进位的循环左移.  
  
讴歌ZDXC安德拉 通过进位的循环右移.  
    
以上两种移位指令,其移动次数可达二伍十七回.  
    
移位三次时, 可径直用操作码. 如 SHL AX,1.  
    
移位>三回时, 则由寄存器CL给出移位次数.  
     
如 MOV CL,04  
        
SHL AX,CL  

壹、进位标识CF(凯丽Flag)
进位标志CF首要用于反映运算是不是产生进位或借位。若是运算结果的最高位发生了三个进位或借位,那么,其值为1,不然其值为0。
利用该标识位的状态有:多字(字节)数的加减运算,无符号数的轻重比较运算,移位操作,字(字节)之间活动,专门改动CF值的指令等。
二、奇偶标识PF(Parity
Flag)
奇偶标记PF用于反映运算结果中“一”的个数的奇偶性。即使“一”的个数为偶数,则PF的值为一,不然其值为0。
使用PF可进展奇偶校验检查,或发生奇偶校验位。在数量传送进程中,为了提供传送的可靠性,借使选取奇偶校验的不二秘诀,就可应用该标识位。
三、帮忙进位标识AF(Auxiliary
Carry Flag)
在发出下列意况时,匡助进位标志AF的值被置为一,不然其值为0:
(1)、在字操作时,发生低字节向高字节进位或借位时;
(二)、在字节操作时,发生低3位向高3人进位或借位时。
对上述陆个运算结果标识位,在一般编制程序景况下,标识位CF、ZF、SF和OF的运用作用较高,而标记位PF和AF的行使频率极低。
4、零标志ZF(Zero
Flag)
零标记ZF用来显示运算结果是不是为0。假诺运算结果为0,则其值为一,不然其值为0。在认清理与运输算结果是不是为0时,可利用此标记位。
五、符号标志SF(Sign
Flag)
标志标记SF用来呈现运算结果的旗号位,它与运算结果的参天位同样。在微型Computer系统中,有标记数选拔码表示法,所以,SF也就反映运算结果的正负号。运算结果为正数时,SF的值为0,不然其值为1。
陆、溢出标记OF(Overflow
Flag)
溢出标识OF用于反映有暗记数加减运算所得结果是不是溢出。假诺运算结果超越近期运算位数所能表示的限量,则号称溢出,OF的值被置为一,不然,OF的值被清为0。
“溢出”和“进位”是八个例外含义的概念,不要混淆。要是不太精晓的话,请查阅《Computer组成原理》课程中的有关章节。

陆、标记寄存器

陆、别的指令 
OFFSET  
——————– 再次回到偏移地址 
SEG    
——————– 重返段地址 
EQU(=) 
——————–  等值语句 
PU奥迪Q3GE 
——————–  解除语句 
DUP   
——————–  操作数字段用复制操作符 
SE创新霉素ENT,ENDS 
——————–  段定义指令 
ASSUME  
——————– 段地址分配指令 
ORubiconG   
——————–  早先偏移地址设置指令 
$     
——————–地址计数器的此时此刻值 
PROC,ENDP 
——————–  进程定义语句 
NAME,TITLE,END 
——————–  程序开始终结语句 
MACRO,ENDM   
——————–宏定义指令 
XLAT   
(TRANSLATE) ——————–   换码指令—- 

二、算术运算指令
 
  
ADD 加法.  
  
ADC 带进位加法.  
  
INC 加 1.  
  
AAA 加法的ASCII码调整.  
  
DAA 加法的十进制调度.  
  
SUB 减法.  
  
SBB 带借位减法.  
  
DEC 减 1.  
  
NEC 求反(以 0 减之).  
  
CMP 相比.(两操作数作减法,仅修改标记位,不回送结果).  
  
AAS 减法的ASCII码调整.  
  
DAS 减法的10进制调度.  
  
MUL 无符号乘法.  
  
IMUL 整数乘法.  
    
以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算),  
  
AAM 乘法的ASCII码调整.  
  
DIV 无符号除法.  
  
IDIV 整数除法.  
    
以上两条,结果回送:  
    
商回送AL,余数回送AH, (字节运算);  
    
或 商回送AX,余数回送DX, (字运算).  
  
AAD 除法的ASCII码调整.  
  
CBW 字节调换为字. (把AL中字节的标志扩展到AH中去)  
  
CWD 字转变为双字. (把AX中的字的号子扩张到DX中去)
  
CWDE 字调换为双字. (把AX中的字符号扩充到EAX中去)  
  
CDQ 双字扩充. (把EAX中的字的标志扩张到EDX中去) 

四.
标识传送指令.  
  
LAHF 标记寄存器传送,把标识装入AH.  
  
SAHF 标记寄存器传送,把AH内容装入标识寄存器.  
  
PUSHF 标识入栈.  
  
POPF 标识出栈.  
  
PUSHD 32位标记入栈.  
  
POPD 3十二位标记出栈.

在循环和字符串操作时,要用它来支配循环次数;在位操作中,当移多位时,要用CL来指明移位的位数;

7、条件标识 
ZF
零标记 — 当结果为负时,SF=1,不然,SF=0. 
AF
协助进位标识—运算进程中第二人有进位值,置AF=一,否则,AF=0 
PF
奇偶标识——当结果操作数中偶数个”一”,置PF=一,不然,PF=0 
SF 
符号标识—-当结果为负时,SF=1;不然,SF=0.溢出时情状差别 
CF
进位标识—–
最高有效位产生进位值,举个例子,实施加法指令时,MSB有进位,置CF=壹;不然,CF=0. 
OF
溢出标志—–若操作数结果出乎了机械能代表的范围,则发出溢出,置OF=壹,不然,OF=0 

贰.
输入输出端口传送指令.  
  
IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} )  
  
OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器 )  
  
输入输出端口由当时格局钦命期, 其范围是 0-255; 由寄存器 DX
指定期,其范围是 0-65535.  

2、变址寄存器
30位CPU有一个三16个人通用寄存器ESI和EDI。
其低十五人对应先前CPU中的SI和DI,对低15个人数据的存取,不影响高15位的数据。
寄存器ESI、EDI、SI和DI称为变址寄存器(Index
Register),它们首要用于存放存储单元在段内的偏移量,
用它们可完毕多种存款和储蓄器操作数的寻址格局,为以分歧的地址方式拜访存款和储蓄单元提供方便。
变址寄存器不可分割成伍位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和平运动算结果。
它们可作一般的存款和储蓄器指针使用。在字符串操作指令的施行进度中,对它们有特定的要求,而且还存有特种的功力。

1、运算结果申明位

③、指针寄存器
其低15个人对应先前CPU中的BP和SP,对低13个人数据的存取,不影响高十七人的数据。
30个人CPU有1个313人通用寄存器EBP和ESP。
它们首要用以访问仓库内的存款和储蓄单元,并且明确:
EBP为基指针(Base
Pointer)寄存器,用它可直接存取仓库中的数据; 
ESP为货仓指针(Stack
Pointer)寄存器,用它只可访问栈顶。 
寄存器EBP、ESP、BP和SP称为指针寄存器(Pointer
Register),主要用来存放旅社内部存款和储蓄器储单元的偏移量,
用它们可完成两种存款和储蓄器操作数的寻址形式,为以不一致的地点情势拜访存款和储蓄单元提供方便。
指南针寄存器不可分割成伍个人寄存器。作为通用寄存器,也可存款和储蓄算术逻辑运算的操作数和平运动算结果。

寄存器EDX称为数据寄存器(Data
Register)。在张开乘、除运算时,它可看做私下认可的操作数参预运算,也可用于存放I/O的端口地址。 
在14人CPU中,AX、BX、CX和DX无法作为基址和变址寄存器来存放存储单元的地点,
在三拾贰位CPU中,其三十七人寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果,
而且也可用作指针寄存器,所以,那个3一人寄存器更具有通用性。

寄存器EBX称为营地址寄存器(Base
Register)。它可看作存款和储蓄器指针来行使; 

http://wenku.baidu.com/view/2a399a5f312b3169a451a4f5.html

例: LES DI,string ;把段地址:偏移地址存到ES:DI.

一、常用命令
 
一.
通用数据传送指令.  
  
MOV 传送字或字节.  
  
MOVSX 先符号扩充,再传送.  
  
MOVZX 先零扩张,再传送.  
  
PUSH 把字压入仓库.  
  
POP 把字弹出货仓.  
  
PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入仓库.  
  
POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出仓库.  
  
PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入仓库.  
  
POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出货仓.  
  
BSWAP 调换3三位寄存器里字节的相继  
  
XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数)
 
  
CMPXCHG 相比并调换操作数.( 第2个操作数必须为累加器AL/AX/EAX )
 
  
XADD 先调换再累加.( 结果在首先个操作数里 )  
  
XLAT 字节查表转变.  
  
BX 指向一张 256 字节的表的源点, AL 为表的索引值 (0-25伍,即 0-FFH); 重回AL 为查表结果. ( [BX+AL]->AL )  

五、指令指针寄存器
38人CPU把指令指针扩张到三10人,并记作EIP,EIP的低十几人与先前CPU中的IP成效同样。
命令指针EIP、IP(Instruction
Pointer)是存放下次就要实施的授命在代码段的偏移量。
在装有预取指令成效的系统中,下次要实行的指令平常已被预取到指令队列中,除非产生转变状态。
于是,在知晓它们的机能时,不思量存在指令队列的意况。

相关文章