微型计算机技术 第三章.ppt
说明: ① 本条指令不影响标志位。 ② MOVS指令采用隐含寻址方式,实现将数据段中由(SI)指向的一个字节或字传送到附加数据段中由(DI)指向的一个字节或字存储单元中去,然后根据DF和字或字节的规定对SI和DI指针进行修改。一般情况下源操作数在数据段,目的操作数在附加段。如果同段数据传送,允许源操作数使用段超越前缀来修改所在段,也可以采用两段合一的方法,即DS和ES同时指向同一数据段。 ③ 若想实现传送一个字节块或一个字块,必须先把传送字或字节的长度送CX寄存器中去,MOVS指令加前缀REP。 指令在操作之前必须做好以下初始化工作: (1) 把存放于数据段中的源数据串的首地址(如反向传送则应是末地址)存入(SI)。 (2) 把将要存放于附加段中的目的数据串的首地址(如反向传送则应是末地址)存入(DI)。 (3) 把数据串长度存入(CX)。 (4) 设置方向标志位DF的值(CLD指令使DF=0,STD指令使DF=1)。 2) LODS指令 汇编格式1:LODSB 汇编格式2:LODSW 汇编格式3:LODS源操作数存储器寻址方式 执行的操作: (1) 若字节:AL←((DS):(SI)) 若 字:AX←((DS):(SI)) (2) 若字节:(SI)←(SI)±1 (DF=0用“+”,否则用“-”) 若 字:(SI)←(SI)±2 (DF=0用“+”,否则用“-”) 说明: ① 本条指令不影响标志位。 ② 本条指令是隐含寻址,将数据段中(SI)指向的一个字或字节送入AL或AX,格式3中的源操作数只供汇编程序作类型检查。 ③ 本条指令一般不与REP联用。 3) STOS指令 汇编格式1:STOSB 汇编格式2:STOSW 汇编格式3:STOS目的操作数 执行的操作: (1) 若字节:((ES):(DI))←AL 若 字:((ES):(DI))←AX (2) 若字节:(DI)←(DI)±1 (DF=0用“+”,否则用“-”) 若 字:(DI)←(DI)±2 (DF=0用“+”,否则用“-”) 说明: ① 本条指令不影响标志位。 ② 与上两条指令相同,汇编格式3中的目的操作数只供汇编程序作类型检查。 ③ 本条指令可与REP联合使用,一般用来实现清除内存某一区域。 2. 串比较指令 每条串比较指令都可比较两个字或字节操作数的大小,但不保存结果。若加上重复前缀REPE/REPZ或REPNE/REPNZ,可按一定条件重复比较。 ● REPE/REPZ 该前缀的含义是:当相等/为零时重复比较。 汇编格式:REPE/REPZ CMPS/SCAS 执行的操作: (1) 当(CX)=0(即数据串比较完成)或ZF=0(即某次比较结果不相等)时退出,否则(即 (CX)≠0且ZF=1)往下执行。 (2) (CX)←(CX)-1。 (3) 执行其后的串比较指令。 (4) 执行(1)~(3)。 说明: ① REPE与REPZ是完全相同的,只是表达式不同而已。与REP相比,退出重复执行的条件除(CX)=0外,还增加了ZF=0的条件,也就是说,只要两数相等就可继续比较,如果遇到两数不相等可提前结束比较操作。 ② (CX)的递减不影响标志位。 ● REPNE/REPNZ 该前缀的含义是:当不相等/不为零时重复比较。 汇编格式:REPNE/REPNZ CMPS/SCAS 执行的操作:除退出条件为(CX)=0或ZF=1外,其他操作与REPE/REPZ相同。也就是说,只要两数不相等就可继续比较,如果遇到两数相等可提前结束比较操作。 1) CMPS指令 汇编格式1:CMPSB 汇编格式2:CMPSW 汇编格式3:CMPS源操作数存储器寻址方式,目的操作数存储器寻址方式执行的操作: (1) ((DS):(SI))-((ES):(DI)) (2) 若字节是(SI)←(SI)±1,(DI)←(DI)±1时,则方向标志位DF=0用“+”,否则用“-”;若字是(SI)←(SI)±2(DI