133条指令有哪些?
8086指令包含133条基本指令, 一般分为五类来介绍
传送指令,算术运算指令,逻辑运算和移位指令,串操作指令,控制转移指令
一、数据传送类指令
数据传送是计算机中最基本、最重要的一种操作,传送指令也是最常使用的一类指令
传送指令把数据从一个位置传送到另一个位置
除标志寄存器传送指令外,均不影响标志位
重点掌握
MOV XCHG PUSH POP XLAT LEA
1、通用数据传送指令
提供方便灵活的通用传送操作
有3条指令
MOV
XCHG
PUSH POP
① 基本传送指令MOV(move)
mov cl,4 ;cl←4,字节传送
mov DX,0ffh ;dx←00ffh,字传送
mov si,200h ;si←0200h,字传送
mov bvar,0ah ;字节传送
;假设bvar是一个字节变量,定义如下:bvar db 0
mov wvar,0bh ;字传送
;假设wvar是一个字变量,定义如下:wvar dw 0
mov al,[bx] ;al←ds:[bx]
mov dx,[bp] ;dx←ss:[bp+0]
mov dx,[bp+4] ;dx←ss:[bp+4]
mov es,[si] ;es←ds:[si]
2,非法指令的主要现象:
两个操作数的类型不一致
无法确定是字节量还是字量操作
两个操作数都是存储器
段寄存器的操作有一些限制
例子:
1、当无法通过任一个操作数确定是操作类型时,需要利用汇编语言的操作符显式指明
MOV [BX+SI], 255 ;非法指令,修正:
;mov byte ptr [BX+si],255
;byte ptr 说明是字节操作
;mov word ptr [bx+si],255
;word ptr 说明是字操作
2,8088指令系统除串操作指令外,不允许两个操作数都是存储单元(存储器操作数)
MOV buf2, buf1 如 MOV [BX],[SI]
3,MOV DS, ES ;非法指令,修正:
;mov ax,es
;mov ds,ax
MOV DS, 100H ;非法指令,修正:
;mov AX,100h
;mov ds,ax
MOV CS, [SI] ;非法指令
;指令存在,但不能执行
② 交换指令XCHG(exchange)
XCHG reg,reg/mem
;reg ? reg/mem
寄存器与寄存器之间对换数据
寄存器与存储器之间对换数据
不能在存储器与存储器之间对换数据
例子:
mov ax,1199h ;ax=1199h
xchg ah,al ;ax=9911h
;等同于 xchg al,ah
mov wvar,5566h ;wvar是一个字量变量
xchg ax,wvar ;ax=5566h,wvar=9911h
;等同于 xchg wvar,ax
注意:不能在两个内存单元之间交换
如:XCHG [BX],[SI] 错误!
段寄存器中CS、IP不能做操作数
③ 堆栈操作指令
1.堆栈是一个“后进先出LIFO”(或说“先进后出FILO”)的主存区域,位于堆栈段中;SS段寄存器记录其段地址
堆栈只有一个出口,即当前栈顶;用堆栈指针寄存器SP指定
2,堆栈只有两种基本操作:进栈和出栈,对应两条指令PUSH和POP
堆栈由栈底向低地址方向生成
push:进栈指令先使堆栈指针SP减2,然后把一个字操作数存入堆栈顶部
如:push ax
push [2000h]
出栈指令POP:出栈指令把栈顶的一个字传送至指定的目的操作数,然后堆栈指针SP加2
如:pop ax
pop wvar
3,堆栈操作的特点
堆栈操作的单位是字,进栈和出栈只对字进行
数据从栈顶压入和弹出时,都是低地址送低字节,高地址送高字节
堆栈操作遵循先进后出原则,但可用存储器寻址方式随机存取堆栈中的数据
堆栈段是程序中不可或缺的一个内存区,常用来
临时存放数据
传递参数
保存和恢复寄存器
2、累加器专用传送指令
① 输入输出指令(IN/OUT指令)
格式:IN AL,port;port为直接端口地址
IN AL,DX ;DX的内容为端口地址(间接方式)
IN AX,port;
IN AX, DX
OUT port, AL
OUT DX, AL
OUT port, AX
OUT DX, AX
注意:①只能用累加寄存器不能用其它寄存器
②当端口地址在00H—FFH之间可以用直接地址
当端口地址大于FFH时必须用DX间址形式
例:IN AL,40H; (40H) AL
IN AX,80H; (80H)、(81H) AX
MOV DX, 0382H
IN AL,DX ; (0382H) AL
OUT 62H, AL
MOV DX, 0380H
OUT DX,AX
② 换码指令XLAT(查表指令)
将BX指定的缓冲区中、AL指定的位移处的一个字节数据取出赋给AL
XLAT ;al←ds:[bx+al]
换码指令执行前:
在主存建立一个字节量表格,内含要转换成的目的代码
表格首地址存放于BX,AL存放相对表格首地址的位移量
换码指令执行后:
将AL寄存器的内容转换为目标代码
③址传送指令 三条LEA 、LDS、LES
将存储器操作数的有效地址送至指定的16位通用寄存器
LEA r16, mem
;r16←mem的有效地址EA
例子: 有效地址的获取
LEA AX, [2375H] ; AX=2375H
LEA SP, [BX+SI] ; SP=(BX)+(SI)
区别: LEA SI, BUFF; SI=BUFF
MOV SI,BUFF; SI=(BUFF)
LDS r16, mem
;ds、r16←mem中的双字,
执行后,会更新r16,ds的值。前面两个字节送到r16,后面两个字节送到ds
LES r16, mem
;es、r16←mem中的双字,执行后,会更新r16,ds的值,效果与lds类似
3、标志传送指令
① 读标志指令
LAHF ;标志寄存器低字传送到AH
② 设标志指令
SAHF ; AH的内容送标志寄存器低8位
③ 标志寄存器堆栈指令
PUSHF ;标志寄存器内容(16位)压栈
④ 标志寄存器出栈指令
POPF ;弹出标志寄存器的内容。
二、 算术运算类指令
概述:算术运算类指令用来执行二进制的算术运算:加减乘除以及BCD码调整。
这类指令会根据运算结果影响状态标志,有时要利用某些标志才能得到正确的结果;使用他们时请留心有关状态标志。
重点掌握
加法指令:ADD、ADC、INC
减法指令:SUB 、SBB、DEC、CMP、NEG
1、 加法和减法指令
加法指令:ADD, ADC和INC
减法指令:SUB, SBB, DEC, NE
Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有