版权归原作者所有,如有侵权,请联系我们

[科普中国]-机器指令语句

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

机器指令及其格式

机器指令是由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。1