DF标志和串传送指令

DF标志和串传送指令


flag的第10位是DF,方向标志位。在串处理指令中,控制si、di的递减。

df = 0 每次操作后si、di递增
df = 1 每次操作后si、di递减


串传送指令


### 格式1: movsb

功能描述

1. ((es)*16+di) =   ((ds)*16+si)
2. 如果 df=0 则:    (si)=(si)+1
                    (di)=(di)+1
   如果 df=1 则:    (si)=(si)-1
                    (di)=(di)-1

C语言描述

// si,di 相当于C语言循环中 i,j 变量的功能。
e[i] = d[j];
i++;
j++;



格式2:movsw

功能描述

movsw 的功能是将 ds:si 指向的内存字单元中的字送入 es:di 中,
然后根据标志寄存器df位的值,将 si、di递增 2 或递减 2。

C语言描述

// si,di 相当于C语言循环中 i,j 变量的功能。
e[i] = d[j];
i += 2;
j += 2;



rep指令

movsb 和 movsw 都和rep配合使用

  1. rep movsb等同于:
s: movsb
loop s

次数由 cx 决定,作用是循环传送字节。
2. rep movsw等同于:

s: movsw
loop s

次数由 cx 决定,作用是循环传送字。



我们怎样设置循环的方向?

由于 movsb 和 movsw 都由 df 标志决定,汇编语言中有这样两条指令改变 df 的值。
cld指令:将标志寄存器的 df 位置为0。
std指令:将标志寄存器的 df 位置为1。
posted @ 2018-01-24 21:02  ninding  阅读(1091)  评论(0编辑  收藏  举报