zoukankan      html  css  js  c++  java
  • DF标志和串传送指令

     flag标志的第10为为DF(direction flag)(方向标志位,在串传送指令中,控制每次操作后si,di的增减。

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

    df=1                      递减


    串传送指令1:传送一个字节(8位)
    格式:movsb

    功能:将ds:si指向的内存单元中的字节送入到es:di中,然后根据标志寄存器DF位的值将si和di递减或递增。

    分析,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。

    串传送指令2:传送一个字(16位)
    格式:movsw

    功能:将ds:si指向的内存单元中的字单元中word送入ds:di中,然后根据标志位DF的值,将si和di递增2或递减2。


    movsb和movsw进行的是串传送操作中的一个步骤,一般来说,movsb和movsw都和rep配合使用。
    格式:rep movsb            
    用汇编语法来描述:
    s: movsb
        loop s
    在此,rep的作用是根据cx的值,重复执行后面的串传送指令。由于每执行依次movsb指令si和di都会递增或递减指向后一个单元或前一个单元,则rep movsb就可以循环实现(cx)个字符的传送。
    同理rep movsw的功能。

      flag的DF位决定着串传送指令执行后,si和di改变的方向,CPU提供了相应的指令来对DF位进行设置,从而使程序编写者能够决定传送的方向。

    8086CPU提供下面两天指令对DF位进行设置:
      cld指令:将标志寄存器的DF位置0;std指令:将标志寄存器的DF位置1。

     

    编程:用串传送指令,将data段中的第一个字符串复制到它后面的空间中。
    data segment
    db 'Welcome to masm!'
       db 16 dup (0)
    data ends

    分析:
    1) 传送的原始位置:ds:si;        对应的信息:data:0
    2) 传送的目的位置:es:di;         对应的信息:data:16
    3) 传送的长度:cx                    对应的信息:16
    4)传送的方向:DF;     因为正向传送(每次串传送指令执行后,si和di递增)比较方便,所以设置DF =0。

    assume cs:code
    data segment
        db 'welcome to masm!'
        db 16 dup(0)
    data ends
    
    code segment
    start:    mov ax,data
                mov ds,ax
                mov si,0 ;ds:si 指向 data:0
                mov es,ax
                mov di,16  ;es:di指向data:0010
                mov cx,16 ;rep 循环16次
                cld       ;设置df=0,正向传送
                rep movsb
                mov ax,4c00h
                int 21h
    code ends
    end start
                

    如果cld 改成std;则

      mov si,15

      mov di,31

    这点要特别注意

  • 相关阅读:
    python中map()函数
    Numpy学习—np.random.randn()、np.random.rand()和np.random.randint()
    列表、集合和字典推导式
    pandas iloc函数
    python -- 类中self到底有什么用?再续
    python apply()函数
    python 中关于self到底有什么用续
    python——类中的self到底有什么作用
    类初始化的参数可以是任何形式
    python高级(元类、自定义元类)
  • 原文地址:https://www.cnblogs.com/youxin/p/2530602.html
Copyright © 2011-2022 走看看