机器指令语句
计算机CPU执行某种操作的命令编码
机器指令是计算机CPU执行某种操作的命令编码。指令系统是指某一类型CPU中所有机器指令的集合。8086/8088CPU的指令系统共包含92种基本指令,按照功能可将它们分为6大类:数据传送指令、算术运算指令、逻辑运算和移位指令、串操作指令、控制转移指令、处理器控制指令。
指令及其格式
机器指令是由1,0组成的特定的二进制数序列。
机器指令格式为:操作码字段 地址码字段。其中,操作码字段表示执行操作类型,地址码字段表示操作数的地址或操作数本身。一般的操作数有被操作数,操作数及操作结果三种类型。图1为机器指令的例子。
指令助记符
为了便于书写和阅读,每条指令通常用3个或4个英文缩写字母来表示。这种缩写码叫做指令助记符。图2是典型的指令助记符。
指令符号说明
AH、AL、BH、BL、CH、CL、DH、DL:八位通用寄存器;
AX、BX、CX、DX、SP、BP、DI、SI:十六位通用寄存器;
SP: 堆栈指针;
IP:指令指针;
FLAGS:标志寄存器
DI、SI:目的和源变址寄存器;
CS、DS、SS、ES: 段寄存器;
SEG:段寄存器通用符号;
REG:通用寄存器组;
AC:AX或AL/AH(取决于操作数长度)
SRC:源操作数
DST:目的操作数
MEM:存储器操作数
MEM/REG:存储器或通用寄存器操作数
DATA:立即数,8位或16位
OPRD:操作数
n:8位立即数
nn:16位立即数
nnnn: 32位立即数
数据传送指令
数据传送类指令分为四种:通用数据传送、累加器专用数据传送、地址传送和标志传送。
通用数据传送指令
通用数据传送指令包括最基本的传送指令MOV,堆栈操作指令PUSH和POP,数据交换指令XCHG和查表指令XLAT。
1.基本的传送指令MOV。指令一般形式为:MOV DST,SRC;指令功能: (字节或字);指令执行后,源操作数不变,目标操作数发生变化且与源操作数相同。例如:指令 MOV AL,BL;若该指令执行前,AL=25H,BL=86H,则指令执行后,AL=BL=86H。
2.堆栈操作指令。在8086/8088系统中,无论压入或弹出操作,都是以字为单位。
(1)入栈指令:指令格式:PUSH OPRD;指令功能:先修改SP-2→SP,然后把一个源操作数(1个字)传送到由SP所指向的堆栈的顶部。
(2)出栈指令:指令格式:POP OPRD;指令功能:是先将栈顶的一个字弹出送往目的操作数,再修改SP+2→SP。
3.交换指令。指令格式:XCHG OPRD1,OPRD2;指令功能:把二个字节或字的操作数相互交换。这二个操作数不能是立即数,也不能同时为存储器操作数。
4.查表指令。指令格式:XLAT SRC_Table;字节查表转换指令,根据表中元素的序号查出对应元素的内容,序号从0,1,2……..。预先(1)将表的首地址存入BX寄存器,(2)要查找元素序号存入AL,执行XLAT指令后,将指定序号对应的元素内容存于AL。
I/O数据传送指令
I/O(输入/输出)指令完成累加器AL(AX)与I/O端口间的数据传送功能。此类指令中,一个操作数为AX(16位)或AL(8位),另一个是I/O端口。I/O端口的地址范围总共64K,0000H-FFFFH。
I/O端口地址的表示方式:(1)直接方式:若端口地址≤FFH,端口地址用立即数直接给出;(2)间接方式:若端口地址>FFH,需要将I/O端口地址存入DX中。用DX可寻址100H-0FFFFH的端口。
1、端口输入指令IN
指令一般格式:IN AC,PORT
指令功能:把1个字节或1个字,由输入端口传送给AL或AX。又分以下几种形式:
(1)直接方式:地址≤FFH
IN AL,n
IN AX,n (n为端口地址)
(2)间接方式:地址>FFH
IN AL,DX
IN AX,DX
2、端口输出指令OUT
指令一般格式:OUT PORT,AC
指令功能:把AL(AX)中的1个字节(字),传送到某个输出端口。
(1)直接方式:
OUT n,AL
OUT n,AX (n为端口地址)
(2)间接方式:
OUT DX,AL
OUT DX,AX
地址传送指令
地址传送指令有3条:
①取有效地址指令LEA。指令一般格式:LEA REG,MEM;指令功能:将源操作数的段内偏移地址传送给目的操作数。
②地址指针装入DS指令LDS。指令一般格式: LDS REG,MEM;指令功能:源操作数必须是内存操作数,把源操作数(内存中的双字数据:32位逻辑地址)的高字部分(段基址)传送给DS,低字部分(段内偏移地址)送指令规定的寄存器。
③地址指针装入ES指令LES。指令一般格式:LES REG,MEM;指令功能:把源操作数(内存中的双字数据)的高位字传送给ES(16位段基址),低位字传送给指令规定的16位寄存器中。
标志传送指令
8086/8088有四条标志传送指令。
1.标志装入AH指令。指令格式:LAHF;指令功能:把标志寄存器的低8传送给AH。这样,相应的符号标志SF、零标志ZF、辅助进位标志AF、奇偶标志PF和进位标志CF被传送至AH的对应位。
2、 设置标志指令。指令格式:SAHF;此指令功能与LAHF相反,是把AH内容传给标志寄存器FLAGS的低8位,高8位不受影响。
3、 标志压入堆栈指令。指令格式:PUSHF;PUSHF指令先修改堆栈指针,即SP-2→SP,把整个标志寄存器内容压入堆栈。指令本身的执行不影响标志位。
4、 标志弹出堆栈指令。指令格式:POPF;这条指令把当前堆栈指针所指的一个字,传送给标志寄存器,同时修改堆栈指针,即SP+2→SP。
算术运算指令
8086/8088提供加、减、乘、除四种基本的算术操作。操作数可是带符号数的字或字节,也可是不带符号数的字或字节。若是带符号数,则用补码表示。8086/8088还提供了各种校正操作指令,可以进行BCD码或ASCⅡ码表示的十进制数的算术运算。
二进制加减法指令
(1)不带进位的加减法指令ADD和SUB。指令用于无符号或带符号数的字节或字的加减运算。指令格式及功能:
ADD 目标, 源;目标+ 源→目标
SUB 目标, 源;目标-源→目标
(2)带进(借)位的加减法指令ADC及SBB。此类指令通常用来实现多字节、多字的加/减运算。除了在加法运算时须在最低位加上进位位CF值,或在减法运算时在最低位减去借位CF值外,其它与ADD,SUB指令相同。指令格式及功能:
ADC 目标, 源;目标+源+CF→ 目标
SBB 目标, 源;目标-源-CF→目标
(3) 加法和减法的ASCII码调整指令。对于加法调整,若为非压缩BCD码,使用指令AAA;若为压缩BCD码,使用指令DAA。对于减法调整,若为非压缩BCD码,使用指令AAS;若为压缩BCD码,使用指令DAS。
(4)加1/减1指令INC/DEC。指令格式及功能:
INC 目标 ;目标+1→目标
DEC 目标;目标-1→目标
指令字节较短,运行速度快,主要用于在循环程序中修改地址指针或循环次数。INC及DEC指令运算结果不影响CF标志,对其他标志位的影响与加减法指令ADD、SUB相同。
(5)求补及比较指令NEG、CMP。求补NEG及比较CMP指令都属于特殊的二进制减法运算。
指令格式及功能:NEG 目标 ;0-目标→目标
CMP 目标,源;目标-源→状态标志
二进制乘除法指令
(1)无符号数乘法指令:指令格式及功能:MUL SRC ;
(2)带符号数乘法指令:指令格式及功能:IMUL SRC ;
(3) 无符号数除法指令:指令格式及功能:DIV SRC ;
(4)带符号数除法指令:指令格式及功能:IDIV SRC ;
(5)转换指令(符号扩展):CWB: 将AL的符号位扩展到AH中;CWD:将AX的符号位扩展到DX中;
逻辑与移位
为了处理字节或字中各位信息,8086/8088提供了三种位处理指令:逻辑运算指令、移位类指令和循环移位类指令。
逻辑运算指令包括逻辑与、逻辑或、逻辑非、逻辑异或和逻辑测试。所有的指令都对其操作数按每一位进行逻辑操作;操作数可以是字节或字。
①逻辑非指令NOT: 逻辑非指令主要用来使某数变反。指令格式及功能:NOT 目标;目标→目标;逻辑非指令不影响状态标志。
②逻辑与指令AND:指令格式及功能:AND 目标,源;目标 ∧源→目标和状态标志;指令对状态标志的影响:执行后将使CF、OF标志复位;按结果影响PF、ZF、SF标志;AF标志不定。
③逻辑或指令OR :指令格式及功能:OR 目标,源;目标 ∨源→目标和状态标志;或指令对状态标志的影响与AND 指令相似。或操作常用来使目标操作数某位置位。
④逻辑异或指令XOR :此类指令对状态标志的影响也与AND指令相似。XOR指令可使目标操作数某些位取反。指令格式:XOR 目标,源。
⑤逻辑测试指令TEST :指令格式及功能:TEST 目标,源;目标 ∧源→目标和状态标志。指令的功能是将两个操作数按位相与,但结果不送回目标,只影响状态标志,影响情况同AND指令。TEST指令常用来检测操作数的某位是1还是0。
参考资料
最新修订时间:2024-09-26 08:41
目录
概述
指令及其格式
指令助记符
指令符号说明
参考资料