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。

原文地址:https://www.cnblogs.com/zhangjiuding/p/8343550.html

时间: 2024-11-09 09:43:36

DF标志和串传送指令的相关文章

DF标志和串移动指令(movsb/movsw)

1.标志寄存器的第10位DF,方向标志位.在串处理指令中,控制每次操作后si,di的增减 DF=0,每次操作后,si.di增加 DF=1,每次操作后,si.di减小 我们可以用汇编语法描述movsb的功能如下: mov es:[di],byte ptr ds:[si]   ;8086不支持这样的指令,仅做描述之用 如果DF=0:inc si inc di 如果DF=1:dec si dec di 可以看出,movsb的功能是将ds:si指向的内存单元中的字节送入es:di中,然后根据标志寄存器D

深入理解计算机系统(3.3)------操作数指示符和数据传送指令

在上一篇博客 程序编码以及数据格式 中我们给出了一个简单的C程序,然后编译成了汇编代码.大家看不懂没关系,后面的博客我们将逐渐揭开一些汇编指令的神秘面纱.本篇博客我们将对操作数指示符和数据传送指令进行详细的介绍. 1.整数寄存器 上一篇博客我们讲了在汇编语言中,如下的几个处理器状态是可见的: 一.程序计数器(在 IA32 中通常称为 PC,用 %eip 表示):指示将要执行的下一条指令在存储器中的地址. 二.整数寄存器文件:包含8个命名的位置,可以存储一些地址或者整数的数据.有的用来记录某些重要

8086指令系统通用数据传送指令

最基本的传送指令: MOV 目的操作数,源操作数 注意点: 1)源操作数跟目的操作数之间的位数必须一致 2)立即数跟寄存器CS及IP不可以作为目的操作数 3)源操作数跟目的操作数不能同时为内存单元,也不能同时为立即数 4)用BP来间接寻址时,默认的段寄存器是SS,其余寄存器的间接寻址时,其默认的段寄存器是DS. 5)通用传送指令都不改变标志 6)在修改SS和SP的连续两条指令之间不允许插入其他任何指令 堆栈操作指令 PUSH 源操作数 POP 目的操作数 1)8086CPU的堆栈操作必须是字操作

汇编实现: C库常见函数,串操作指令作用

目录 汇编实现: C库常见函数 一丶汇编实现Strncpy拷贝函数 汇编实现: C库常见函数 一丶汇编实现Strncpy拷贝函数 void __asmStrncpy(char *des,char *src,int len) { __asm { mov edi,[ebp + 8]; //获取局部变量地址 des mov esi,[ebp + 0xc]; //获取局部变量地址 src mov ecx,len; //使用movs指令,需要给ecx长度 cld //设置DF = 0; 内存方向, 此时e

汇编语言:浮点数传送指令

1.FLD 指令格式: FLD STReg/MemReal 指令功能: 将浮点数据压入协处理器的堆栈中.当进行内存单元内容压栈时,系统会自动决定传送数据的精度.比如:用DD或REAL4定义的内存单元数值是单精度数等. STReg是处理器堆栈寄存器ST(0)~ST(7). 例如: .387 data1  DWORD 123, -543 data2  REAL8 -321.5 data3  REAL10 2.5 …… FLD  data1  ;压一个单精度数据进栈 FLD  data2  ;压一个双

协处理器的三大类数据传送指令

转载于:http://cs.fjzs.edu.cn/ketang/hbyy/11-3-2.htm 11.3.2 数据传送指令 为了满足协处理器和CPU之间进行数据交流的需求,就需要实现内存单元和协处理器之间进行数据传送的指令.协处理器的指令系统中有三大类数据传送指令:BCD传送指令.浮点数传送和整数传送指令. 一.BCD传送指令 1.FBLD 指令格式:FBLD MemBCD(*)指令功能:将内存中的BCD数据压入协处理器的堆栈中: (*) MemType是指定数据类型Type的内存单元,如:M

学 Win32 汇编[21] - 传送指令: MOV、LEA、XCHG、XLATB、XLAT、MOVZX、MOVSX

汇编指令的一般性要求: 1.两个操作数的尺寸必须一致; 2.操作数不能同为内存. MOV(Move): 最常用的数据传送指令 ;该指令不影响 EFlags ;指令格式: (其中的 r.m.i 分别表示: 寄存器.内存.立即数) MOV r/m, r/m/i ; Test21_1.asm .386 .model flat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc in

数据传送指令详解

数据传送指令详解 前言 上一章我们说了汇编语言的基础,包括数据格式,寄存器以及操作数的标识方式,接下来我们就应该去认识一下hiU币按语言当红真难过的格各个指令了.这些指令大部署很简单,但是组合在一起却能模拟出我们程序当中香烟的任何效果,确实很神奇. 数据传送指令 数据传送指令的目的是我了将一个数据从一个位置复制到另一个位置.既然如此,那么数据传送至零就会包含一个源操作数和一个目的操作数,指令会将源操作数的值复制到目的操作数并覆盖. 数据传送指令一共可以分为5种,分别是mov,movs,movz,

西门子PLC学习笔记十一-(装入与传送指令)

S7-300/400指令有:装入与传送指令.比较指令.算术运算指令.字逻辑运算指令.移位指令.逻辑控制指令.程序控制指令.主控指令等. 1.装入与传送指令(不能用于梯形图编程) 装入传送指令实现了各种数据存储区的数据交换,其凭借累加器来完成.装入指令标识符:L,传送指令标识符:T. s7-300PLC有2个32位的累加器,当执行装入指令(L)时,首先将累加器1中原有的数据移入累加器2中,累加器2中的原有内容被覆盖,然后将数据装入累加器1中:当执行传送指令(T)时,将累加器1中的数据写入目标存储区