1 指令的组成
操作码+操作数
操作码说明计算机要执行说明操作,移位、传送、跳转、运算等,不可缺少
操作数是指令执行的参与者,即操作的对象
有些指令不需要操作数,有些需要操作数,通常的指令需要1到2个操作数,有的需要3到4个。
每个指令用助记符表示,如MOV,LEA等。对应着一个机器指令的二进制编码。
寻址方式:
指令系统设计到了多种操作数的来源,寻找操作数的过程就是操作数寻址,操作数选择哪一种寻址,直接影响到机器运行的效率。
如何寻址一个操作数对程序设计很重要。
8086机器代码格式:
1-2字节的操作码 ---- 0-1个字节的mod reg r/m(表明采用的寻址方式) ------0/1/2字节的位移量(某些寻址方式对基地址的偏移量) -----0/1/2字节的立即数
运行-输入debug
-a
mov al,05
-u ;反汇编查看代码
-e 地址:偏移
编辑代码中的05,将05修改为99
再次执行-u查看反汇编代码 (注意,-u 100是从100地址出反汇编32个字节)
发现mov al,05已经改变为mov al,99
-------------------------------
mov ax,[BP+0];机器代码是8B 46 00
前一个字节8B是操作码
中间一个字节46(01 000 110 )是“mod reg r/m"字节
-reg =000 表示目的操作数是AX
-mod =01 和r/m =110 表示源操作数为【BP+D8】
最后一个字节就是8位偏移量[D8 ] 00
指令的助记符格式:
操作码 操作数1(目的操作数) ,操作数2(源操作数) ;注释
注意:当用BP时默认的段地址在SS中
【SI】表示把SI作为内存的便宜地址,段地址再DS中进行寻址。
-------立即数寻址方式
指令的操作数放在机器代码中,紧跟在操作码后,操作数作为指令的一部分存在主内存中
操作数叫立即数 IMM
常用来给寄存器赋值
---------寄存器寻址方式
操作数放在CPU的内部寄存器REG中,可以是8位寄存器R8
AH,AL,BH,BL....
16位寄存器
AX,BX,,,,,
4个段寄存器
CS,DS,SS ,ES
如:mov ax,bx
---------存储器存执方式
1 直接寻址方式
2 寄存器间接寻址方式
3 寄存器相对寻址方式
4 基址变址寻址方式
5 相对基址变址寻址方式
麻的,恨死起名字的家伙了。。。不记这玩意
直接寻址:有效地址再指令中直接给出
MOV AX,[2000H] ;假设DS值为3000H,则实际将32000H处的内容赋值给AX
段超越MOV AX,ES:[2000H]
寄存器间接寻址方式:
明天继续,,,妈的,时间不够用啊。。。。
寄存器相对寻址:
MOV AL,1000[bx],相当于BX+1000+DS*2^4 的内容给了AL
相对基址变址寻址方式
有效地址=bx/bp+si/di+8/16位偏移量之和
汇编语言指令格式:
标号:指令助记符 目的操作数 源操作数 ;注释
Inter 8086 指令系统共有117条基本指令,可分为6个功能组
1 数据传送类指令
2 算数运算类指令
3 位操作类指令
4 串操作类指令
5 控制转移类指令
6 处理机类控制指令
掌握8086的寄存器组和存储器组织
掌握8086的寻址方式
掌握DEBUG程序的使用和调试指令和程序段的方法