第十一章 标志位寄存器

CPU内部的寄存器中,有一种特殊的寄存器(对于不同的处理机,个数和结构都可能不通)具有下面3种形式:

(1)用来存储相关指令的某一些执行结果

(2)用来为CPU执行相关的指令提供依据

(3)用来控制CPU的相关工作方式

这些特殊的CPU被称为标志寄存器,前面我们已经使用过了8086CPU的ax,bx,cx,dx,si,di,bp,sp,ip.cs,ds,es,ss等13个寄存器,本章学习最后一个寄存器。

DF标志和串传送指令

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

df=0 每次操作之后si,di递增

df=1 每次操作之后si,di递减

串指令的格式:

格式:movsb

功能:执行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

一般来说,movsb,movsw都是和rep配合使用。

rep movsb

s:movsb

loop s

也是根据cx来控制循环的次数。

8086CPU提供了两条指令来对df位进行设置

cld指令:将标志位寄存器的df位设置为0

std指令:将标志位寄存器的df位设置为1

1.编程,用串传送指令,将data段中的第一个字符串复制到他后面的空间中

data segment
  db 'Welcome to masm!'
  db 16 dup(0)
mov ax,data
mov ds,ax
mov si,0
mov es,ax
mov di,16
mov cx,16
cld
rep movsb

2.编程将F0000段中的最后16个字符复制到data段中。

data segment
  db 16 dup(0)
data ends

程序代码如下:

mov ax,0f000h
mov ds,ax
mov si,0ffffh
mov ax,data
mov ds,ax
mov di,15
mov cx,16
std
rep movsb

共有 0 条评论

Top