第十课_串操作&处理器控制指令
串操作通常以DS:(E)SI来寻址源串,以ES:(E)DI来寻址目的串,对于源串允许段超越。(E)SI或(E)DI这两个地址指针在每次串操作后,都自动
进行修改,以指向串中下一个串元素。地址指针修改是增量还是减量由方向标志来规定。当DF=0,(E)SI及(E)DI的修改为增量;当DF= 1,(E)SI及
(E)DI的修改为减量。根据串元素类型不同,地址指针增减量也不同,在串操作时,字节类型SI,DI加、减1;字类型SI,DI加、减 2;双字类型ESI,
EDI加、减4。如果需要连续进行串操作,通常加重复前缀。重复前缀可以和任何串操作指令组合,形成复合指令
串传送指令
基本格式:[REP]MOVS DESTS, SRCS
[REP] MOVSB/MOVSW/MOVSD
功能:将DS:(E)SI规定的源串元素复制到ES:(E)DI规定的目的串单元中
串比较指令
基本格式:[REPE/Z] [REPNZ/NE] CMPS DESTS, SRCS
[REPE/Z] [REPNZ/NE] CMPSB/CMPSW/CMPSD
功能:由DS:(E)SI规定的源串元素减去ES:(E)DI指出的目的串元素,结果不回送,仅影响标志位CF,AF,PF,OF,ZF,SF。当源串元素与
目的串元素值相同时,ZF=1;否则ZF=0。每执行一次串比较指令,根据DF的值和串元素数据类型自动修改(E)SI和(E)DI。
在串比较指令前加重复前缀REPE/Z,则表示重复比较两个字符串,若两个字符串的元素相同则比较到(E)CX=0为止,否则结束比较。在
串比较指令 前加重复前缀REPNE/NZ,则表示若两个字符串元素不相同时,重复比较直到(E)CX=0为止,否则结束比较
串扫描指令
格式①: [REPE/Z] [REPNE/NZ] SCAS DESTS
格式②: [REPE/Z] [REPNE/NZ] SCASB/SCASW/SCASD
功能:由AL,AX或EAX的内容减去ES:(E)DI规定的目的串元素,结果不回送,仅影响标志位CF,AF,PF,SF,OF,ZF。当AL, AX或EAX的值
与目的串元素值相同时,ZF=1;否则ZF=0。每执行一次串扫描指令,根据DF的值和串元素数据类型自动修改(E)DI
在串扫描指令前加重复前缀REPE/Z,则表示目的串元素值和累加器值相同时重复扫描,直到CX/ECX=0为止,否则结束扫描。若加重复前缀
REPNE/NZ,则表示当目的串元素值与累加器值不相等时,重复扫描直到CX/ECX=0时为止,否则结束扫描。
该指令影响标志位为CF,AF,PF,SF,OF,ZF
串存储指令
格式:[REP] STOS DESTS
[REP] STOSB/STOSW/STOSD
功能:将累加器\[AL,AX,EAX\]中值存入ES:DI/EDI所指的目的串存储单元中,每传递一次,都按DF值以及串元素类型自动修改地址指 针
DI/EDI。若加重复前缀REP,则表示将累加器的值连续送目的串存储单元,直到CX/ECX=0时为止。
该指令不影响标志位
处理器控制
空操作
格式:NOP
功能:空操作,除使IP/EIP增1外,不做任何工作。该指令不影响标志位
AIT
功能:检查BUSY引脚状态,等待协处理器完成当前工作。
处理器暂停指令
格式:HLT
功能:暂停程序的执行。当产生一个外部中断或非屏蔽中断时,才继续执行下一条指令
中断指令与DOS功能调用
中断指令格式:INT n
功能:产生中断类型码为n的软中断,该指令包含中断操作码和中断类型码两部分,中断类型码n为8位,取值范围为0~255(00H~FFH)
① 将标志寄存器FLAGS(或EFLAGS)压入堆栈;
② 清除TF和IF标志位;
③ CS,IP/EIP压入堆栈;
④ 实模式下,n×4获取中断矢量表地址指针;保护模式下,n×8获取中断描述符表地址指针;
⑤ 根据地址指针,从中断矢量表或中断描述符表中取出中断服务程序地址送IP/EIP和CS中,控制程序转移去执行中断服务程序。
中断返回指令格式:IRET/IRETD
功能:该指令实现在中断服务程序结束后,返回到主程序中断断点处,继续执行主程序
中断返回执行过程:
IRET指令弹出堆栈中数据送IP,CS,FLAGS;
IRETD指令弹出堆栈中数据送EIP,CS,EFLAGS。