zoukankan      html  css  js  c++  java
  • 汇编指令

    汇编指令

    CLI 全称 Clear Interupt

    STI 全称 Set Interupt

    CLD 全称 Clear Director

    STD 全称 Set Director

    CLI和STI是用来屏蔽中断和恢复中断用的,如 设置栈基址SS和偏移地址SP时,需要CLI,因为如果这两条指令被分开了,那么很有可能SS被修改了,但由于中断,而代码跳去其它地方执行了,SP还没来得及修改,就有可能出错。

    MOVSB(MOVe String Byte):即字符串传送指令,这条指令按字节传送数据。

    通过SI和DI这两个寄存器控制字符串的源地址和目标地址,

    比如DS:SI这段地址的N个字节

    复制到ES:DI指向的地址,复制后DS:SI的内容保持不变。

    REP(REPeat)指令就是"重复"的意思,术语叫做"重复前缀指令",因为既然是传递字符串,

    则不可能一个字(节)一个字(节)地传送,所以需要有一个寄存器来控制串长度。这个寄存器就是CX,

    指令每次执行前都会判断CX的值是否为0(为0结束重复,不为0,CX的值减1),

    以此来设定重复执行的次数。因此设置好CX的值之后就可以用REP MOVSB了。

    CLD(CLear Direction flag)则是清方向标志位

    ,把标志(flags)寄存器的DF=0,地址指针si、di增加;如是std则把DF=1,地址指针减小也。使DF的值为0,在执行串操作时,使地址按递增的方式变化,这样便于调整相关段的的当前指针。这条指令与STD(SeT Direction flag)的执行结果相反,即置DF的值为1。

    example:把当前数据段中偏移1000H开始的100个字节数据传送到偏移2000H开始的单元中。

    cld ;指针增值

    push DS ;当前数据段,因此压入栈中保存

    pop ES ;使ES=DS

    mov SI,1000H ;源串指针初值

    mov DI,2000H ;目的串指针初值

    mov CX,100 ;循环次数

    Next:

       lodsb ;取一个字节

       stosb ;存一个字节

       loop Next ;循环CX次

    以下程序片段与上面的等价:

     cld ;地址指针增值

    ……

     mov CX,100 ;循环CX次

     Next:

       movsb ;每次传送一字节数据

       loop Next

    或者用更简单的写法:

    cld 

    mov CX,100

    rep

    movsb

    段间跳转指令,用于x86实模式下。

    jmp是段内跳转。

     jmpi go,0x0c70

     go:mov ax,cs

    跳到,0x0c70:go处执行

    cld;rep;stosl
    cld设置edi或同esi为递增方向,rep做(%ecx)次重复操作,stosl表示edi每次增加4,这条语句达到按4字节清空

  • 相关阅读:
    hdu 1199 Color the Ball 离散线段树
    poj 2623 Sequence Median 堆的灵活运用
    hdu 2251 Dungeon Master bfs
    HDU 1166 敌兵布阵 线段树
    UVALive 4426 Blast the Enemy! 计算几何求重心
    UVALive 4425 Another Brick in the Wall 暴力
    UVALive 4423 String LD 暴力
    UVALive 4872 Underground Cables 最小生成树
    UVALive 4870 Roller Coaster 01背包
    UVALive 4869 Profits DP
  • 原文地址:https://www.cnblogs.com/kexinxin/p/9939106.html
Copyright © 2011-2022 走看看