微机原理及应用 1
8086指令系统传送类指令数据操作类指令串操作指令控制类指令本章要求微机原理及应用 2
控制类指令此类指令主要由以下几部分组成:
一,子程序调用和返回指令二,无条件转移和条件转移指令三,循环控制指令四,中断控制指令五,处理器控制指令返回微机原理及应用 3
子程序调用和返回指令为了方便模块化程序设计,往往把程序中某些具有独立功能的部分编写成独立的程序模块,称之为程序。
子程序调用和返回指令都不影响标志位。
一,子程序调用指令,CALL
二,子程序返回指令,RET
返回指令说明:
微机原理及应用 4调用指令的执行过程
将调用指令的下一条指令的地址(断点)压入堆栈
获取子过程的入口地址(子过程第 1条指令的偏移地址)
(执行子过程,含相应参数的保存及恢复)
将断点偏移地址由堆栈弹出,返回原程序返回微机原理及应用 5
子程序调用指令
该类指令提供了子程序内直接调用指令、段内间接调用指令、段间直接调用指令和段间间接调用指令。
一,段内直接调用二,段内间接调用三,段间直接调用四,段间间接调用指令说明 …
返回微机原理及应用 6
段内直接调用
指令格式,CALL DST ;
(SP) (SP)-2,((SP)-2,(SP)-1) (IP)
(IP) (IP)+16位偏移量例如:
CALL 1000H ; 段内直接调用,调用地址在指令中给出返回
子过程与原调用程序在同一代码段,在调用之前只需保护断点的偏移地址微机原理及应用 7
段内间接调用
指令格式,CALL DST ;
(SP) (SP)-2,((SP)-2,(SP)-1) (IP)
(IP) (EA)
例如:
CALL AX ; 段内间接调用,调用地址由 AX给出。 (IP) (AX)
返回
子过程与原调用程序在同一代码段,在调用之前只需保护断点的偏移地址微机原理及应用 8
段间直接调用
指令格式,CALL DST ;
(SP) (SP)-2,((SP)-2,(SP)-1) (CS)段地址
(SP) (SP)-2,((SP)-2,(SP)-1) (IP)偏移地址例如:
CALL 2500:3600 ; 段间直接调用,调用段地址和偏移量在指令中给出返回
子过程与原调用程序不在同一代码段,在调用之前需保护断点的段基地址和偏移地址。先将断点的 CS
压栈,再压入 IP
微机原理及应用 9
段间间接调用
指令格式,CALL DST ;
(SP) (SP)-2,((SP)-2,(SP)-1) (CS)
(SP) (SP)-2,((SP)-2,(SP)-1) (IP)
(IP) (EA) 寻址方式确定的有效地址
(CS) (EA+2)
例如:
CALL DWORD PTR[DI] ; 段间间接调用,指令给出调用段地址和偏移量的存放地址微机原理及应用 10示例
设 (DS)=6000H,(SI)=0560H,
指令
CALL DWORD PTR[DI]
的操作示意图
XXH
XXH
XXH
XXH
IP
CS
CALL




代码段数据段
60560H
返回微机原理及应用 11子程序调用指令说明
调用指令在执行时,会把下一条指令的地址推入堆栈,这个地址叫返回地址。在段内调用的情况下,只把返回地址的偏移量推入堆栈,在段间调用的情况下,把返回地址的段地址和偏移量都推入堆栈。
返回断点入口地址微机原理及应用 12
子程序返回指令
该指令有以下两条:
一,子程序返回指令,RET
二,带参数的返回指令,RET n
所有返回指令都不影响标志位返回微机原理及应用 13
子程序返回指令,RET
指令格式,RET ; (IP) ((SP)+1,(SP))
(SP) (SP)+2
指令说明,返回指令 RET作为子程序的最后一条指令用来返回高一层的程序。执行时,会从堆栈顶部弹出返回地址出栈送 IP寄存器 (段内或段间 )和 CS寄存器 (段间 )。 8086指令系统中,
段内返回指令和段间返回指令形式是一样的。
不影响标志位。
返回微机原理及应用 14
带参数的返回指令,RET n
指令格式,RET EXP ;
(IP) ((SP)+1,(SP)) (SP) (SP)+2 (SP) (SP)+D16
指令说明,EXP是一个表达式,根据它的值计算出常数为指令中的位移量 n。 n可以表示为 0~FFFFH范围中的任何一个偶数。
应用范围,主程序为某个子程序提供一定的参数或参数地址,在进入子程序之前,主程序将这些参数或参数的地址压入堆栈中,通过堆栈供子程序调用,子程序使用后,这些参数已无使用价值,堆栈中不需要保存这些参数,因而在返回指令 RET中提供参数 n在返回同时堆栈指针自动增加几个字节,以去掉堆栈中的几个字节。
返回微机原理及应用 15
无条件转移和条件转移指令一,无条件转移指令无条件转移到目标地址,执行新的指令二,条件转移 指令在具备一定条件的情况下转移到目标地址返回通过修改指令的 偏移地址 或 段地址及偏移地址 实现程序的转移微机原理及应用 16
无条件转移指令,JMP
指令功能:
无条件转移指令可以转移到内存中存放的任何程序段。
指令必须指定转移的目标地址(或称转移地址)。无条件转移指令 不影响标志位 。
指令分类:
段内转移和段间转移。段内转移只须改变 IP寄存器的内容,用新的转移目标地址代替原有的 IP的值就可以。
段间则转到另一段去执行程序,因此,不仅要修改 IP
寄存器的内容,而且还要修改 CS寄存器的内容。
指令格式 …
返回微机原理及应用 17
无条件转移指令格式
指令格式,JMP LABEL
(1) 段内直接短转移,格式,JMP SHORT OPR ;
(IP) (IP)+8位移量 ; 8位移量是一个带符号数,转移范围在 –128--+127
例如,JMP SHORT 10H ; 转移地址偏移量在指令中给出
(2)段内直接近转移,格式,JMP NEAR PTR OPR
(IP) (IP)+16位移量 ;16位移量是一个带符号数,转移范围在段内任意位置例如,JMP 1000H ;段内直接转移,转移地址偏移量在指令中给出 返回下一页微机原理及应用 18无条件转移指令格式
(3) 段内间接转移,格式,JMP WORD PTR OPR ;
(IP) (EA); EA值由 OPR的寻址方式确定。
它可以使用除立即数以外的任一种寻址方式。
例如,JMP CX ; 段内间接转移,转移地址偏移量由 CX给出
(4) 段间直接 (远 )转移,格式,JMP FAR PTR OPR ;
(IP) OPR的段内偏移地址 ; (CS) OPR所在段的段地址例如,JMP 2000:0100H ; 段间直接转移,转移段地址和偏移量在指令中给出返回下一页微机原理及应用 19
无条件转移指令格式
(5) 段间间接转移:
格式,JMP DWORD PTR OPR ;
(IP) (EA) (CS) (EA+2)
EA值由 OPR的寻址方式确定。它可以使用除立即数以外的任一种寻址方式。
例如,JMP DWORD PTR[SI]
段间间接转移,转移地址在 SI,SI+1,SI+2,
SI+3所指的内存单元中,前两个字节为偏移量,后两个字节为段地址。
P91(参看例题)
返回微机原理及应用 20条件转移指令
条件转移指令是以某一个标志位的值或者某几个标志位的值作为判断是否进行转移的依据,如果满足要求则转移,否则执行后续指令。
条件转移指令可以分为以下几大类:
一,根据单个条件标志的设置情况转移二,比较两个无符号数三,比较两个带符号数四,CX寄存器值判断指令说明 …
返回微机原理及应用 21单个条件标志转移指令
指令格式:
JZ/JE OPR ; 结果为 0或相等,则转移 ZF=1
JNZ/JNE OPR ; 结果不为 0或不相等,则转移 ZF=0
JS OPR ; 结果为负,则转移 SF=1
JNS OPR ; 结果为正,则转移 SF=0
JO OPR; 溢出,则转移 OF=1
JNO OPR ; 不溢出,则转移 OF=0
返回下一页微机原理及应用 22
单个条件标志转移指令
JP/JPE OPR ; 奇偶位为 1,则转移 PF=1
JNP/JPO OPR ; 奇偶位为 0,则转移 PF=0
JB/JNAE/JC OPR ; 低于 (不高于也不等于 )或进位为 1,则转移 CF=1
JNB/JAE/JNC OPR ; 不低于 (高于或等于 )或进位为 0,则转移 CF=0
返回上一页微机原理及应用 23
比较两个无符号数
指令格式:
JB/JNAE/JC OPR ; < 低于,不高于也不等于,或进位为 1,则转移 CF=1
JNB/JAE/JNC OPR ; > =不低于,高于或等于或进位为
0,则转移 CF=0
JBE/JNA OPR ; <= 低于或等于,不高于,则转移
CF=1或 ZF=1
JNBE/JA OPR ; > 不低于也不等于,高于,则转移
CF=0且 ZF=0
返回微机原理及应用 24比较两个带符号数
指令格式:
JL/JNGE OPR ; <小于,不大于也不等于,则转移
SF⊕ OF=1且 ZF=0
JNL/JGE OPR ; >=不小于,大于或等于,则转移
SF⊕ OF=0或 ZF=1
JLE/JNG OPR ; <=小于或等于,不大于,则转移
(SF⊕ OF)或 ZF=1
JNLE/JG OPR ; >不小于也不等于,大于,则转移
(SF⊕ OF)且 ZF=0
返回微机原理及应用 25
CX寄存器值判断
指令格式:
JCXZ OPR ; 根据 CX内容修改情况产生不同的分支。 CX值为 0,则转移返回微机原理及应用 26条件转移指令说明
指令说明:
( 1)所有条件转移指令都是相对转移形式,
-128--+127范围 。
( 2)比较两个数的大小后转移,要看是有符号数还是无符号数。无符号数用,高于,和
,低于,来判断,有符号数用,大于,和,小于,来判断。
( 3)大部分可以用两种助记符表示。
微机原理及应用 27
调用指令与转移指令的比较
用于调用一个子过程
调用前须保护断点地址
子过程执行结束后要返回原调用处继续执行原程序断点恢复返回微机原理及应用 28
循环控制指令
指令所控制的目的地址都是 -128--+127
范围内,循环次数由 CX寄存器指定。该类指令主要有以下三种:
一,LOOP循环指令二,LOOPZ/LOOPE指令三,LOOPNZ/LOOPNE指令返回微机原理及应用 29
无条件循环指令 LOOP
指令格式:
LOOP LABEL ;
指令功能:
先将 CX的内容减 1,再判断 CX中是否为 0,
为 0则退出,否则循环。
操作:
DEC CX
JNZ 符号地址
----- LOOP 符号地址 返回微机原理及应用 30
条件循环指令 LOOPZ/LOOPE
指令格式:
LOOPZ/LOOPE OPR ;
指令功能,先将 CX的内容减 1,再判断 CX中是否为 0,并且判断 ZF是否为 1。如果 ZF=0,或
CX=0,则退出;只有在 ZF=1并且 CX≠0 情况下,
才继续循环。
指令说明,( 1) CX中的值为 0时,并不会影响标志位 ZF,ZF由前面其它指令来决定
( 2)该指令可用于查找相等的情况。
返回微机原理及应用 31
条件循环指令 LOOPNZ/LOOPNE
指令格式:
LOOPNZ/LOOPNE OPR ;
指令功能,先将 CX的内容减 1,再判断 CX中是否为 0,并且判断 ZF是否为 1。如果 ZF=0,并且
CX=0,则继续循环;只有在 CX=0,或 ZF=1情况下,则退出循环。
指令说明,( 1) CX中的值为 0时,并不会影响标志位 ZF,ZF由前面其它指令来决定。
( 2)该指令用于查找不相等的情况。
返回微机原理及应用 32
中断控制指令一,一般中断指令,INT n
二,溢出中断指令,INTO
三,中断返回指令,IRET
思考,中断与过程调用的区别?
返回微机原理及应用 33中断指令中断与过程调用:
中断是随机事件或异常事件引起,调用则是事先已在程序中安排好
响应中断请求不仅要保护断点地址,还要保护
FLAGS内容
调用指令在指令中直接给出子程序入口地址,
中断指令只给出中断向量码,入口地址则在向量码指向的内存单元中返回微机原理及应用 34
INT n 中断指令
指令格式:
INT n
执行的操作:
(SP) (SP)-2 ((SP)+1,(SP)) (PSW)
(SP) (SP)-2 ((SP)+1,(SP)) (CS)
(SP) (SP)-2 ((SP)+1,(SP)) (IP)
(IP) (n*4) (CS) (n*4+2)
指令说明,指令在执行完以上操作后,再把 IF和 TF位置 0,但不影响其余的标志位。
中断类型码
n=0? 255
P149
微机原理及应用 35中断指令
nх4 =存放中断服务子程序入口地址的单元地址
n х4 XXH
XXH
XXH
XXH入口偏移地址 IP
入口段地址 CS操作总结:
将 FLAGS压入堆栈
将 INT指令下一条指令的 CS,IP压栈
取中断服务程序入口地址微机原理及应用 36中断指令例
INT 21H
IPL
IPH
CSL
CSH
SP=1200
FLAGSL
FLAGSH
SP=11FA
执行 INT
指令后保护断点微机原理及应用 37中断指令例
执行 INT 21H指令后
IP=?
CS=? 21Hх4
=0084H 23H
11H
00H
20H
IP
CS
返回微机原理及应用 38
溢出中断指令
指令格式:
INTO 相当于 INT 4
执行的操作:
(SP) (SP)-2 ((SP)+1,(SP)) (PSW)
(SP) (SP)-2 ((SP)+1,(SP)) (CS)
(SP) (SP)-2 ((SP)+1,(SP)) (IP)
(IP) (10H) (CS) (12H)
返回
若 OF=1,则启动一个类型为 4的中断过程,给出一个出错标志,如果 OF=0,不做任何操作。
INTO指令通常安排在有符号数加减运算指令之后。
微机原理及应用 39
中断返回指令
指令格式:
IRET
执行的操作:
(IP) ((SP)+1,(SP)) (SP) (SP)+2
(CS) ((SP)+1,(SP)) (SP) (SP)+2
(PSW) ((SP)+1,(SP)) (SP) (SP)+2
指令说明,中断服务程序的最后一条指令,负责恢复断点和标志寄存器内容。该指令的标志位由堆栈中取出的值来设置。
返回微机原理及应用 40
处理器控制指令
该类指令主要有以下两大类指令组成:
一,标志操作指令二,其他处理器控制指令返回说明见
p151表微机原理及应用 41
标志操作指令
标志操作指令由以下三种指令组成:
一,进位标志 CF操作指令二,方向标志 DF操作指令三,中断允许标志 IF操作指令返回微机原理及应用 42
进位标志 CF操作指令
指令组成:
( 1) STC进位位置 1指令,CF 1
( 2) CLC进位位置 0指令,CF 0
( 3) CMC进位位求反指令,CF CF
指令说明:
用在多字节或字运算中,用来传递低位向高位的进位,STC置 1,CLC清 0,CMC求反。
返回微机原理及应用 43
方向标志 DF操作指令
指令组成:
STD方向标志位置 1指令,DF 1
CLD方向标志位置 0指令,DF 0
指令说明,执行串操作指令过程中,决定字符地址的修改方向。 STD置 1:字符地址减量修改,
CLD置 0:字符地址增量修改。
返回微机原理及应用 44
中断允许标志 IF操作指令
指令组成:
STI中断标志位置 1指令,IF 1
CLI中断标志位置 0指令,IF 0
指令说明:
STI置 1,开放中断; CLI清 0,屏蔽外部中断 。
返回微机原理及应用 45
其他处理器控制指令 (自学)
一,暂停指令二,交权指令三,等待指令四,总线封锁指令返回微机原理及应用 46
暂停指令
指令格式:
HLT
指令说明:
该指令经常和中断过程联系在一起,常用于外部硬件中断。
返回微机原理及应用 47
交权指令
指令格式:
ESC
指令说明:
在带协处理器的系统中,程序中的交权指令表示 8086调用协处理器工作。
返回微机原理及应用 48
等待指令
指令格式:
WAIT
指令说明:
该指令一般是和 ESC指令配合使用。 8086用 ESC
指令使协处理器工作以后,自己还可以执行一些其他操作,此时处于并行工作状态。要取回协处理器的处理结果。可安排一条等待指令
WAIT指令过程中,不断测试 CPU的 TEST引腿上的信号。
返回微机原理及应用 49
总线封锁指令
指令格式:
LOCK
指令说明:
该指令可以放在任何一条指令的前面,LOCK实际上是一个指令前缀。 LOCK前缀用在 8086最大模式中,在硬件上将 CPU的 LOCK引腿与总线控制器 8289的 LOCK输入端相连,
用了指令前缀 LOCK以后,CPU在执行前缀后面的一条指令时,会从 LOCK引腿往外送 1个低电平信号,CPU访问存储器或外设时,总线控制器会对总线实行封锁,使其他处理器得不到总线控制权,不能访问存储器或外设。
返回微机原理及应用 50结束语第 3章掌握:
指令的格式及意义
指令对操作数的要求及对标志位的影响
指令的应用返回微机原理及应用 51
实验一请在数据段中定义两个数,要求编写程序分别计算出这两个数的和、差、积、
商,并用 Debug的相关命令查询计算结果。
学习使用 Debug的相关命令微机原理及应用 52
怎样编写程序?
DATA SEGMENT
DATA ENDS
EXTRA SEGMENT
EXTRA ENDS
CODE SEGMENT
CODE ENDS
ASSUME CS:CODE,DS:DATA,ES:EXTRA
MOV AX,DATA
MOV DS,AXMOV AX,EXTRA
MOV ES,AX
BUFFER1 DB ‘Hello,everybody!’
BUFFER2 DB 17 DUP(?)
LEA SI,BUFFER1
LEA DI,BUFFER2MOV CX,17
CLD
REP MOVSB
STA:
END STA
返回微机原理及应用 53
怎样编写程序?
DATA SEGMENT
DATA ENDS
EXTRA SEGMENT
EXTRA ENDS
CODE SEGMENT
CODE ENDS
ASSUME CS:CODE,DS:DATA,ES:EXTRA
MOV AX,DATA
MOV DS,AXMOV AX,EXTRA
MOV ES,AX
BUFFER1 DB 0AH
BUFFER2 DB 0BH
STA:
END STA
返回
:,,
:,,
微机原理及应用 54
实验操作步骤
在 MS-DOS下,用 Edit命令进入编辑状态,完成所编写程序的输入。
程序编写完成后,将文件保存为 xx.asm,并退出编辑状态。
用 masm命令对所编写的程序进行编译,格式如下:
masm xx; 回车
用 link命令对所编写的程序进行连接,格式如下,
link xx; 回车
运行程序命令格式如下:
xx; 回车微机原理及应用 55
实验操作步骤
用 debug 命令对所编写的程序进行调试,格式如下:
debug xx.exe 回车
常用的 debug命令:
,T”回车,单步运行程序并显示寄存器状态。
,R”回车,显示各寄存器内容。
,DDS:XX”回车,察看数据段中偏移量为 XXH的内存单元中的内容。
,U”回车,反汇编当前机器码,也就是显示待执行的汇编语句。
,G XX”回车,执行内存中的可执行代码,直到偏移量为 XXH的代码为止。
,Q”回车,退出 DEBUG调试状态。
在提示符状态下输入,Exit”命令,退出 DOS模式。
微机原理及应用 56串操作类指令串操作指令就是用一条指令实现对一串字符或数据的操作。
它主要由以下几种指令组成:
一,字符串传送指令,MOVSB/MOVSW
二,字符串比较指令,CMPSB/CMPSW
三,字符串检索指令,SCASB/SCASW
四,取字符串指令,LODSB/LODSW
五,存字符串指令,STOSB/STOSW
返回串操作类指令特点微机原理及应用 57串操作指令
针对数据块或字符串的操作
可实现存储器到存储器的数据传送
待操作的数据串称为源串,目标地址称为目标串
串操作指令是唯一的一组能直接处理源和目的操作数都在存储单元的指令微机原理及应用 58串操作指令的特点
源串一般存放在数据段,偏移地址由 SI指定。
允许段重设
目标串必须在附加段,偏移地址由 DI指定
指令自动修改地址指针,修改方向由 DF决定。
DF=0 增地址方向; DF=1 减地址方向
数据块长度值由 CX指定
可增加自动重复前缀以实现自动修改 CX内容微机原理及应用 59串操作指令流程取源串地址取目标串地址设串长度传送一个字节或字修改地址指针修改串长度值传送完否?
微机原理及应用 60
重复前缀
REP 无条件重复
REPE 相等重复
REPZ 为零重复
REPNE 不相等重复
REPNZ 不为零重复条件重复
CX≠0Z
F=1
CX≠0Z
F=0
CX≠0 重复微机原理及应用 61
串操作指令与重复前缀串操作指令 前缀
MOVS REP
CMPS REPE/PEPZ REPNE/REPNZ
SCAS REPE/PEPZ REPNE/REPNZ
LODS ____
STOS REP
微机原理及应用 62示 例
LEA SI,BUFFER1
LEA DI,BUFFER2MOV CX,17
CLD
REP MOVSB
LEA SI,BUFFER1
LEA DI,BUFFER2MOV CX,17
CLD
AGAIN,MOVSB DEC CX
JNZ AGAIN
LEA SI,BUFFER1
LEA DI,BUFFER2MOV CX,17
AGAIN,MOV AL,[SI]
MOV [DI],ALINC SI
INC DIDEC CX
JNZ AGAIN
REP 执行的操作,
1) 如 (CX)=0则退出 REP,否则往下执行,
2) (CX)=(CX)-1
3) 执行其后的串指令
4) 重复 1)~~3)
编写程序实现:将 BUFFER1中的 17个数传送到 BUFFER2中去。
微机原理及应用 63
怎样编写程序?
DATA SEGMENT
DATA ENDS
EXTRA SEGMENT
EXTRA ENDS
CODE SEGMENT
CODE ENDS
ASSUME CS:CODE,DS:DATA,ES:EXTRA
MOV AX,DATA
MOV DS,AXMOV AX,EXTRA
MOV ES,AX
BUFFER1 DB ‘Hello,everybody!’
BUFFER2 DB 17 DUP(?)
LEA SI,BUFFER1
LEA DI,BUFFER2MOV CX,17
CLD
REP MOVSB
STA:
END STA
返回微机原理及应用 64字符串传送指令
指令格式:
MOVS DST,SRC ;
(DI) (SI) 字节
MOVSB ; 字节 (DI) (DI) ± 1,(SI) (SI) ± 1
MOVSW ; 字 (DI) (DI) ± 2,(SI) (SI) ± 2
指令功能,把 DS段由 SI指出的字节或字传送到 ES段由
DI指出存储单元中,并修改 SI和 DI地址指针。 MOVSB完成字节操作,MOVSW完成字操作,通常指令前面加重复前缀
REP,数据串长度送 CX寄存器。
指令说明 …
返回微机原理及应用 65
字符串传送指令说明
用 CLD指令将 DF清零,地址指针自动加 (MOVSB+ 1 MOVSW
+ 2)增址
用 STD指令将 DF置 1,地址指针自动减 (MOVSB- 1 MOVSW
- 2)减址
第二、三种格式明确地注明是传送字节或字,隐含了两个操作数的地址。第一种格式则应在操作数明确是字还是字节操作,如:
MOVS ES:BYTE PTR[DI],DS:[SI]
微机原理及应用 66
串传送指令例
用串传送指令实现 200B数据的传送:
LEA SI,MEM1
LEA DI,MEM2
MOV CX,200
CLD
REP MOVSB
HLT
返回微机原理及应用 67字符串比较指令
指令格式:
CMPS DST,SRC ;
(DI) (SI) 字节
CMPSB ; 字节 (DI) (DI) ± 1,(SI) (SI) ± 1
CMPSW ; 字 (DI) (DI) ± 2,(SI) (SI) ± 2
指令功能,把 DS段由 SI指出的字节或字和 ES段由 DI
指出的字或字节相比较,并比较后修改 SI和 DI地址指针。指令影响标志位,利用重复前缀可实现在两个字符串中寻找第一个不等的元素或第一个相等的元素。
指令说明 …
返回微机原理及应用 68
字符串比较指令说明
指令前缀有以下三种形式:
( 1) REP 重复
( 2) REPZ/REPE 相等 /为零则重复
( 3) REPNZ/REPNE 不相等 /不为零则重复微机原理及应用 69
串比较指令例比较两个字符串是否相等,并找出其中第一个不相等字符的首地址,将该地址送到 BX中,不想等字符送到 AL中。设
MEM1为源串首地址,MEN2为目的串首地址,两个字串长度均为 200。
LEA SI,MEM1
LEA DI,MEM2
MOV CX,200
CLD
REPE CMPSB
TEST CX,00FFH
JZ STOP
DEC SI
MOV AL,[SI]
MOV BX,SI
STOP,HLT
返回微机原理及应用 70字符串检索指令
指令格式:
SCAS DST ;
SCASB ; 字节 (AL ) - (DI),(DI) (DI) ± 1
SCASW ; 字 (AX) - (DI),(DI) (DI) ± 2
指令功能,用 AL中的字节或 AX中的字,与位于 ES段由 DI寄存器指出内存单元的字节或字相比较。通过前缀控制,可以实现 AL中的字节或 AX中的字与内存单元相等或不等的比较。
指令说明 …
返回微机原理及应用 71
字符串检索指令说明
指令 REPNZ SCASB有以下两种退出情况:
( 1)字符串中某字节与 AL中的字节相等,从而退出。
( 2)字符串中没有字节与 AL中的字节相等,
但检索完毕,从而退出。可通过 ZF检测来判断当前处于哪种情况,ZF=1,为前一种情况,
ZF=0,为后一种情况,ZF与 CX无关。
返回微机原理及应用 72取字符串指令
指令格式:
LODS SRC ;
LODSB ; 字节 (AL) (SI),(SI) (SI) ± 1
LODSW ; 字 (AX) (SI),(SI) (SI) ± 2
指令功能,将位于 DS段由 SI寄存器指出内存单元的内容取到 AL或 AX中。指令中不能加重复前缀。
返回微机原理及应用 73
存字符串指令
指令格式:
STOS DST ;
STOSB ; 字节 (AL) (DI),(DI) (DI) ± 1
STOSW ; 字 (AX) (DI),(DI) (DI) ± 2
指令功能,把 AL中的字节或 AX中的字,存到 ES段由
DI寄存器指出内存单元,并自动修改地址指针。加上前缀 REP后,可使一串内存单元中填满相同的数。
返回