单片机基础之汇编语言入门学习(十一) 串操作指令 转移指令 处理器控制指令


一、串操作类指令

”串“就是内存中一段地址相连的字节或字;
串操作,也叫数据块操作;
可实现存储器数据间的直接传送;
8086有5中基本串操作:
MOVS 串传送指令
CMPS 串比较指令
SCAS 串扫描指令
LODS 取串指令
STOS 存串指令

1.串传送指令 MOVS
串传送有2种格式:
(1)MOVSB
字节传送;把数据段中SI寻址的数据传送到附加段种DI寻址的存储区域中;然后修改SI、DI。

MOVSW    字传送

(ES:DI)<-(DS:SI)
(SI)<-(SI) +/- 1;(DI)<-(DI) +/- 1
当方向标志 D=0 时用 ”+“,D=1时用”-“。
在这里插入图片描述
(2)MOVSW
操作;字传送;
(ES:DI)<-(DS:SI)
(SI)<-(SI) +/- 2;(DI)<-(DI) +/- 2
当方向标志 D=0 时用 ”+“,D=1时用”-“。
该指令可以实现从存储器到存储器的数据传送,而且传非常简便。

2、REP 重复串操作执行
过程:
(1)当(CX)!=0, (CX)<-(CX)-1,
执行REP后的串指令。
(2)当(CX)=0,结束REP,
执行下一条指令。
在这里插入图片描述

3、从串中取数指令 LODS
有2种格式:
(1)LODSB(字节);
(AL)<-(DS:SI), (SI)<-(SI)+/-1
(2)LODSW(字);
(AL)<-(DS:SI), (SI)<-(SI)+/-2
功能:该指令把由SI指定的数据段中某单元内容赋给AL或AX。

4、存入串指令 STOS
有2种格式:
(1)STOSB(字节);
(ES:DI)<-(AL), (DI)<-(DI)+/-1;
(2)STOSB(字);
(ES:DI)<-(AL), (DI)<-(DI)+/-2;
与REP 联用时,可用来建立一串相同的值,串长度由CX内容决定。

5、串比较指令 CMPS
2种格式:
(1)CMPSB(字节)
(2)CMPSW(字)
执行操作:
(ES:DI)-(DS:SI),结果不存,置标志。
字节操作:(SI)<-(SI)+/-1, (DI)<-(DI)+/-1
字操作:(SI)<-(SI)+/-2, (DI)<-(DI)+/-2

6、传扫描指令 SCAS
有2种格式:
(1)SCASB (字节)
(AL)-(ES:DI)
(DI)<-(DI)+/-1
(2)SCASW(字)
(AX)-(ES:DI)
(DI)<-(DI)+/-2
两数相减,只影响标志,不影响操作数。

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


二、程序控制类指令

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

1、转移指令
转移指令控制程序从一处转移到另一处执行。
CPU内部,转移是通过将目标地址传送给IP来实现的。
转移指令包括两种:无条件转移指令条件转移指令
(1)无条件转移指令 JMP(Jump)
格式:JMP 语句标号
JMP LP;
(2)条件转移指令
Ⅰ、根据单个条件标志转移
① Z标志
JZ/JNZ
Jump on Zero;Jump on no 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

Ⅱ、根据两个无符号数大小关系转移
JB(低于跳转)、JNAE;JNB、JAE
JBE(不高于跳转)、JNA;JNBE、JA(高于跳转)
JB: Jump on Below;
JAE:Jump on Above or Equal

Ⅲ、根据两个带符号数比较结果转移
JL(JNGE)/JNL(JGE) : 小于跳转/不小于跳转
JLE(JNG)/JNLE(JG)
L-Less ; G-Greadt; 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)条件循环
Ⅰ、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,则终止循环。

Ⅱ、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,则终止循环。

4、中断指令
(1)中断调用:INT n
n-中断号,0~255
(2)中断返回:IRET


三、处理器控制类指令

1、标志处理指令

清除指令/设置指令
CLC  清C标志
STC  置C标志
CMC  对C求反
CLD  清D标志
STD  置D标志
CLI  清I标志
STI  置I标志

2、其他处理器控制指令

NOP    空操作
HLT    CPU暂停状态
WAIT   CPU等待状态
ESC    交权
LOCK   (Lock bus) 总线锁定


总结

8086/8088CPU指令按其功能可以分为6类,他们是:
(1)数据传送类指令
(2)算数运算类指令
(3)位操作类指令
(4)串操作类指令
(5)程序控制类指令
(6)处理器控制类指令

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值