汇编语言基础--8086汇编指令

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

微处理器指令系统

概述:一台计算机所能识别和执行的全部指令,称为该机器的指令系统,又称指令集。

一般指令分为:“告诉计算机干什么”的指令操作助记符,“指令操作对象”即操作数。寻址方式

概述:指定操作数或操作数存放位置的方法称为寻址方式。

8086的寻址方式有三类:立即寻址、寄存器寻址和存储器寻址;其中存储器寻址又分为直接寻址、寄存器间接寻址、寄存器相对寻址、基址加变址寻址、相对基址加变址寻址五种。

立即寻址:操作数直接写在指令中的寻址方式,因为这种操作数称为立即数,所以这种寻址方式也称为立即数寻址方式。立即数可以使8位;16位;32位;

例如:MOV AX,6789H ADD AX,1234H

寄存器寻址:指令所要的操作数事先已存储在某寄存器中,或把目标操作数存入寄存器中,或者源操作数和目标操作数都是寄存器。

例如:MOV AX,BX MOV AX,6789H(源操作数是立即数寻址,目的操作数是寄存器寻址)

存储器寻址:在存储器中查找操作数。

1·直接寻址方式:指令所要的操作数存放在内存中,在指令中直接给出操作数的段地址和有效地址,从而使8086的BIU部件能够利用地址加法器得到实际物理地址。

例如:MOV AX,DS:[2000H](mov 默认DS为存放数据的段,所以这个指令等价于MOV AX,[2000H])

MOV AX,ES:[2000H]

2·寄存器间接寻址方式:操作数在存储器中,操作数的有效地址用SI,DI,BX,BP 4个集训期之一来指定。若不使用段前缀,则规定若有效地址用SI,DI,BX等之一来指定,则默认的段寄存器是DS,若有效地址用BP来指定,则其默认的段寄存器位SS。

例如:MOV BX,[DI]

3·寄存器相对寻址方式:操作数的有效地址是一个基址寄存器(BX,BP)或变址寄存器(SI、DI)的内容和指令中的8/16位偏移量之和。

例如:MOV BX,[SI+100H]

4·基址加变址寻址方式:操作数有效地址是一个基址寄存器(BX,BP)和一个变址寄存器(SI,DI)的内容之和。(不要混淆基址寄存器和变址寄存器)

例如:MOV BX,[BX,DI]

5·相对基址加变址寻址方式:操作数有效地址是一个基址寄存器(BX、BP)的值、一个变址寄存器(SI、DI)的值和指令中的8/16位偏移量之和。

例如:MOV AX, [BX+DI+1234H]

32位地址的寻址方式

在用16位寄存器来访问存储单元时,只能使用基地址寄存器(BX和BP)和变址寄存器(SI和DI)来作为地址偏移量的一部分,但在32位寄存器寻址时,不存在上述限制,所有32位寄存器(EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP)都可以是地址偏移量的一个组成部分。

8086指令

概述:指令系统确定了CPU所能完成的功能,是用汇编语言进行程序设计的最基本部分。

分类:数据传送指令,标志位操作指令,算术运算指令,逻辑运算指令,移位操作指令,比较运算指令,循环指令,转移指令,条件设置字节指令,字符串操作指令,ASCII-BCD 码运算调整指令,处理器指令。

基本格式:指令助记符[操作数1[,操作数2[,操作数3]]] (指令助记符体现该指令的功能,它对应一条二进制编码的机器指令)。

数据传送指令:

1·MOV:传送指令,这是使用最频繁的指令,它相对于高级语言的赋值语句。

格式:MOV Reg/Mem,Reg/Mem/Imm

(Reg---Register 寄存器,Mem---Memory 存储器,Imm---Immediate 立即数)

使用规定:1·两个操作数的数据类型要相同;2·两个操作数不能同时为段寄存器;3·代码段寄存器CS不能为目的操作数,但可作为源操作数;4·立即数不能直接传给段寄存器;5·立即数不能作为目的操作数;6·指令指针IP,不能作为MOV指令的操作数;7·两个操作数不能同时为存储单元。

2·XCHG:交换指令,是两个寄存器之间,寄存器和内存变量之间进行数据交换的指令,两个操作数的数据类型要相同。

格式:XCHG Reg/Mem,Reg/Mem

3·LEA:取有效地址指令,是把一个内存变量的有效地址送给指定的寄存器。

格式:LEA Reg,Mem

4·LDS/LES/LFS/LGS/LSS:装载段寄存器指令,把内存中地址的“低字”传送给指令中指定的16位寄存器,把随后的“高字”传给相应的寄存器(DS、ES、FS、GS、SS);

格式:LDS/LES/LFS/LGS/LSS Reg,Mem

5·PUSH/POP:堆栈操作指令,堆栈是一个重要的数据结构,具有“先进后出”的特点,通常用来保存程序的返回地址。

PUSH:进栈指令;

格式:PUSH Reg/Mem

POP:出栈指令

格式:POP Reg/Mem

6·标志寄存器传送指令

A·LAHF:标志送AH指令,FLAGS的低8位送AH。

格式:LAHF

B·SAHF:AH送标志寄存器指令,AH值送FLAGS的低8位

格式:SAHF

C·PUSHF/PUSHFD:标志寄存器进栈指令,把16/32位标志寄存器进栈

格式:SAHF

D·POPF/POPFD:标志寄存器出栈指令,把栈顶的16/32位数据出栈给标志寄存器。

7·XLAT:转换指令,把给出的指令中明确给出的内存地址或默认的BX值作为内存字节数组首地址、下标为AL的数组元素的值传送给AL。

这个指令可以给出一个内存地址作为操作数,也可以没有形式上的操作数,但有两个隐含操作数BX和AL。

格式:XLAT Mem或XLAT

8·IN、OUT:I/.O指令,访问io端口的指令。

A·输入指令IN:从端口中读入一个字节或字,并保存在寄存器AL或AX中。

格式:IN AL/AX,Port/DX

B·输出指令OUT:把寄存器AL或AX的内容输出到指定端口。

格式:OUT Port/DX,AL/AX

加法指令

1·ADD:加法指令,把源操作数的值加到目的操作数中。

格式:ADD Reg/Mem,Reg/Mem

受影响的标志位:AF、CF、OF、PF、SF、ZF

2·ADC:带进位的加指令,把源操作数和进位标志位CF的值一起加到目的操作数中。

格式:ADC Reg/Mem,Reg/Mem/Imm

受影响的标志位:AF、CF、OF、PF、SF、ZF

3·INC:加一指令,把源操作数的值加1

格式:INC Reg/Mem

受影响的标志位:AF、OF、PF、SF、ZF,不影响CF

减法指令

1·SUB:减法指令,从目的操作数中减去源操作数

格式:SUB Reg/Mem,Reg/Mem/Imm

受影响标志位:AF、CF、OF、PF、SF、ZF

2·SBB:带借位的减,把源操作数和标志位CF的值从目的操作数中一起减去格式:SBB Reg/Mem,Reg/Mem/Imm

受影响的标志位:AF、CF、OF、PF、SF、ZF

3·DEC:减1指令,把源操作数减去1

格式:DEC Reg/Mem

受影响的标志位:AF、OF、PF、SF、ZF,不影响CF

4·NEG:求补指令,改变操作数的正负号

格式:NEG Reg/Mem

受影响的标志位:AF、CF、OF、PF、SF、ZF

5·CMP:比较指令,用第二个操作数减去第一个操作数,根据差设置有关标志位。

影响ZF标记位,比较的两者相同则ZF为1。

相关文档
最新文档