指令的组成
- 指令由操作码和操作数两部分组成
- 操作码说明计算机要执行哪种操作,如传送、运算、移位、跳转等操作,它是指令中不可缺少的组成部分
- 操作数是指令执行的参与者,即各种操作的对象
- 有些指令不需要操作数,通常的指令都有一个或两个操作数,也有个别指令有3个甚至4个操作数
指令的操作码和操作数
- 每种指令的操作码:
- 用一个唯一的助记符表示(指令功能的英文缩写)
- 对应着机器指令的一个二进制编码
- 指令中的操作数:
- 可以是一个具体的数值
- 可以是存放数据的寄存器
- 或指明数据在主存位置的存储器地址
指令的助记符格式:
标号:操作码 dest,src ;注释
指令系统
1、数据传送指令
- MOV:传送
- PUSH,POP:堆栈操作
- XCHG:交换
- IN,OUT:输入输出
- XLAT:转换
- LEA,LDS,LES:地址传送
- PUSHF,POPF,LAHF,SAHF:标志传送
2、算术类指令
- ADD,ADC,AAA,DAA:加法
- INC:加1
- SUB,SBB,AAS,DAS:减法
- DEC:减一
- CMP:比较(减法比较,不会修改被减数,但是会修改符号位等)
- NEG:求补
- MUL,IMUL,AAM:乘法
- DIV,IDIV,AAD:除法
- CBW,CWD:符号扩展
3、逻辑运算指令
- NOT:求反
- AND:逻辑乘
- OR:逻辑加
- XOR:亦或
- TEST:测试位
- SHL,SHR,SAL
4、字符串操作
- MOVS,MOVSB/MOVSW ;传送串
- CMPS,CMPSB/CMPSW ;串比较
- SCAS,SCASB/SCASW ;串扫描
- LODS,LODSB/LODSW ;取字符串
- STOS,STOSB/STOSW ;存字符串 (REP,REPZ,REPNZ: 重复前缀).
5、控制转移指令
- CALL:子程序调用
- RET:子程序返回
- JMP:无条件转移
- JZ,JNZ,JC,JNC,JO,JNO,JS,JNS,JP,JNP,JA,JAE,JB,JBE,JG,JGE,JL,JLE:条件转移
- LOOP:循环
- LOOPNE,LOOPE:条件循环
- JCXZ:寄存器CX=0转移
- INT,INTO:中断
- IRET:中断返回
- INVOKE
6、处理机控制指令
- CLC: 清除CF标志
- CMC:进位位CF求反
- STC:置CF标志
- STD:置DF标志
- CLD:清除DF标志
- HLT:处理机暂停
- WAIT:等待状态
- ESC:将数据传送给协处理器(提供到地址/数据线上)
- LOCK:保证总线的控制
- NOP:无操作
补充资料:
;mov
mov DST,SRC ;将SRC的内容传送到DST中。
;DST可用:REG MEM SREG
;DST不可用:IP,IO,IMM
- REG
- IMM,REG,MEM,SREG
- MEM
- IMM,REG,SREG
- SREG
- REG,RAM
;push 和 pop
;设置ss段寄存器地址和sp堆栈指针寄存器地址,为10010H
mov AX,1000H
mov ss,ax
mov sp,0010H
;执行压栈操作
mov ax,ff11H
push ax ;执行sp=sp-2,再把ax放入放入sp(1000EH)中,其中ff放在1000FH中,11放在1000EH中,为“高高低低”原则。
;执行出栈操作
pop bx ;先把SS:SP中的数据送入bx中,再将SP=SP+2。此时SS:SP中数不变,但是已经不在栈中。
;XCHG
XCHG CH,AL ;寄存器之间相互交换
;REG,REG/MEM
;MEM,REG
IN 和 OUT
端口读写指令
- 端口是主机与外设交换数据使用的,分为数据端口,状态端口和控制端口。
- PC给每个端口分配了地址,呈线性排列,形成一个独立于内存空间的IO地址空间,范围为0000H-FFFFH
IN AL,21H ;表示从21H端口读取一字节数据到AL
IN AH,21H ;表示从21H读取一字节数据到AL,从22H读取1字节到AH
;立即数要小于256
MOV DX,379H
IN AL,DX ;从端口379H读取1字节到AL
OUT 21H,AL ;将AL的值写入21H端口
OUT 21H,AX ;将AX的值写入端口地址21H开始的连续两个字节。
XLAT:转换编码
- 将地址DS:[BX数据表偏移地址+AL]的一字节内容传送到AL.
MOV BX,TABLE
MOV AL,4
XLAT
LEA:取有效地址
- 取有效地址也就是取偏移地址
- LEA 指令要求原操作数必须是存储单元,而且目的操作数必须是一个除段寄存器之外的16位或32位寄存器。
- 因该寄存器常用来作为地址指针,故在此最好选用四个间址寄存器BX,BP,SI,DI之一。
;以下两句话等价,其中第一个执行较快
MOV BX,OFFSET TABLE ;立即数寻址
LEA BX,TABLE
LDS:
ADD:
mov ax,7ff0h
add al,10h ;ax=7f00h,cf=1,of=0,pf=1,sf=0,zf=1,af=0
add ah,1 ;ax=8000h,cf=0;of=1,pf=0,sf=1,zf=0,af=1
add ax,2 ;ax=8002h,cf=0,of=0,pf=0,sf=1,zf=0,af=0
XCHG
实现dd变量v1,v2交换.
mov eax,v1
xchg eax,v2
mov v1,eax