当前位置:文档之家› 微机原理-CH3-5-8086CPU串操作类指令

微机原理-CH3-5-8086CPU串操作类指令


[REPE/NE] CMPSB
;字节串比较
[REPE/NE] CMPSW
;字串比较
[REPE/NE] CMPSD
;双字串比较
执行的操作:
PSW ← ([ES:(DI)])-([DS:(SI)])
字节操作:SI←(SI)±1, DI←(DI)±1
字操作:SI←(SI)±2, DI←(DI)±2
双字操作:SI←(SI)±4, DI←(DI)±4
2014年3月27日星期四
20
例题:
比较两个字符串是否有相同的元素,其首地址和目标 首地址分别为SRC和DST,字符串的长度为N个字节
CLD
LEA SI,SRC
;设SI=2000H
LEA DI,DST
;设DI=3000H
MOV CX,N
双字操作:AC选EAX, SI←(SI)±4
2014年3月27日星期四
26
西北师大计算机系
STOS存串元素指令
索国瑞:suogr @
指令格式:
[REP] STOS OPR ;串类型已定义
[REP] STOSB
;字节串存值
[REP] STOSW
;字串存值
[REP] STOSD
西北师范大学计算机科学与工程学院
微机原理及汇编语言
8086CPU串操作类指令
索国瑞 2014秋选课班
西
北 师
8086CPU串操作指令


算 机
串的概念和共性
系 微
串重复前缀
机 原
串的类型后缀

及 汇
串处理方向
编 语
段超越问题

串操作指令
suogr@ QQ :31696867
6
西北师大计算机系
索国瑞:suogr @
REP无条件重复操作前缀
格式: REP 〈串操作指令〉 可用于任何串操作指令,可使其后的串指令重复执行 基本操作
执行次数预置在CX中,每重复一次,(CX)自动减1, 一旦归零,则停止重复。
注意,执行重复串操作之前应该为CX赋初值,并设 置指针寄存器和方向变化标志DF,并小心数据类型
2014年3月27日星期四
17
例题:
将数据段内起始地址在SOURCE(段内偏移地址)的一 数据块传送到附加段地址在DEST的存储单元中去,数 据块长度是200个字节
按一般处理方式:
LEA SI,SOURCE ;设SI=2000H
LEA DI,DEST ;设DI=3000H
MOV CX,50
CX
0000H
ES-附加段 00 ES:3000H 2C ES-附加段
DI 3000H
…… 00 ES:30C7H ……
…… 3D ……
DI 30C8H
2014年3月27日星期四
19
西北师大计算机系
CMPS串比较指令
索国瑞:suogr @
指令格式:
[REPE/NE] CMPS DST,SRC ;串类型已定义
LODS取串元素指令
索国瑞:suogr @
指令格式:
LODS OPR ;串类型已定义
LODSB
;字节串取值
LODSW
;字串取值
LODSD
;双字串取值
执行的操作:
AC ← ([DS:(SI)])
字节操作:AC选AL, SI←(SI)±1
字操作:AC选AX, SI←(SI)±2
索国瑞:suogr @
1.若 (CX) = 0,或者 ZF = 0,则退出REPE/REPZ, 否则向下执行
2.CX ← (CX) – 1
3.执行REPE/REPZ后的串指令一次
4.重复1~3
REPE/REPZ前缀主要和串比较指令CMPS及串扫描指令 SCAS联用。此时的含义可理解为:字符串未处理完并 且当前两数据相等或者当前数据为0时重复
串操作 是指对串中相关项进行传送、比较、查找、装 入和存储等操作,这些操作一般是可以自动而连续地 进行。
8086CPU提供的串操作指令在每次基本操作后,可以 自动修改指针 地址,并可以加 重复前缀,从而通过 硬件自动完成规定次数的动作,比用软件循环要快的 多。
2014年3月27日星期四
3
西北师大计算机系
2014年3月27日星期四
10
西北师大计算机系
索国瑞:suogr @
REPNZ/NE 不相等时重复
格式: REPNZ REPNE
执行的操作:
〈串操作指令〉 〈串操作指令〉
可用于任何串操作指令,可使其后的串指令重复 执行,执行次数预置在CX中,每重复一次,CX自动减 1,一旦归零,或者ZF=1,则停止重复。注意,执行 重复串操作之前应该为CX赋初值。但ZF是由当前串指 令本身设置的,不需预置。
2014年3月27日星期四
24
西北师大 计算机系
CX 00C8H 0000H
AL ‘M’
DI 3000H 30C8H
2014年3月27日星期四
索国瑞 suogr@
ES-数据段 …… 2C ES:3000H 4F …… 3B 2C ES:30C7H …… …… ……
25
西北师大计算机系
;200字节
CLD
;DF=0,+
REP MOVSD
;双字串的传递
2014年3月27日星期四
18
西北师大 计算机系
DS-数据段
索国瑞 suogr@
CX
DS-数据段
2000H SI
…… 0032H ……
2C DS:2000H 2C
……
……
3D DS:20C7H 3D
……
……
20C8H SI
[REPE/NE] SCASB
;字节串比较
[REPE/NE] SCASW
;字串比较
[REPE/NE] SCASD
;双字串比较
执行的操作:
PSW ← (AC)-([ES:(DI)])
字节操作:AC选AL, DI←(DI)±1
字操作:AC选AX, DI←(DI)±2
双字操作:AC选EAX, DI←(DI)±4
2C ES:3000H
SI 2000H 20C8H
4F …… 3B 2C ES:30C7H
DI 3000H
30C8H
…… …… ……
2014年3月27日星期四
22
西北师大计算机系
SCAS串搜索指令
索国瑞:suogr @
指令格式:
[REPE/NE] SCAS OPR ;串类型已定义
;200字节
REPNE CMPSB
;串比较
JNZ NOT_FOUND ;结果判断
2014年3月27日星期四
21
西北师大 计算机系
DS-数据段
……
DS:2000H 2C
4F …… 07 DS:20C7H 00
…… …… ……
索国瑞 suogr@
ES-数据段
CX 00C8H
……
0000H
串指令在书写时可以写上操作数,也可以在指令助 记符后加 类型后缀,作为判定数据类型的标记
西北师大计算机系
索国瑞:suogr @Βιβλιοθήκη
串重复前缀
无条件重复前缀 REP
有条件重复前缀 REPZ/REPE REPNZ/REPNE
2014年3月27日星期四
5
2014年3月27日星期四
2014年3月27日星期四
12
西北师大计算机系
索国瑞:suogr @
串处理方向
是指串处理过程中,指针寄存器对应的存储地址变化 的方向,是从高地址到低地址,还是相反。这取决于 方向标志 DF 的设置,
DF =0时为地址增加方向,每执行一条串操作指令, 相关变址寄存器的内容增加。
2014年3月27日星期四
23
例题:
在首地址为ES:DST的字符串中检查是否有字符“M”, 字符串的长度为N个字节
CLD
LEA DI,DST
;设DI=3000H
MOV CX,N
;200字节
MOV AL,’M’
REPNE SCASB
;串检索
JNZ NOT_FOUND ;结果判断
其他内容与REPE类似
2014年3月27日星期四
11
西北师大计算机系
索国瑞:suogr @
串的类型后缀
串操作指令可带类型后缀,有三种 后缀 B 表示字节串,指针变化量是 1 后缀 W 表示字串,指针变化量是 2 后缀 D 表示双字串,指针变化量是 4
不同的数据类型后缀,会影响到指针寄存器变化时的 变化量,也会影响到对应的默认寄存器

suogr@
教9楼C区C506实验室 教学群号:31696867
2014年3月27日星期四
2
西北师大计算机系
索国瑞:suogr @
串的概念与共性
串是指一系列含有字符、数字的 字节 或 字 或 双字 的 序列 ,在内存中是 地址连续 的空间,可以看做 数 据块、数据堆。
[REP] MOVSB
;字节串传送
[REP] MOVSW
;字串传送
[REP] MOVSD
;双字串传送
执行的操作:
ES:(DI)←([DS:(SI)])
字节操作:SI←(SI)±1, DI←(DI)±1
字操作:SI←(SI)±2, DI←(DI)±2
双字操作:SI←(SI)±4, DI←(DI)±4
2014年3月27日星期四
7
西北师大计算机系
相关主题