8086寄存器及指令英文全称
8086指令集机器码
8086指令集机器码
2. ADD指令(将两个数相加并将结果存储在目标位置): - 寄存器相加: 机器码:01 D1(例如,将ECX寄存器的值与EDX寄存器的值相加) - 立即数与寄存器相加: 机器码:83 C0 05(例如,将EAX寄存器的值与立即数05相加)
3. JMP指令(无条件跳转到指定的地址): - 相对短跳转: 机器码:EB rel8(例如,EB 05,跳转到相对偏移量为05的地址) - 相对长跳转: 机器码:E9 rel16(例如,E9 1234,跳转到相对偏移量为1234的地址)
8086指令集机器码
8086指令集是Intel 8086处理器的指令集架构,它定义了一系列的机器码(二进制代码 )来执行不同的操作。下面是一些常见的8086指令及其对应的机器码示例:
1. MOV指令(将数据从一个位置移动到另一个位置): - 传送立即数到寄存器: 机器码:B8 imm16(例如,B8 1234) - 传送寄存器到寄存器: 机器码:89 C1(例如,将EAX寄存器的值传送到ECX寄存器) - 传送内存到寄存器: 机器码:8B 45 08(例如,将偏移地址为08的内存单元的值传送到EAX寄存器)
8086指令集机器码
4. INT指令(触发中断): - 软中断: 机器码:CD int8(例如,CD 1,触发21号软中断)
这是8086指令集中的示例,每个指令都有特定的操作码和操作数,机器码的格式和长度 也会有所不同。如果需要查找特定指令的机器码,可以参考8086处理器的文档或相关资料。
汇编语言中的英文缩写
汇编语言中的英文缩写在汇编语言中,英文缩写是指将长词或短语用其首字母组合而成的缩写形式。
这些缩写在汇编语言中广泛使用,有助于简化代码编写和阅读的过程。
本文将介绍一些常用的汇编语言中的英文缩写。
1. 寄存器缩写在汇编语言中,寄存器是存储和处理数据的关键之一。
以下是一些常见寄存器的缩写:- 累加器(Accumulator):简写为 ACC- 数据寄存器(Data Register):简写为 DR- 源操作数寄存器(Source Operand Register):简写为 SOR- 目标操作数寄存器(Destination Operand Register):简写为 DOR - 程序计数器(Program Counter):简写为 PC2. 指令缩写汇编语言中的指令用于实现特定的操作,以下是一些常用指令的缩写:- 加法(Addition):简写为 ADD- 减法(Subtraction):简写为 SUB- 逻辑与(Logical AND):简写为 AND- 逻辑或(Logical OR):简写为 OR- 转移(Jump):简写为 JMP- 存储(Store):简写为 ST- 加载(Load):简写为 LD3. 程序标志缩写程序标志用于指示运行过程中的条件和结果,以下是一些常见的程序标志缩写:- 无进位标志(Carry Flag):简写为 CF- 零标志(Zero Flag):简写为 ZF- 溢出标志(Overflow Flag):简写为 OF- 符号标志(Sign Flag):简写为 SF4. 内存缩写在汇编语言中,对于内存地址或单元的引用也可以使用缩写形式,以下是一些例子:- 基地址寄存器(Base Address Register):简写为 BAR- 偏移量(Offset):简写为 OFF- 存储器(Memory):简写为 MEM5. 输入输出缩写在处理输入输出时,也存在一些常用的缩写形式:- 输入(Input):简写为 IN- 输出(Output):简写为 OUT- 打印(Print):简写为 PRNT- 读取(Read):简写为 RD在编写汇编代码或阅读他人的代码时,使用这些缩写能够提高代码的可读性和整洁度。
8086结构组成
8086结构组成一、简介8086是英特尔(Intel)公司于1978年推出的16位微处理器,是第一款具有高度通用性的微处理器。
8086结构包括各种功能部件,如寄存器组、运算单元、控制单元等。
本文将详细介绍8086的结构组成和各个组成部分的功能。
二、8086结构组成1. 寄存器组8086包含了多个寄存器,用于存储各种数据和地址信息。
寄存器组包括通用寄存器、指令指针寄存器、段寄存器等。
1.1 通用寄存器8086拥有四个16位的通用寄存器:AX、BX、CX、DX。
这些寄存器可以用于存储数据、地址以及进行运算。
1.2 指令指针寄存器指令指针寄存器IP存储当前执行指令的地址,可以进行程序的跳转和控制。
1.3 段寄存器8086采用段寄存器和偏移地址的方式来定位内存中的数据。
段寄存器包括代码段寄存器CS、数据段寄存器DS、堆栈段寄存器SS和附加段寄存器ES。
2. 运算单元8086拥有一个功能强大的运算单元,可以执行各种运算和逻辑操作。
运算单元包括算术逻辑单元ALU、标志寄存器FLAGS等部件。
2.1 算术逻辑单元(ALU)ALU是8086中重要的组成部分,负责执行各种算术和逻辑运算,如加法、减法、与、或等。
2.2 标志寄存器(FLAGS)FLAGS寄存器用于存储运算结果的状态信息,包括进位标志、零标志、溢出标志等。
这些标志位可以帮助程序进行条件分支和判断。
3. 控制单元控制单元是8086中负责控制和协调各个部件工作的组成部分。
主要包括指令译码器、时钟发生器等。
3.1 指令译码器指令译码器用于解析指令,将指令转化为相应的控制信号,控制其他部件的工作。
3.2 时钟发生器时钟发生器为8086提供稳定的时钟信号,用于同步各个部件的工作,确保指令能够按序执行。
4. 外部接口8086能够与外部设备进行通信,包括输入输出接口和存储器接口。
4.1 输入输出接口输入输出接口负责将内部数据和外部设备进行数据交换,通过输入输出指令控制。
8086CPU结构介绍及基础知识
分段管理的特点: ①起始点可浮动; ②可分开或重叠; ③实际地址由段地址、段内偏移地址组成; ④段首地址必须能被16整除
• 2、物理地址的形成
逻辑地址:存储器的任一个逻辑地址由段基址和偏移地址组成,程序设计时采 用。
•
段基址:偏移地址
物理地址:存储器的绝对地址,从00000~FFFFFH,它是由逻辑地址变换而来。
二、8086CPU的内部结构 8086CPU内部按功能可分为两部分: 1、BIU(总线接口部件) 功能:地址形成、取指令、指令排队、
读/写操作数、总线控制 2、EU(执行部件) 功能:指令译码、指令执行
组成部件见下页图
8086CPU的内部组成
执行单元(EU)
总线接口单元(BIU)
1、BIU ①段寄存器
例2-2
• 将5394H与-777FH两数相加,并说明其标志位状态
•
0101 0011 1001 0100
•+
1000 1000 1000 0001
•
1101 1100 0001 0101
• 运算结果:-23EBH
• 标志位:CF=0,DF=0,AF=0
•
ZF=0,SF=1,OF=0
控制标志位的名称和定义如下:
三寄存器结构目的变址寄存器destinationindexsidibpspax累加器accumulatorbx基数寄存器basecx计数寄存器countdx数据寄存器dataahbhchdhalblcldlipflagsdsessscs数据段寄存器datasegment附加段寄存器extrasegment堆栈段寄存器stacksegment代码段寄存器codesegment标志寄存器flags指令指针寄存器instructionpointer变址寄存器段寄存器控制寄存器通用寄存器源变址寄存器sourceindex基址指针寄存器basepointer堆栈指针寄存器stackpointer指针寄存器数据寄存器8086cpu寄存器组1通用寄存器组?常用来存放参与运算的操作数或运算结果?特殊用途见p25表212指针和变址寄存器?可作通用寄存器存放一般操作数或运算结果?作指针和变址寄存器用于存放某段地址偏移量3段寄存器?用于存放逻辑段的段基地址4指令指针和标志位寄存器?ip存放下一条指令在现行代码段中的偏移地址由biu自动修改
8086指令系统
8086指令系统通用寄存器:数据寄存器:累加器AX,基址寄存器BX,计数器CX,数据寄存器DX 变址寄存器:源地址寄存器SI,目的变址寄存器DI指针寄存器:基址指针BP,堆栈指针SP段寄存器:代码段寄存器CS,堆栈段寄存器SS,数据段寄存器DS,附加段寄存器ES标志寄存器:FLAGS,指令指针:IP数据寄存器8086有4个16位数据寄存器:AX,BX,CX,DX;它们都可以分为两个独立的8位寄存器:AH/AL,BH/BL,CH/CL,DH/DL;对其中的某8位操作,并不影响另外对应8 位寄存器的数据.数据寄存器是通用的,用来存放计算结果和操作数, 但每个寄存器又有它们各自专用目的,主要是:AX称为累加器,使用程度最高,用于算术,逻辑运算及与外设传送信息等;BX称为基地址寄存器,常用做存放存储器的地址;CX称为计数器,作为循环和串操作等指今中隐含的计数器;DX称为数据寄存器,常用来存放双字节长数据的高16位,或存放外设端口地址.指针及变址寄存器指针及变址寄存器包括SI,DI,BP,SP四个16位寄存器,常用于存储器寻址时提供地址.SI源变址寄存器,DI 目的变址寄存器,一般与DS联用确定数据段中某一存储单元地址.SP堆栈指针寄存器,指示栈顶的偏移地址;BP基址指针寄存器, 表示堆栈段中的基地址.IP16位指令指针寄存器,指示代码段中指令的偏移地址,它与代码段寄存器CS 联用,以确定下一条指令的物理地址.处理器利用CS:IP取得下一条要执行的指令,然后修改IP的内容,使之指向下一条指令的存储器地址.标志寄存器(FLAGS) 也称为状志标志寄存器PSW0 CF(Carry Flag) 进位标志12 PF(Parity Flag)零标志34 AF(Auxiliary Carry Flag)辅助进位标志56 ZF(Zero Flag)零标志7 SF(Sign Flag)符号标志:运算结果最高有效位的状态就是符号位的状态.8 TF(Trap Flag)陷井标志9 IF(Interrupt-enable Flag)中断允许标志10 DF(Direction Flag)方向标志11 OF(Overflow Flag)溢出标志12131415状态标志:CF,ZF,SF,PF,OF,AF控制标志:DF,IF,TF8086的字长是16位的,但其地址线是32位的.8086处理器将1M存储器空间分成许多逻辑段(Segment),每个段的最大限为16KB. 这样,每个存储单元就可以用"段地址:段内偏移地址"表达其准确的物理位置."段地址:偏移地址"的形式称为逻辑地址 .将逻辑地址中的段地址左移4位(这是对二进制而言,若是十六进制,只要左移一位),加上偏移地址就得到20位物理地址. 例如逻辑地址"1460H:100H"表示物理地址14700H, 同一个物理地址可以有多个逻辑地址形式.8位通用寄存器AH/AL/BH/BL/CH/CL/DH/DL16位的通用寄存器AX/BX/CX/DX.DST 目的操作数SRC 源操作数一. 通用数据传送指令1. 传送指令MOV (move)格式:MOV DST,SRC操作:(DST)←(SRC) 将原操作数(字节或字)传送到目的地址。
8086cmp指令用法
8086cmp指令用法[8086CMP指令用法]在计算机组成原理和汇编语言中,我们经常会遇到8086CMP指令。
8086是Intel 公司在20世纪70年代末开发的一款16位微处理器,它是现代计算机的基石之一。
CMP指令用于比较两个操作数的大小关系,它是比较指令族中最常用的一种。
在本文中,我们将逐步回答有关8086CMP指令的用法,以帮助读者更好地理解和运用它。
第一步:理解8086CMP指令的作用CMP指令的全称是"Compare",它的作用是比较两个操作数的大小关系,并根据比较结果设置标志位。
这些标志位将被后续的条件跳转指令所使用。
通过比较操作数的差异,我们可以确定两个操作数的相对大小关系。
第二步:掌握8086CMP指令的语法8086CPU提供了多种CMP指令的格式,可以用于比较不同类型和大小的操作数。
下面是最常见的两种格式:1. CMP reg, reg/mem这种格式用于比较一个寄存器和另一个寄存器或内存操作数。
其中,reg是一个寄存器,reg/mem可以是寄存器或内存操作数。
例如:CMP AX, BX ; 比较AX和BX的值2. CMP reg, imm这种格式用于比较一个寄存器和一个立即数操作数。
其中,reg是一个寄存器,imm是一个立即数。
例如:CMP AX, 10H ; 比较AX和10H的值第三步:了解8086CMP指令的执行过程当执行CMP指令时,CPU会先将操作数1减去操作数2,然后根据减法的结果设置相应的标志位。
这些标志位是8086CPU用于处理运算结果的一组特殊寄存器。
第四步:熟悉8086CMP指令设置的标志位CMP指令根据减法的结果设置以下标志位:1. CF (Carry Flag): 无论结果是正数还是负数,减法过程中是否发生了进位。
2. ZF (Zero Flag): 比较结果是否为零,如果为零,则设置为1。
3. SF (Sign Flag): 比较结果的最高位是否为1,如果为1,则设置为1。
8086常用指令集
8086指令集寄存器:累加器:AX 变址寄存器:SI 代码段寄存器:CS 指令指针:IP基址寄存器:BX 变址寄存器:DI 数据段寄存器:DS 微处理器状态字:PSW 计数寄存器:CX 堆栈寄存器:SP 附加段寄存器:ES数据寄存器:DX 基址指针:BP 堆栈段寄存器:SS属性操作符:符号及含义:SEG:取出段地址OPR:一个操作数REGn:一个n位寄存器OFFSET:取出偏移地址SRC:源操作数MEM:一个存储单元TYPE:取出其类型DST:目的操作数CNT:计数值LENGTH:取出变量重复次数REG:一个寄存器LABEL:标号或过程名SIZE:取出变量的大小SEG:段地址IDATA:立即数数据寻址方式:立即寻址,寄存器寻址,存储器寻址(5种),隐含寻址一:立即寻址:MOV AX ,12A2H ;二:寄存器寻址:MOV DS,AX ; MOV V AR ,BX ;三:存储器寻址:操作数保存在存储单元中(5种)直接寻址:偏移地址直接给出, 1.MOV AX,V AR; 2. MOV DL,V AR2+5;3. MOV CX,[1200H]4. MOV V AR,2500 ;寄存器间接寻址:有效地址存放在寄存器中,直接寻址:1.MOV AX,[ SI ] ; 2.MOV [BX],DX ;寄存器相对寻址:有效地址为一个基址寄存器或变址寄存器的内容怀一个8位或16位的位移量这和. 1.MOV BX,[ SO+5 ] ; 2.MOV CX,V AR[BX]; 3.MOV AL,V AR[DI-5]基址变址寄存器:有效地址为一个基址寄存器和一个变址寄存器之和,1.MOV DX,[BX][SI]2.MOV AX,[BP][SI]基地变址且相对寻址:基址寄存器内容,一个变址寄存器内容,一个位移量,三者之和。
1.MOV AX,[BX+5][SI];2.MOV V AR[BP][DI],AX;数据传送指令:通用传送类指令:MOV 格式: MOV DST,SRC;获取有效地址指令:LEA 格式:LEA REG16, MEM;获取地址指针指令:LDS,LES 格式:LDS REG16, MEM(取高16位送入DS,低16送入REG16中;) 格式; LES REG16, MEM(高16位送入ES,低16送入REG16中)标志传送指令:LAHF,SAHF 格式:LAHF ;PSW寄存器中低8位传送到寄存器AH中格式:SAHF ; 将寄存器AH中低8位传送到PSW寄存器中的低8位数据交换指令:XCHG 格式:XCHG DST,SRC :两个操作数之间数据的交换字节转换指令:XLAT 格式:XLAT :堆栈操作指令:PUSH,POP,PUSHF,POPF算术运算类指令:加减法指令:加法指令:ADD,ADC : 格式:ADD DST,SRC ;将SRC+DST的结果存入DSTADC DST,SRC;将SRC+DST+CF的结果存入DST 减法指令:SUB,SBB: 格式:SUB DST,SRC;相似上方,取负指令:NEG 格式:NEG DST; 0-DST的结果存在DST.比较指令:CMP 格式:CMP DST,SRC; DST-SRC的结果设置PSW的状态标志位。
8086 cmp原理
8086 cmp原理8086 CPU的CMP指令原理解析什么是CMP指令CMP(Compare Compare Data)指令是8086系列CPU中的一条重要指令。
该指令用于比较两个操作数的大小关系,并根据比较结果对标志寄存器进行设置。
它常用于条件跳转、循环控制和排序等场景中。
CMP指令的语法和用法CMP指令的语法如下:CMP destination, source其中destination是目的操作数,source是源操作数。
两个操作数可以是寄存器、内存单元或立即数。
CMP指令的用法是将destination和source进行比较,并根据比较结果设置标志寄存器。
具体比较方式如下: 1. 如果destination和source相等,则设置零标志位ZF为1,表示相等。
2. 如果destination大于source,则设置进位标志位CF为0,表示无进位,符号标志位SF为0,表示正数。
3. 如果destination小于source,则设置进位标志位CF为1,表示有进位,符号标志位SF为1,表示负数。
CMP指令的原理解析在8086 CPU中,CMP指令的执行过程主要分为以下几个步骤:1.从指令中获取destination和source的操作数。
2.将destination和source进行比较。
3.根据比较结果设置标志寄存器。
具体步骤解析如下:步骤一:获取操作数8086 CPU中的CMP指令支持多种操作数类型,包括寄存器、内存单元和立即数。
在执行CMP指令时,首先需要从指令中获取destination和source的具体操作数。
步骤二:比较操作数根据获取到的两个操作数,CPU会对它们进行比较操作。
比较操作会计算destination减去source的结果,并根据比较结果更新标志寄存器的值。
具体比较方式如前文所述。
步骤三:设置标志寄存器根据比较的结果,CPU会设置标志寄存器的各个标志位。
常用的标志位有以下几个: - 零标志位ZF:用于表示比较结果是否为零。
8086汇编 机器指令
8086汇编机器指令8086汇编是一种低级语言,它基于Intel 8086微处理器的指令集架构。
在计算机科学中,汇编语言是一种与机器语言密切相关的语言,它提供了一种将高级语言编写的程序转换为机器语言的方式。
8086汇编的机器指令是一组独特的二进制代码,它们被计算机硬件直接执行,从而实现各种功能。
下面是8086汇编的一些常见指令的相关参考内容:1. MOV指令(Move):用于将数据从一个位置复制到另一个位置。
例如:```MOV AX, BX ;将BX寄存器中的值复制到AX寄存器```2. ADD指令:用于将两个值相加并将结果存储在目标位置。
例如:```ADD AX, BX ;将AX寄存器和BX寄存器中的值相加,并将结果存储在AX寄存器```3. SUB指令(Subtract):用于将一个值从另一个值中减去并将结果存储在目标位置。
例如:```SUB AX, BX ;将BX寄存器的值从AX寄存器的值中减去,并将结果存储在AX寄存器```4. CMP指令(Compare):用于比较两个值,并根据比较结果设置标志位。
例如:```CMP AX, BX ;比较AX寄存器和BX寄存器的值,根据比较结果设置标志位```5. JMP指令(Jump):用于无条件跳转到程序中的另一个位置。
例如:```JMP label ;跳转到标签为"label"的位置```6. JE指令(Jump if Equal):用于在相等条件下跳转到程序中的另一个位置。
例如:```JE label ;如果上一次比较为真,则跳转到标签为"label"的位置```7. JNE指令(Jump if Not Equal):用于在不相等条件下跳转到程序中的另一个位置。
例如:```JNE label ;如果上一次比较为假,则跳转到标签为"label"的位置```8. LOOP指令:用于循环执行一段代码块。
8086汇编cmp指令
8086汇编cmp指令8086汇编 cmp 指令cmp 是⽐较指令,功能相当于减法指令,只是不保存结果。
cmp 指令执⾏后,将对标志寄存器产⽣影响。
格式:cmp 操作对象1,操作对象2功能:计算操作对象1–操作对象2原理:通过做减法运算影响标志寄存器,标志寄存器的相关位的取值,体现⽐较的结果。
cmp 指令说明⼀、应⽤使⽤其他相关指令通过识别这些被影响的标志寄存器位来得知⽐较结果。
应⽤⽅法:⽤标志寄存器值,确定⽐较结果。
⼆、⽆符号数⽐较与标志位取值思路:通过cmp 指令执⾏后相关标志位的值,可以看出⽐较的结果指令:cmp ax,bx三、有符号数⽐较与标志位取值问题:⽤cmp来进⾏有符号数⽐较时,CPU⽤哪些标志位对⽐较结果进⾏记录仅凭结果正负(SF)⽆法得出结论,需要配合是否溢出(OF)得到结论。
⽰例指令:cmp ah,bh条件转移指令;或者其他影响标志寄存器的指令cmp oper1, oper2jxxx 标号⼀、根据单个标志位转移的指令⼆、根据⽆符号数⽐较结果进⾏转移的指令三、根据有符号数⽐较结果进⾏转移的指令四、转移指令全写j-Jump e-Equal n-Not b-Below a-Above L-less g-Greater s-Sign C-carry p-Parity o-Overflow z-Zero 条件准转移指令使⽤jxxx系列指令和cmp指令配合,构造条件转移指令不必再考虑cmp指令对相关标志位的影响和jxxx指令对相关标志位的检测可以直接考虑cmp和jxxx指令配合使⽤时表现出来的逻辑含义。
jxxx系列指令和cmp指令配合实现⾼级语⾔中if语句的功能例1:如果(ah)=(bh),则(ah)=(ah)+(ah),否则(ah)=(ah)+(bh)例2:如果(ax)=0,则(ax)=(ax)+1。
8086指令系统中的指令英文全称
8086指令系统中的指令英文全称数据寄存器分为:AH&AL=AX(accumulator):累加寄存器,常用于运算;在乘除等指令中指定用来存放操作数,另外,所有的I/O指令都使用这一寄存器与外界设备传送数据.BH&BL=BX(base):基址寄存器,常用于地址索引;CH&CL=CX(count):计数寄存器,常用于计数;常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器.DH&DL=DX(data):数据寄存器,常用于数据传递。
他们的特点是,这4个16位的寄存器可以分为高8位: AH, BH, CH, DH.以及低八位:AL,BL,CL,DL。
这2组8位寄存器可以分别寻址,并单独使用。
另一组是指针寄存器和变址寄存器,包括:SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置;BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置;SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针;DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。
指令指针IP(Instruction Pointer)标志寄存器FR(Flag Register)OF(overflow flag)DF(direction flag)CF(carrier flag)PF(parity flag)AF(auxiliary flag)ZF(zero flag)SF(sign flag)IF(interrupt flag)TF(trap flag)段寄存器(Segment Register)为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器;DS(Data Segment):数据段寄存器;SS(Stack Segment):堆栈段寄存器;ES(Extra Segment):附加段寄存器。
(完整word)8086CPU指令和寄存器英文全称
8086CPU指令和寄存器英文全称。
一、数据传送指令比如,mov(move)、push、pop、pushf(push flags)、popf(pop flags)、xchg(exchange)等都是数据传送指令,这些指令实现寄存器和内存、寄存器和寄存器之间的单个数据传送.二、算术运算指令比如,add、sub(substract)、adc(add with carry)、sbb(substract with borrow)、inc(increase)、dec(decrease)、cmp(compare)、imul(integer multiplication)、idiv(integer divide)、aaa(ASCII add with adjust)等都是算术运算指令,这些指令实现寄存器和内存中的数据运算。
它们的执行结果影响标志寄存器的sf、zf、of、cf、pf、af位。
三、逻辑指令比如,and、or、not、xor(exclusive or)、test、shl(shift logic left)、shr(shift logic right)、sal(shift arithmetic left)、sar(shift arithmetic right)、rol(rotate left)、ror(rotate right)、rcl(rotate left through carry)、rcr(rotate right through carry)等都是逻辑指令。
除了not指令外,它们的执行结果都影响标志寄存器的相关标志位.四、转移指令可以修改IP,或同时修改CS和IP的指令统称为转移指令。
转移指令分为一下几类.(1)无条件转移指令,比如,jmp(jump);(2)条件转移指令,比如,jcxz(jump if CX is zero)、je(jump if equal)、jb(jump if below)、ja(jump if above)、jnb(jump if not below)、jna(jump if not above)等;(3)循环指令,比如,loop;(4)过程,比如,call、ret(return)、retf(return far);(5)中断,比如,int(interrupt)、iret(interrupt return).五、处理机控制指令这些指令对标志寄存器或其他处理机状态进行设置,比如,cld(clear direction)、std(set direction)、cli (clear interrupt)、sti(set interrupt)、nop(no operation)、clc(clear carry)、cmc(carry make change)、stc(set carry)、hlt(halt)、wait、esc(escape)、lock等都是处理机控制指令。
8086汇编指令大全
8086汇编指令大全标志寄存器: 9个有效位,分6个状态寄存器和3个控制寄存器CF 当执行一个加法(减法)使最高位产生进位(借位)时CF=1 否则CF=0PF 指令执行的结果低8位有偶数个一时,CF=1 否则CF=0AF 当执行一个加法(减法)使运算结果低4位向高4位有进位(借位)时AF=1 否则 AF+0ZF 当前运算结果为零,ZF=1 否则ZF=0SF 符号标志位OF 溢出标志位DF 方向标志位IF 中断允许位 IF=1时响应外部中断TF 跟踪标志位操作数:[目的操作数(OPD),源操作数(OPS)] ;立即操作数,寄存器操作数,存储器操作数。
寻址方式:1) 寄存器寻址例: INC AX; MOV AX,BX2) 寄存器间接寻址(寄存器只能是BX,DI,SI,BP);[PA=(BX、DI、SI)+DS》4)或BP+SS》4]3) 寄存器相对寻址4) 基址变址寻址5) 相对基址变址寻址6) 直接寻址7) 立即数寻址i. 立即数寻址立即数寻址不能用在单操作数指令中ii. 在双操作数中,立即数寻址方式不能用于目的操作数字段指令系统:1) 数据传送指令 mov注意:不允许在两个存储单元之间直接传送数据不允许在两个段寄存器之间传送数据不允许用立即数直接为段寄存器赋值不影响标志位不允许寄存器或存储单元到除CS外的段寄存器2) 入栈(出栈)指令PUSH(POP)注意:PUSH操作数不能是“立即数”POP操作数不能是段寄存器CS 不影响标志位先进后出单操作符3) 交换指令XCHG注意:只允许寄存器与存储单元之间的交换不影响标志位4) 换码指令 XLAT5) 地址传送指令LEA(load effective address):偏移地址()6) 数据段指针送寄存器LDS :低地址的字送指定的通用寄存器(SI)、高地址的字送DS7) 附加段指针送寄存器指令LES :与LDS相似,低地址的字送通用寄存器(DI)、高地址送ES上三指令不影响标志位8) 标志寄存器传送指令LAHF :标志寄存器低八位送AHSAHF :AH送标志寄存器低八位PUSHF:标志寄存器压入堆栈POPF :栈顶内容送标志寄存器9) 加法指令 ADD目的操作数只能是寄存器或存储单元对CF,OF,SF,PF,ZF,AF有影响10) 加1指令 INC对OF,SF,PF,ZF,AF有影响11) 带位加法指令 ADC在进行单精度运算时用ADD指令,在高精度低位运算时用ADD、高位用ADCOPD=OPD+OPS+CF12) 减法指令 SUB对CF,OF,SF,PF,ZF,AF有影响13) 带借位减法指令 SBBOPD=OPD—OPS—CF对CF,OF,SF,PF,ZF,AF有影响对CF,OF,SF,PF,ZF,AF有影响14) 减1指令 DEC15) 比较指令 CMP16) 求补指令 NEG17) 无符号乘法指令 MUL字节操作:AX=AL*OPS字操作:DX,AX=AX*OPS18) 有符号乘法指令 IMUL19) 无符号除法指令 DIV字节的操作:AL=AX/(OPS)的商AH=AX/(OPS)的余数字的操作:20) 有符号除法 IDIV21) 字节转换为字指令 CBW把AL中的符号位扩展到AH中,如果AL的最高位为0,则AH=00H,如果最高位为1,则AH=FFH22) 字转换为双字指令 CWD23) 压缩的BCD码调整指令DAA 加法的十进制调整指令DAS 减法的十进制调整指令24) 非压缩的BCD码调整指令AAA 加法的ASCII调整指令AAS 减法的ASCII调整指令AAM 乘法的ASCII调整指令AAD 除法的ASCII调整指令25) 逻辑与运算指令ADDORNOTTEST(OPD和OPS的内容不变)26) 移位指令逻辑左移与算术左移SHL、SAL(低位补0)算术右移 SAR(高位不变、CF为最后移入的值)逻辑右移 SHR(高位补0、CF为最后移入的值)27) 循环移位左移 ROL (CF为最后移入的值)右移 ROR (CF为最后移入的值)带进位循环左移 RCL(CF+OPD 一起左循环)带进位循环右移 RCR(OPD+CF 一起右循环)28) 无条件转移指令下JMPJMP SHORT OPD(IP=IP+8位位移量)JMP NEAR PTR OPD(IP=IP+16位位移量)上二条指令目的地址是IP=OPD+IPJMP WORD PTR OPD(IP=EA)JMP FAR PTR OPD(IP=OPD的段内偏移地址 CS=OPD段地址)JMP DWORD PTR OPD(IP=EA CS=EA+2)29) 条件转移指令JZ(JE)结果为0则转移(ZF=1)JNZ(JNE)结果不为0则转移(ZF=0)JS 结果为负则转移(SF=1)JNS 结果为正则转移(SF=0)JO 溢出则转移(OF=1)JNO 不溢出则转移(OF=0)JP(JPE)奇偶位为1则转移(PF=1)JNP(JPO)奇偶位不为1则转移(PF=0)JC(JNAE,JB)低于且不等于或进位位为1则转移(CF=1)JNC(JNE,JNB)高于或等于或进位位为0则转移(CF=0)30)。
汇编指令的英文全称
汇编指令的英文全称汇编指令的英文全称如果你想写系统软件,两本入门书籍--谭浩强的《C语言程序设计》和王爽的《汇编语言》是必看的。
谭老的C语言已相当成熟,王老师的汇编倒有个小缺陷—指令没有英文全称,或许他认为现在学编程的朋友都不记单词,如同新生代作家看不懂英文原著一般。
不过我觉得记住指令的英文全称,就不容易搞混,印象会更深刻,所以我把王爽书中出现的英文缩写的全称罗列出来,以便入门的朋友更好地记住它们。
8086CPU提供以下几大类指令。
一、数据传送指令比如,mov(move)、push、pop、pushf(push flags)、popf(pop flags)、xchg(exchange)等都是数据传送指令,这些指令实现寄存器和内存、寄存器和寄存器之间的单个数据传送。
二、算术运算指令比如,add、sub(substract)、adc(add with carry)、sbb(substract with borrow)、inc(increase)、dec(decrease)、cmp(compare)、imul(integer multiplication)、idiv(integer divide)、aaa(ASCII add with adjust)等都是算术运算指令,这些指令实现寄存器和内存中的数据运算。
它们的执行结果影响标志寄存器的sf、zf、of、cf、pf、af位。
三、逻辑指令比如,and、or、not、xor(exclusive or)、test、shl(shift logic left)、shr(shift logic right)、sal(shift arithmetic left)、sar(shift arithmetic right)、rol(rotate left)、ror(rotate right)、rcl(rotate left through carry)、rcr(rotate right through carry)等都是逻辑指令。
8086寄存器和7种寻址方式
8086寄存器和7种寻址⽅式1. 8086处理器有以下寄存器:类别位数名称通⽤16AX, BX, CX, DX8AH,AL,BH,BL,CH,CL,DH,DL指针16SP(stack pointer,堆栈指针),BP(base pointer,基址指针)索引(变址)16SI(source index,源索引),DI(destination,⽬的索引)段16CS(code segment,代码段),DS(data segment,数据段),SS(stack segment,堆栈段),ES(extra segment,附加段)指令16IP(instruction pointer,指令指针/指令计数器)标志16FR(flag register,标志寄存器)其中:1). 段寄存器CS,DS,SS,ES分别保存端代码段,数据段,堆栈段,辅助数据段的起始地址,段寄存器只能由其他寄存器载⼊值,不能由主存直接载⼊.2). 基址寄存器BX,SP,BP⽤于保存相对段⾸地址的偏移地址,其中BX的默认段寄存器是DS,⽽SP,BP的默认段寄存器是SS.3). 索引寄存器(⼜叫变址寄存器)SI,DI,既可⽤于存放存储单元在段内的偏移量,⼜可⽤于存放在相对于段内偏移量的偏移量(详见下⽂寻址⽅式).4). 操作数相对于段⾸的偏移地址⼜称有效地址.(参考⾃《x86 PC 汇编语⾔,设计和接⼝》)1). ⽴即数寻址⽅式操作数作为指令的⼀部分,紧跟在操作码之后,该寻址⽅式执⾏得很快.将信息装载到除了段寄存器和标志寄存器以外的寄存器:MOV AX,2550H ;将2550H装⼊AXMOV CX,625;将⼗进制数625装⼊CXMOV BL,40H ;将40H装⼊BLView Code要将信息移到段寄存器,必须现将数据装载到通⽤寄存器,再移到段寄存器:MOV AX,2550HMOV DS,AX ;正确MOV DS,2550H ;错误View Code2). 寄存器寻址⽅式操作数在寄存器中,指令指定寄存器号.16位操作数的寄存器可以是 AX,BX,CX,DX,SI,DI,SP,BP等;8位操作数的寄存器可以是AL,AH,BL,BH,CL,CH,DL,DH等.寄存器寻址⽅式和⽴即数寻址⽅式不涉及内存访问,因⽽可以取得较⾼的运算速度.如:MOV BX,DX ;将DX的内容复制到BXMOV ES,AX ;将AX中的内容复制到ESADD AL,BH ;将BH中的内容加到ALView Code3). 直接寻址⽅式操作数在内存,但操作数的有效地址作为指令的⼀部分,紧跟在操作码之后.默认段寄存器为DS().如:MOV DL,[2400] ;将DS:2400H的内容移到DLMOV [3518],AL ;将AL的内容移到DS:3518HView Code4). 寄存器间接寻址⽅式操作数在内存,但操作数的有效地址由SI,DI,BX,BP指定,其中SI,DI,BX默认的段寄存器是DS,BP默认的段是SS.如:MOV CL,[SI] ;将DS:SI中的内容移到CLMOV [DI],AH ;将AH的内容移到DS:DIView Code5).寄存器相对寻址⽅式操作数的有效地址是⼀个基址或变址寄存器的内容和指令中指定的8位或16位位移量(displacement)之和.如:MOV CX,[BX]+10;[BX]+10也可以写作[BX+10]或10[BX]MOV AL,[BP]+5MOV DX.[SI]+5View Code6). 基址变址寻址⽅式操作数的有效地址是⼀个基址寄存器和⼀个变址寄存器的内容之和,默认段寄存器为基址寄存器的默认段寄存器.如:MOV CL,[BX][DI] ;将DS:BX+DI的内容移到CL7). 相对基址变址寻址⽅式(Relative based indexed addressing)操作数的有效地址是⼀个基址寄存器和⼀个变址寄存器的内容和8位或16位位移量之和,这种寻址⽅式为像数组元素遍历等堆栈处理提供了⽅便.如:MOV CL,[BX][DI]+8;将DS:BX+DI+8的内容移到CL,[BX][DI]+8也可以写作[BX+DI+8]MOV CH,[BX][SI]+20View Code。
8086汇编指令汇总
8086汇编指令汇总一、基本指令集1.MOV:用于将一个值从一个位置复制到另一个位置。
2.ADD:将两个操作数相加,并将结果存储在第一个操作数中。
3.SUB:将第二个操作数从第一个操作数中减去,并将结果存储在第一个操作数中。
4.INC:将指定的寄存器或内存位置的值加一5.DEC:将指定的寄存器或内存位置的值减一6.MUL:将两个操作数相乘,并将结果存储在累积寄存器中。
7.DIV:将累积寄存器的值除以指定的操作数,并将商存储在累积寄存器中,余数存储在另一个寄存器中。
二、数据传送指令1.MOVSB:从指定内存位置复制一个字节到另一个位置。
2.MOVSW:从指定内存位置复制一个字到另一个位置。
3.MOVSBW:从指定内存位置复制一个字节到另一个位置,并将其扩展为字。
4.LODSB:从指定内存位置加载一个字节到累积寄存器中。
5.LODSW:从指定内存位置加载一个字到累积寄存器中。
6.STOSB:将累积寄存器中的值存储到指定内存位置。
7.STOSW:将累积寄存器中的值存储到指定内存位置。
8.XCHG:交换两个操作数的值。
三、算术与逻辑指令1.AND:对两个操作数执行逻辑与操作,并将结果存储在第一个操作数中。
2.OR:对两个操作数执行逻辑或操作,并将结果存储在第一个操作数中。
3.XOR:对两个操作数执行逻辑异或操作,并将结果存储在第一个操作数中。
4.NOT:对指定的操作数执行逻辑非操作。
5.SHR:将指定操作数的位向右移动指定的位数。
6.SHL:将指定操作数的位向左移动指定的位数。
7.CMP:比较两个操作数的值,并设置相应的条件码。
四、控制转移指令五、字符串操作指令1.REP/REPE/REPZ:用于重复执行一些指令,并且在条件满足时继续执行,直到满足特定的条件。
2.MOVSB/MOVSW:从一个内存位置复制一个字节或字到另一个位置。
3.CMPSB/CMPSW:将两个内存位置的值进行比较。
4.SCASB/SCASW:在累积寄存器中查找指定的字节或字,并设置相应的条件码。
8086寄存器及指令英文全称
通用寄存器:AX累加器(Accumulator),BX 基地址寄存器(Base Register),CX 计数寄存器(Count Register) ,DX数据寄存器(Data Register)段寄存器:代码段寄存器CS--code segment , 数据段寄存器DS--data segment , 堆栈段寄存器SS--stack segment ,附加段寄存器ES--extra segment 。
特殊功能寄存器:指令指针寄存器IP--instruction pointer ,堆栈指针SP--stack pointer ,基址指针BP--base pointer ,源变址寄存器SI--source index ,目标变址寄存器DI--destination index ,标志寄存器FR--flag register(或者叫程序状态字PSW--program status word)。
PSW常用的标志有:标志值为1时的标记值为0时的标记OF(overflow flag) OV(overflow) NV(not overflow)ZF(zero flag) ZR(zero) NZ(not zero)PF(parity flag) PE(parity even) PO(parity odd)CF(carry flag) CY(carried) NC(not carried)DF(direction flag) DN(down) UP(up)SF(sign flag) NG(negative) PL(plus)TF(trap flag)IF(interrupt flag)AF(auxiliary flag)一、运算结果标志位1、进位标志CF(Carry Flag)进位标志CF主要用来反映运算是否产生进位或借位。
如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。
使用该标志位的情况有:多字(字节)数的加减运算,无符号数的大小比较运算,移位操作,字(字节)之间移位,专门改变CF值的指令等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
通用寄存器:AX累加器(Accumulator),BX 基地址寄存器(Base Register),CX 计数寄存器(Count Register) ,DX数据寄存器(Data Register)段寄存器:代码段寄存器CS--code segment , 数据段寄存器DS--data segment , 堆栈段寄存器SS--stack segment ,附加段寄存器ES--extra segment 。
特殊功能寄存器:指令指针寄存器IP--instruction pointer ,堆栈指针SP--stack pointer ,基址指针BP--base pointer ,源变址寄存器SI--source index ,目标变址寄存器DI--destination index ,标志寄存器FR--flag register(或者叫程序状态字PSW--program status word)。
PSW常用的标志有:标志值为1时的标记值为0时的标记OF(overflow flag) OV(overflow) NV(not overflow)ZF(zero flag) ZR(zero) NZ(not zero)PF(parity flag) PE(parity even) PO(parity odd)CF(carry flag) CY(carried) NC(not carried)DF(direction flag) DN(down) UP(up)SF(sign flag) NG(negative) PL(plus)TF(trap flag)IF(interrupt flag)AF(auxiliary flag)一、运算结果标志位1、进位标志CF(Carry Flag)进位标志CF主要用来反映运算是否产生进位或借位。
如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。
使用该标志位的情况有:多字(字节)数的加减运算,无符号数的大小比较运算,移位操作,字(字节)之间移位,专门改变CF值的指令等。
2、奇偶标志PF(Parity Flag)奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。
如果“1”的个数为偶数,则PF的值为1,否则其值为0。
利用PF可进行奇偶校验检查,或产生奇偶校验位。
在数据传送过程中,为了提供传送的可靠性,如果采用奇偶校验的方法,就可使用该标志位。
3、辅助进位标志AF(Auxiliary Carry Flag)在发生下列情况时,辅助进位标志AF的值被置为1,否则其值为0:(1)、在字操作时,发生低字节向高字节进位或借位时;(2)、在字节操作时,发生低4位向高4位进位或借位时。
对以上6个运算结果标志位,在一般编程情况下,标志位CF、ZF、SF和OF的使用频率较高,而标志位PF和AF的使用频率较低。
4、零标志ZF(Zero Flag)零标志ZF用来反映运算结果是否为0。
如果运算结果为0,则其值为1,否则其值为0。
在判断运算结果是否为0时,可使用此标志位。
5、符号标志SF(Sign Flag)符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。
在微机系统中,有符号数采用码表示法,所以,SF也就反映运算结果的正负号。
运算结果为正数时,SF的值为0,否则其值为1。
6、溢出标志OF(Overflow Flag)溢出标志OF用于反映有符号数加减运算所得结果是否溢出。
如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否则,OF的值被清为0。
“溢出”和“进位”是两个不同含义的概念,不要混淆。
如果不太清楚的话,请查阅《计算机组成原理》课程中的有关章节。
二、状态控制标志位状态控制标志位是用来控制CPU操作的,它们要通过专门的指令才能使之发生改变。
1、追踪标志TF(Trap Flag)当追踪标志TF被置为1时,CPU进入单步执行方式,即每执行一条指令,产生一个单步中断请求。
这种方式主要用于程序的调试。
指令系统中没有专门的指令来改变标志位TF的值,但程序员可用其它办法来改变其值。
2、中断允许标志IF(Interrupt-enable Flag)中断允许标志IF是用来决定CPU是否响应CPU外部的可屏蔽中断发出的中断请求。
但不管该标志为何值,CPU都必须响应CPU外部的不可屏蔽中断所发出的中断请求,以及CPU内部产生的中断请求。
具体规定如下:(1)、当IF=1时,CPU可以响应CPU外部的可屏蔽中断发出的中断请求;(2)、当IF=0时,CPU不响应CPU外部的可屏蔽中断发出的中断请求。
CPU的指令系统中也有专门的指令来改变标志位IF的值。
3、方向标志DF(Direction Flag)方向标志DF用来决定在串操作指令执行时有关指针寄存器发生调整的方向。
具体规定在第5.2.11节——字符串操作指令——中给出。
在微机的指令系统中,还提供了专门的指令来改变标志位DF的值。
命令类1.通用数据传送指令.MOV----> moveMOVSX---->extended move with sign dataMOVZX---->extended move with zero dataPUSH---->pushPOP---->popPUSHA---->push allPOPA---->pop allPUSHAD---->push all dataPOPAD---->pop all dataBSWAP---->byte swapXCHG---->exchangeCMPXCHG---->compare and changeXADD---->exchange and addXLAT---->translate2.输入输出端口传送指令.IN---->inputOUT---->output3.目的地址传送指令.LEA---->load effective addressLDS---->load DSLES---->load ESLFS---->load FSLGS---->load GSLSS---->load SS4.标志传送指令.LAHF---->load AH from flagSAHF---->save AH to flagPUSHF---->push flagPOPF---->pop flagPUSHD---->push dflagPOPD---->pop dflag二、算术运算指令ADD---->addADC---->add with carryINC---->increase 1AAA---->ascii add with adjustDAA---->decimal add with adjust SUB---->substractSBB---->substract with borrowDEC---->decrease 1NEC---->negativeCMP---->compareAAS---->ascii adjust on substract DAS---->decimal adjust on substract MUL---->multiplicationIMUL---->integer multiplicationAAM---->ascii adjust on multiplication DIV---->divideIDIV---->integer divideAAD---->ascii adjust on divideCBW---->change byte to wordCWD---->change word to double wordCWDE---->change word to double word with sign to EAXCDQ---->change double word to quadrate word三、逻辑运算指令———————————————————————————————————————AND---->andOR---->orXOR---->xorNOT---->notTEST---->testSHL---->shift leftSAL---->arithmatic shift leftSHR---->shift rightSAR---->arithmatic shift rightROL---->rotate leftROR---->rotate rightRCL---->rotate left with carryRCR---->rotate right with carry四、串指令———————————————————————————————————————MOVS---->move stringCMPS---->compare stringSCAS---->scan stringLODS---->load stringSTOS---->store stringREP---->repeatREPE---->repeat when equalREPZ---->repeat when zero flagREPNE---->repeat when not equalREPNZ---->repeat when zero flagREPC---->repeat when carry flagREPNC---->repeat when not carry flag五、程序转移指令———————————————————————————————————————1>无条件转移指令(长转移)JMP---->jumpCALL---->callRET---->returnRETF---->return far2>条件转移指令(短转移,-128到+127的距离内)JAE---->jump when above or equalJNB---->jump when not belowJB---->jump when belowJNAE---->jump when not above or equalJBE---->jump when below or equalJNA---->jump when not aboveJG---->jump when greaterJNLE---->jump when not less or equalJGE---->jump when greater or equalJNL---->jump when not lessJL---->jump when lessJNGE---->jump when not greater or equalJLE---->jump when less or equalJNG---->jump when not greaterJE---->jump when equalJZ---->jump when has zero flagJNE---->jump when not equalJNZ---->jump when not has zero flagJC---->jump when has carry flagJNC---->jump when not has carry flag JNO---->jump when not has overflow flag JNP---->jump when not has parity flag JPO---->jump when parity flag is odd JNS---->jump when not has sign flagJO---->jump when has overflow flagJP---->jump when has parity flagJPE---->jump when parity flag is evenJS---->jump when has sign flag3>循环控制指令(短转移)LOOP---->loopLOOPE---->loop equalLOOPZ---->loop zeroLOOPNE---->loop not equalLOOPNZ---->loop not zeroJCXZ---->jump when CX is zeroJECXZ---->jump when ECX is zero4>中断指令INT---->interruptINTO---->overflow interruptIRET---->interrupt return5>处理器控制指令HLT---->haltWAIT---->waitESC---->escapeLOCK---->lockNOP---->no operationSTC---->set carryCLC---->clear carryCMC---->carry make changeSTD---->set directionCLD---->clear directionSTI---->set interruptCLI---->clear interrupt六、伪指令—————————————————————————————————————DW---->definw wordPROC---->procedureENDP---->end of procedureSEGMENT---->segmentASSUME---->assumeENDS---->end segmentEND---->end。