80x86 寻址方式与指令系统简介
【课前思考】
(1) 什么是指令和指令系统?指令在什么时候由哪部分来执行?
(2) 8086汇编语言指令由几部分组成?各部分的作用是什么?
(3) 8086汇编语言指令可以有几个操作数?指令中指定的操作数可能存放在哪里?
(4) 什么是寻址方式?8086汇编语言提供了几种寻址方式?
(5) 各种寻址方式所确定的有效地址是什么?
(6) 在存储器寻址方式中,为什么有时候要使用段跨越前缀?
(7) 8086机器语言指令由哪几个字节组成?为什么说汇编语言指令与机器指令是一一对应的?
(8) 8086的指令系统按功能可分为几组?
(9) 每条指令的功能、助记符、所支持的寻址方式、对标志位的影响、需要预置的参数以及隐含使用的或限定使用的寄存器等。
【学习目标】
熟练掌握8086各种寻址方式;熟悉8086常用指令的功能
【学习指南】
学习寻址方式时,要注意各种寻址方式所指定的操作数或操作数地址是什么;各种寻址方式形成操作数地址时,段寄存器和基址、变址寄存器的组合;各种寻址方式限定使用的寄存器。
学习指令系统时,要注意每条指令的功能,所支持的寻址方式、对标志位的影响、需要预置的参数以及隐含使用的或限定使用的寄存器等。
【难重点】
重点理解8086常用指令的功能,熟悉8086的各种寻址方式,这是进行汇编语言程序设计的基础。
【知识点】
3.1 寻址方式
3.1.1 与数据有关的寻址方式
3.1.1.1 立即寻址方式
3.1.1.2 寄存器寻址方式
3.1.1.3 直接寻址方式
3.1.1.4 寄存器间接方式
3.1.1.5 寄存器相对寻址方式
3.1.1.6 基址变址寻址方式
3.1.1.7 相对基址变址寻址方式
3.1.2 与转移地址有关的寻址方式
3.1.2.1 段内直接寻址
3.1.2.2 段内间接寻址
3.1.2.3 段间直接寻址
3.1.2.4 段间间接寻址
3.3 指令系统
3.3.1 数据传送指令
3.3.1.1 通用数据传送指令(MOV、PUSH、POP、XCHG)
3.3.1.2 累加器专用传送指令(IN、OUT、XLAT)
3.3.1.3 地址传送指令(LEA、LDS、LES)
3.3.1.4 标志寄存器传送指令(LAHF、SAHF、PUSHF、POPF)
3.3.2 算术指令
3.3.2.1 加法指令(ADD、ADC、INC)
3.3.2.2 减法指令(SUB、SBB、DEC、NEG、CMP)
3.3.2.3 乘法指令(MUL、IMUL)
3.3.2.4 除法指令(DIV、IDIV)
3.3.2.5 符号扩展指令(CBW、CWD)
3.3.2.6十进制调整指令(DAA、DAS、AAA、AAS、AAM、AAD)
3.3.3 逻辑指令
3.3.3.1 逻辑运算指令(AND、OR、NOT、XOR、TEST)
3.3.3.2 移位指令(SHL、SAL、SHR、SAR、ROL、ROR、RCL、RCR)
3.3.4 串处理指令
3.3.4.1 设置方向标志指令(CLD、STD)
3.3.4.2 串处理指令(MOVSB/MOVSW、STOSB/STOSW、LODSB/LODSW、CMPSB/CMPSW、SCASB/SCASW)
3.3.4.3 串重复前缀(REP、REPE/REPZ、REPNE/REPNZ)
3.3.5 控制转移指令
3.3.5.1 无条件转移指令(JMP)
3.3.5.2条件转移指令(JZ/JE、JNZ/JNE、JS、JNS、JO、JNO、JP、JNP、JB、JNB、JBE、JNBE、JL、JNL、JLE、JNLE、JCXZ)
3.3.5.3 循环指令(LOOP、LOOPZ/LOOPE、LOOPNZ、LOOPNE)
3.3.5.4 子程序调用和返回指令(CALL、RET)
3.3.5.5 中断与中断返回指令(INT、INTO、IRET)
3.3.6 处理器控制指令
3.3.6.1 标志位处理指令(CLC、CMC、STC、CLD、STD、CLI、STI)
3.3.6.2 处理机控制指令(NOP、HLT、WAIT、ESC、LOCK)
我们已经知道计算机是通过执行指令序列来解决问题的,因而每种计算机都有一组指令集供给用户使用,这组指令集就称为计算机的指令系统。本章说明8086的指令系统以及在指令中为取得操作数地址所使用的寻址方式(Addressing mode)。 计算机中的指令由操作码字段和操作数字段两部分组成。操作码字段指示计算机所要执行的操作,比如加、减运算;操作数字段指示指令执行过程中所需要的操作数,它既可以是操作数本身,也可以是操作数地址或地址的一部分,还可以是指向操作数地址的指针或其他有关操作数的信息。
操作数字段可以有一个、二个或三个,通常称为一地址、二地址或三地址指令。8086的寻址方式包括与数据有关的寻址方式和与转移地址有关的寻址方式,CPU根据这些寻址方式以不同的方法取得操作数。
转载于:https://blog.51cto.com/godwithme/1906494