汇编学习(下)

一、指令及寻址方式

指令:一般来说指令是由两部分组成,即操作码和操作数。
操作码给出该指令应完成何种操作
操作数用来描述该指令的操作对象
在指令中操作码是不可缺少的,但操作数可以没有,也可以有一个操作数或两个操作数

根据操作数的个数,指令格式可分为以下几种:
1.零操作数指令
指令格式中没有操作数或操作数是隐含约定的。
2.一操作数指令
指令格式中有一个操作数,或还有一个隐含的操作数(实际上是双操作数)。
3.二操作数指令
指令中有两个操作数,其中一个为目的操作数,另一个为源操作数。
由此可见,操作数可分为源操作数和目的操作数
源操作数:只能读取的操作数。
目的操作数:即可读取又可写入(存放操作结果)的操作数。
在这里插入图片描述

寻址方式:指令中指明操作数存放位置的表达方式
指令中进行操作数的数据存放位置有三种情况:
1)存放指令中(立即数)
操作数包含在指令中,即被操作数据直接表示在指令的操作数字段中,也就说紧跟在操作码之后。
例如:
MOV AL,10H
这种操作数据称为立即数
2)存于寄存器中(寄存器操作数)
数据存放在CPU的一个寄存器中。
例如:
INC CX
3)存于存储器中(存储器操作数)
数据在内存中或在I/O端口中,存放数据的偏移地址以某种方式表示在指令中。
例如:
MOV AX, [2500H]
其中[2500]为存储器操作数
存储器操作数中操作数字段指示此操作数的偏移地址,而段地址由某个段寄存器来提供。此例中默认为数据段DS

寻址方式可以分为:
立即数寻址方式
寄存器寻址方式
存储器寻址方式:
直接寻址方式
寄存器间接寻址方式
寄存器相对寻址方式
基址加变址寻址方式
相对加基址变址寻址方式

1.立即数寻址
立即数寻址:操作数为立即数,直接存放在指令的操作数字段中
立即数寻址时,只允许源操作数为立即数,目标操作数必须是寄存器或存储器,其作用是给寄存器或存储单元赋值。
在汇编中,立即数不能作为指令中的第一操作数。

2.寄存器寻址
寄存器寻址:操作数在指令所指示的寄存器中
表示格式:直接在指令中写出寄存器名称
例如:
INC BX
MOV AX, CX

3.存储器寻址
存储器寻址:操作数在指令所指示的寄存器中
表示格式:直接在指令中写出寄存器名称
包括如下方式:
直接寻址方式
寄存器间接寻址方式
寄存器相对寻址方式
基址加变址寻址方式
相对基址加变址寻址方式
3.1.直接寻址
直接寻址:操作数存在内存中,操作数的偏移地址直接表示在指令中
表示格式: [偏移地址]
默认操作数存放在内存的数据段中
例如: MOV AL, [1064H]

操作数也允许存放在其他段中(ES, SS)此时应该在指令中指明段超越。
若操作数不在指令默认的段中,而在其它某个段中,则需要在指令中加以表示,这种情况称为段超越。
例如:
直接寻址方式中操作数在附加段中,则应表示为:
MOV AL, ES:[1064H]

3.2寄存器间接寻址方式
操作数存在存储器中,操作数的偏移地址在BX、SI、DI和BP的某个寄存器中。
若以BX、SI、DI作为间接寻址寄存器,则默认操作数存放在数据段中,用DS寄存器中的内容作为地址。
若以BP作为间接寻址寄存器,则默认操作数存放在堆栈段中,用SS寄存器中的内容作为地址。
例如:
MOV AX, [SI]
MOV [BX], AL
如下图所示
在这里插入图片描述
寄存器间接寻址方式也允许段超越。

MOV AX,DS:[BP]
MOV CH,SS:[SI]

3.3.寄存器相对寻址方式
操作数在存储器中,操作数的有效地址是一个基址寄存器(BX、 BP)或变址寄存器(SI、DI)的内容加上指令中给定的8位或16位 位移量之和
如果SI、DI、或BX中的内容作为有效地址的一部分,那么引用的段寄存器是DS;如果BP中的内容作为有效地址的一部分,那么引用的段寄存器是SS
下面指令中,源操作数采用寄存器相对寻址,引用的段寄存器是SS: MOV BX,[BP-4]
下面指令中,目的操作数采用寄存器相对寻址,引用的段寄存器是ES: MOV ES:[BX+5],AL
例如: MOV CL, [BX+1064H]
在这里插入图片描述
3.4.基址加变址寻址方式
在基址加变址寻址方式中,通常把BX和BP看作是基址寄存器,把SI和DI看作变址寄存器,可把两种方式组合起来形成一种新的寻址方式。
基址加变址的寻址方式是把一个基址寄存器BX或BP的内容,加上变址寄存器SI或DI的内容,并以一个段寄存器作为地址基准,作为操作数的地址。
例如:
MOV AH,【BP】【SI】
在这里插入图片描述
3.5.相对基址加变址寻址方式
在相对基址变址寻址方式中,通常把BX和BP看作是基址寄存器,把SI和DI看 作变址寄存器。它是把一个基址寄存器BX或BP的内容,加上变址寄存器SI或DI的内容,再加上指令中给定的8位或16位 位移量,并以一个段寄存器作为地址基准,作为操作数的地址。
当基址寄存器为BX时,段寄存器使用DS。
当基址寄存器为BP时,段寄存器则用SS。
例如: MOV [BX+DI+1234H], AH
在这里插入图片描述

二、常见的汇编指令

汇编指令可以分为以下六类:
数据传送指令
算术运算指令
逻辑运算和移位指令
串操作指令
转移指令
处理器控制指令

(一)数据传送类指令
包括:
通用传送指令;累加器专用传送指令;
地址传送指令;标志传送指令;

1、通用传送指令
1)基本传送指令(MOV)
指令格式: MOV DST, SRC;
源操作数和目的操作数可用前述6种寻址方式的任何一种。
操作:将SRC内容赋给DST。
所有通用传送指令都不影响标志位。

注意:不能用MOV指令实现以下传送
存储器操作数之间不能直接传送
MOV [1000H], [DI] 错
应改为
MOV AX,[DI]
MOV [1000H], AX
立即数不能直接送段寄存器
MOV DS,2000H 错
应改为
MOV AX, 2000H
MOV DS,AX
服寄存器之间不能直接传送
MOV ES, DS ;错
应改为
MOVAX,DS
MOV ES AX
CS只可以作为源操作数
例: MOV CS,AX ;错
MOV AX,CS ;对
源操作数和目的操作数的宽度必须相同
在这里插入图片描述

2)堆栈指令(PUSH、POP)
堆栈(STACK)的概念:数据的存储按后进先出(Last In FirstOut-LIFO)原则组织的一段内存区域。

入栈指令 (PUSH)
格式: PUSH src
操作过程分两步完成:
i. (SP)<–(SP)- 2
ii. ((SP)+1,(SP)) ←(src)
功能:把一个字压入由SP指向的堆栈区。
如: PUSH AX
在这里插入图片描述
出栈指令 (POP)
格式: POP dst
操作:
(dst)←((SP)+1,(SP)
(SP) <-- (SP)+2
功能:把SP所指向的堆栈顶部的一个字送入目的地址,同时进行修改堆栈指针。
如:
POP BX
POP AX

堆栈用途如下图
在这里插入图片描述
在这里插入图片描述
断点信息:程序断点地址、标志寄存器及其它能被子程序使用和改变的寄存器

注意的问题
i.堆栈操作都按字操作;
ii. PUSH, POP指令的操作数可以是CPU内部寄存器或存储单元;
iii. PUSH CS合法,POP CS非法;
iv.执行PUSH指令,(SP)-2 - > (SP),低字节放在低地址,高字节放在高地址;
v.SP总是指向栈顶;
vi.堆栈最大容量即为SP的初值与SS之差。

3)交换指令(XCHG)
格式: XCHG dst, src ; (dst) <→(src)
可以实现:寄存器之间 寄存器和存储器之间
注意:
存储器之间不能直接交换;
段寄存器不能作为操作数;
允许字或字节操作。

2、累加器专用传送指令
1)输入指令(IN)
功能:用于CPU从外设端口接收数据。
具体形式有四种:
IN AL, data8;从8位端口地址输入一个字节
IN AX, data8;从8位端口地址输入一个字
IN AL, DX;从16位端口地址输入一个字节
IN AX,DX;从16位端口地址输入一个字

2)输出指令 (OUT)
功能:用于CPU向外设端口发送数据
四种形式:
OUT data8,AL;向8位地址端口输出一个字节
OUT data8, AX ;向8位地址端口输出一个字
OUT DX, AL;向16位地址端口输出一个字节
OUT DX,AX;向16位地址端口输出一个字

3.目的地址传送指令
8086提供三条:
LEA
LDS
LES

  1. LEA (Load Effective Address)
    格式:LEA reg16 mem
    reg16一16位通用寄存器;mem-存储单元;
    功能:将源操作数的偏移地址传送到目的操作数;
    注意:源操作数必须以寄存器间接寻址、变址寻址、基址加变址寻址等方式表示的存储器操作数;目的操作数为一个16位的通用寄存器。

例:设(DI) =1005H
执行LEA AX,[DI],有(AX) =1005H
例:设(BX) =0400H,(SI) =003CH
LEA BX, [BX+SI+0F62H]
执行指令后:
源操作数地址为: (BX) + (SI) + 0F62H=0400H+003CH+0F62H= 139EH
则(BX) =139EH

  1. LDS(Load pointer using DS)
    格式: LDS reg16,mem
    功能:把源操作数指定的4个相继字节的数据分别送指令指定的寄存器及DS寄存器中。
    (reg16)←( mem)
    (DS)←( (mem) +2)
    例如: LDS SI, [0010H]
    在这里插入图片描述
    在这里插入图片描述
    4、标志传送指令
    8086有四条标志传送操作指令:
    1 ) LAHF (Load AH into flags )
    格式: LAHF
    功能:标志寄存器低八位–> (AH)
    (AH)←(PSW的低字节)
    在这里插入图片描述
    2)SAHF (Store AH into Flags )
    格式: SAHF
    功能: (AH) 送标志寄存器低八位。
    (PSW的低字节)←(AH)

3)PUSHF (Push Flags )
格式: PUSHF;
功能:标志进栈。
(SP)←(SP) -2
( (SP) +1,(SP) )← (PSW)

4)POPF (Pop Flags )
格式: POPF;
功能:标志出栈。
(PSW)←( (SP) +1,(SP) )
(SP)←(SP) +2

(二) 算术运算类指令
包括:
加法指令、减法指令、乘法指令、除法指令
1.加法指令
8086具有5条加法指令:
ADD(Addition)加法指令
ADC(Add with Carry)带进位加法指令
INC(Increment)加1指令
AAA(ASCII adjust for addition)加法ASCII调整指令
DAA(Decimal adjust for addition)加法十进制调整指令

1)无进位加法指令ADD
指令格式: ADD dest,src ;
功能: (dest) < (dest)+(src)
Src:立即数,通用寄存器,存储器
dest:通用寄存器,存储器
例:
ADD CL,10
ADD DX,SI
ADD AX, [2F00H]
ADD 100H[BX], AL
ADD [DI], 30H
特点:
1.可进行8位或16位的无符号数或有符号数加法运算;
2.源操作数和目标操作数不能同时为存储器,不能为段寄存器;
3.指令影响标志位
8位(有符号)数相加,和超出范围(- 128~+127),或16位(有符号)数相加,和超出范围(-32768 ~ +32767),则O=1
8位(无符号)数相加,和超过255,或16位(无符号)数相加,和超过65535,则C=1,
其他标志(S,A,P,Z)由运算结果按定义确定。

2)进位加法指令ADC(Add with carry)
格式: ADC dest, src
功能:(dest) ←(dest) + (src)+C
C:进位标志C的现行值(上条指令C值)
特点:与ADD同。
用途:主要用于多字节运算中。
类型举例:
ADC CX, 300
ADC AL, BL
ADC DX, [SI]
ADC指令主要用于多字节运算。
如:求两个32位数12345678H与0ABCDEFABH之和
MOV AX, 1234H
MOV BX, 5678H
ADD BX, OEFABH
ADC AX, 0ABCDH

3)加1指令INC (Increment by 1)
格式:INC dest
功能: (dest)← (dest) +1
dest:通用寄存器、存储器;
用途:用于在循环程序中修改地址指针和循环次数。
标志位影响情况:影响S, Z, A, P, O;不影响C。
例:
INC DL ; 8位寄存器+1
INC SI ; 16位寄存器+1
INC BYTE PTR [BX][SI] ;存储器+1 (字节操作)
INC
WORD PTR [DI] ;存储器+1 (字操作)
INC BYTE PTR [DI]; 存储器+1 (字节操作)

2.减法指令( Subtraction)
8086有7条减法指令:
SUB(Subtraction) 减法指令
SBB(Subtraction with Borrow)进位减法指令
DEC(Decrement by 1) 减1指令
NEG(Negate) 求补指令
CMP(Compare) 比较指令
AAS(ASCII Adjust for Subtraction) 减法ASCII调整指令
DAS(Decimal Adjust for Subtraction) 减法十进制调整指令

1)减法指令SUB( Subtraction)
格式: SUB dest,src;
功能: ( dest)←(dest) - (src )
src:立即数,通用寄存器,存储器
Dest:通用寄存器,存储器。
例: SUB AL, 37H
SUB BX, DX
该指令影响标志位:A、C、O、P、S、Z标志。

2)带进位减法指令SBB( Subtraction with borrow)
格式: SBB dest,src;
功能: (dest) ←(dest) - (src) -C
src:立即数,通用寄存器,存储器
dest:通用寄存器,存储器
指令影响标志位
例:
SBB BX, 100H
SBB CX, DX
SBB WORD PTR 100H[BP],100

3)减1指令DEC (Decrement by 1 )
格式: DEC dest
功能: (dest)← (dest) -1
dest:通用寄存器、存储器。不能是段寄存器
用途:用于在循环程序中修改地址指针和循环次数。
标志位影响情况:影响S,Z,A,P,O;不影响C。

4)求补指令NEG (Negate)
格式:NEG dest
功能: (dest)←0- (dest)
dest:通用寄存器、存储器
操作:把操作数按位求反后末位+1。
影响标志:A、C、O、P、S、Z。
C:操作数为0时求补,C=0;一般使C=1.
O:对一128或一32768求补,O=1;否则O=0.

5)比较指令CMP(Compare)
格式: CMP dest,src ;
(dest) - (src) 结果不保留,只是用来影响标志位。
影响标志:A、C、O、P、S、Z。
src:立即数,通用寄存器,存储器
dest:通用寄存器,存储器
例: CMP AL,0AH ;寄存器与立即数比较
CMP CX,DI ;寄存器与寄存器比较
CMP AX, [1000H] ;寄存器与存储器比较
CMP [BX+5], SI ;存储器与寄存器比较
用途:
用比较指令来比较两个数之间的关系:两者是否相等,两个数中哪个大。
(1)根据Z标志,判断两者是否相等;
(2)根据C标志,判断两个无符号数的大小;
(3)用S、O标志,判断两个带符号数的大小。

3.乘法指令
1)无符号乘法(MUL)
格式: MUL SRC
操作:
字节操作数: AX←(AL) * (SRC)
字操作数: DX:AX ←(AX) * (SRC)
2)带符号乘法(IMUL)
格式: IMUL SRC
操作:同MUL,但操作数和乘积均带符号;
按有符号数的规则相乘;

4、除法指令
1)无符号除法 (DIV)
格式: DIV SRC
操作:
字节除数: AL←(AX)/(SRC)之商
AH←(AX)/(SRC)之余数
字除数:
AX←(DX:AX)/(SRC)之商
DX←(DX:AX)/(SRC)之余数

2)带符号除法 (IDIV)
格式: IDIV SRC
操作:同DIV指令
商和余数是带符号的:商的符号符合一般代数符号规则,余数的符号与被除数相同。

3)字节扩展指令(CBW )
格式: CBW ; Convert Byte to Word
功能:将AL字节扩展成字,符号位及高字节在AH中;
4)字扩展指令(CWD)
格式:CWD ; Convert Word to Double Word
功能: AX扩展成双字,符号位及高字在DX中;
这两条指令的作用是对被除数AL或AX进行扩展

5.十进制调整指令
共六条
AAA 非压缩BCD码的加法十进制调整
DAA 压缩BCD码的加法十进制调整
AAS 非压缩BCD码的减法十进制调整
DAS 压缩BCD码的减法十进制调整
AAM 乘法的十进制调整
AAD 除法的十进制调整
(详情从略)

(三)位操作类指令
一、逻辑运算指令
AND逻辑“与”指令
TEST测试指令
OR逻辑“或”指令
XOR (eXclusive OR)逻辑“异或”指令
NOT逻辑“非”指令

1)“与”指令AND
格式: AND dest, src ;
功能:(dest) ←(dest) ∧ (src)
src:立即数、通用寄存器、存储器。
dest:通用寄存器、存储器
两操作数不能同为存储器操作数
操作类型举例: AND AL, 0FH
AND CX, DI
AND SI, [2456H]

2)测试指令TEST
格式: TEST dest,src ; (dest) ∧ (src)
src、dest的规则同“AND”
操作:操作数相与,结果不保存,用来改变标志位。
操作类型举例:
TEST BH, 7
TEST SI ,BP
TEST DI, 1030H[BX]

3)“或”指令OR
格式: OR dest, src;
dest:寄存器、存储器。
src:立即数、寄存器、存储器。
不能同时为存储器操作数

4)“异或”指令XOR
格式: XOR dest,src
dest:寄存器、存储器
src:立即数、寄存器、存储器
不相同则为1,相同则为0;
不能同时为存储器操作数

5)“非”指令NOT
格式: NOT dest
操作:按位求反
操作数:寄存器、存储器,不能是立即数。

二、移位指令
共有以下8条
SAL (Shift Arithmetic Left) 算术左移
SAR (Shift arithmetic right) 算术右移
SHL (Shift logical left)逻辑左移
SHR (Shift logical right) 逻辑右移
ROL (Rotate left) 循环左移
ROR (Rotate right) 循环右移
RCL (Rotate left with carry) 带进位循环左移
RCR (Rotate right with carry)带进位循环右移

移位指令的格式
操作码 reg/mem, Count
Count=1或CL,指定移位次数
移1位或移位次数在CL中
SHL AH,1
SAL SI, CL
SAL WORD PTR[BX+5], 1
ROL BH 1
ROL DX,CL
字节或字操作,通用寄存器或存储器操作数

1)逻辑左移/算术左移指令SHL/SAL
这两条指令实现相同的操作
操作示意图如下图; 相当于无符号数X2
在这里插入图片描述

在这里插入图片描述

SHL是逻辑左移,右边的位补零

2)逻辑右移指令SHR
操作示意图如下:
在这里插入图片描述
指令格式举例:
SHR BL, 1
SHR AX,CL
SHR BYTE PTR [DI+BP],1
相当于无符号数除以2
SHR右移的时候,它的最高位用0填补,最低位移入CF

3)算术右移指令SAR
指令操作示意图如下图所示
在这里插入图片描述
举例:
MOV AL, 88H
MOV CL,2
SAR AL, CL ;AL=E2H
SAR右移的时候,最高位不变,最低位移入CF

注意:二进制负数是正数的取反加1

4)不含进位标志循环左移指令ROL
在这里插入图片描述
5)不含C的循环右移指令ROR
在这里插入图片描述
6)含C循环左移指令RCL
操作示意图如下
在这里插入图片描述
指令格式举例:
mov al,11110000b
rcl al,1
执行后al= 11100000b CF= 1
循环左移,进位值(原CF)到低位,高位进CF

7)含C循环右移指令RCR
操作示意图如下
指令格式举例:
mov al, 11110000b
rcr al,1
执行后al=01111000 CF=0
循环右移,进位值(原CF)到高位,低位进CF

(四)串操作类指令
“串”就是内存中一段地址相连的字节或字;
串操作,也叫数据块操作;
可实现存储器数据间的直接传送;
8086有5种基本串操作:
MOVS ( Move string ) 串传送指令
CMPS (Compare string) 串比较指令
SCAS (Scan string ) 串扫描指令
LODS (Load from string ) 取串指令
STOS ( Store in to string)存串指令

1.串传送指令MOVS
串传送有2种格式:
(1) MOVSB
字节传送:把数据段中SI寻址的数据传送到附加段中DI寻址的存储区域中 ; 然后修改SI、DI。
(ES:DI)←(DS:SI);
(SI)←(SI )士1;
(DI)←(DI) 士1;
当方向标志D=0时用“+”,D=1时用“-”
在这里插入图片描述
MOV AX, 1000H
MOV DS, AX ;数据段地址赋值
MOV AX, 1000H
MOV ES, AX ;附加段地址赋值
MOV SI, 0013H ;源数据块首地址
MOV DI, 1003H ;目的数据块首地址
MOV CX, 4 ;数据块长度赋计数器
STD
LP: MOVSB ;完成一个字节数据传送
DEC CX ;计数器减一
JNZ LP ;结果不为0,重复传送
HLT

MOV AX, 1000H
MOV DS, AX ;数据段地址赋值
MOV AX, 2000H
MOV ES,AX ;附加段地址赋值
MOV SI, 0013H ;源数据块首地址
MOV DI, 1003H ;目的数据块首地址
MOV CX, 4 ;数据块长度赋计数器
LP: MOV AX, [SI]
MOV ES: [DI],AX
DEC SI
DEC DI
DEC CX
JNZ LP

(2)MOVSW
操作:字传送;
( ES: DI)←(DS: SI);
(SI)←(SI)土2;
(DI)←(DI)士2
当方向标志D=0时用“+”, D=1时用“-”
可见,该类指令可以实现从存储器到存储器的数据传送;而且传送非常简便。

REP重复串操作执行
过程:
(1)当(CX)不等于0,(CX)←(CX)-1,执行REP后的串指令。
(2)当(CX)= 0,结束REP,执行下一条指令。
在这里插入图片描述
如上例可用REP操作如下
MOV AX, 1000H
MOV DS, AX
MOV AX, 2000H
MOV ES, AX
MOV SI, 0010H
MOV DI, 1000H
MOV CX, 4 ;数据块长度赋计数器
REP MOVSB ;重复完成字节数据传送
HLT

2.从串中取数指令LODS
有2种格式:
(1)LODSB (字节) ;
( AL)←(DS:SI), (SI)←(SI)士1
(2) LODSW (字)
( AX) ← (DS:SI), (SI )← (SD)土2
功能:该指令把由SI指定的数据段中某单元内容赋给AL或AX

3.存入串指令STOS
有2种格式:
(1)STOSB (字节) ;
(ES:DI) ← (AL), (DI) ←(DI)士1
(2) STOSW (字)
(ES:DI) ←(AX), (DD) ←(DD)士2
与REP联用时,可用来建立一串相同的值,串长度由CX内容决定。

4.串比较指令CMPS
2种格式:
(1) CMPSB (字节)
(2) CMPSW (字)
执行操作:
(ES:DI)—(DS:SI), 结果不存,置标志。
字节操作: (SI)←(SI)土1, (DI)←(DI) 士1
字操作: (SI)←(SI)土2,(DI)←(DI)土2

5.串扫描指令SCAS
有2种格式:
(1)SCASB (字节)
( AL)一(ES:DI),(DI)←(DI)士1
(2) SCASW (字)
( AX)- (ES:DI ),(DI)←(DI)士2
两数相减,只影响标志,不影响操作数。

CMPS和SCAS可与前缀REPE / REPZ和REPNE / REPNZ联合工作
①REPE/REPZ
当相等/为零时重复串操作
②REPNE/REPNZ
当不相等/不为零时重复串操作

(五)程序控制类指令
控制传送指令包括四种:
转移指令,循环控制指令,过程调用指令,中断指令。

1)转移指令
转移指令控制程序从一处转换到另一处执行。
在CPU内部,转移是通过将目标地址传送给IP来实现的。
转移指令包括两种:无条件转移指令、条件转移指令
1、无条件转移指令JMP(Jump)
格式: JMP语句标号
JMP LP;

2、条件转移指令
1)根据单个条件标志转移
①Z标志
JZ/JNZ
Jump on Zero; Jump on Zero
②C标志
JC/JNC
Jump if Carry
③P标志
JP ( JPE)/JNP ( JPO)
Jump on Parity; Jump on Even ;Jump on Odd
④S标志
JS(负号跳转)/JNS
⑤O标志
JO(溢出跳转)/JNO
2)根据两个无符号数大小关系转移
JB(低于跳转)、JNAE;JNB、JAE
JBE(不高于跳转)、JNA;JNBE、JA(高于跳转)
JB: Jump on Below;
JAE: Jump: on Above or Equal
3)根据两个带符号数比较结果转移
JL (JNGE) /JNL(JGE) ;小于跳转/ 不小于跳转
JLE (JNG) /JNLE(0)
L- Less; G- Great;E- Equal
注意:所有条件转移指令都是段内(-128~+127)范围内转移。

2)过程(子程序)调用指令
子程序—程序中具有独立功能的部分编写成独立程序模块。
子程序调用:CALL 子过程名
返回指令RET (return)
在子程序的结尾,用来返回主程序

3)循环控制指令
1、无条件循环
LOOP 语句标号
执行操作:
①(CX)←(CX) - 1
②若CX≠0,转向目标地址去执行;否则执行LOOP指令之后的指令。
解释:遇到这条命令,首先执行CX=CX-1;然后判断CX的值,若CX!=0,则转移到Lable处执行程序,否则向下继续执行。
在这里插入图片描述
2、条件循环
(1) LOOPZ/LOOPE 语句标号
执行操作:
①(CX)←(CX) - 1
②若CX≠0且Z=1,转向目标地址去执行;否则执行LOOP指令之后的指令。
LOOPZ/LOOPE Lable
解释:遇到这条命令,首先执行CX=CX-1;然后判断,若CX!=0并且同时ZF=1,则转到Lable处执行程序,否则向下继续执行。当进行循环的时候,如果遇到CX=0或者ZF=0,则终止循环

(2) LOOPNZ/LOOPNE 语句标号
执行操作:
①(CX)←(CX)-1
②若CX≠0且Z=0, 转向目标地址去执行 ; 否则执行LOOP指令之后的指令。
注意:
条件循环只允许段内循环,跳转范围-128~127
LOOPNZ/LOOPNE Lable
解释:遇到这条命令,首先执行CX=CX-1;然后判断,若CX!=0并且同时ZF=0,则转到Lable处执行程序,否则向下继续执行。当进行循环的时候,如果遇到CX=0或者ZF=1,则终止循环。

3)中断指令( interrupt)
1.中断调用: INT n
n–中断号,0~255
2.中断返回: IRET

(六)处理器控制类指令
1、标志处理指令
CLC (Clear carry flag ) 清C标志
STC (Set carry flag ) 置C标志
CMC (Complement carry flag) 对C求反
CLD (Clear direction flag ) 清D标志
STD ( Set direction flag ) 置D标志
CLI (Clear interrupt flag ) 清I标志
STI (Set interrupt enable flag ) 置I标志

2、其他处理机控制指令
NOP (No operation ) 空操作
HLT (Halt ) CPU暂停状态
WAIT CPU等待状态
ESC 交权
LOCK (Lock bus) 总线锁定


  • 10
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值