zoukankan      html  css  js  c++  java
  • 【汇编】字符串处理指令 stosb、lodsb、movsw、scasb、rep

    一、字符串处理指令

    (1) lodsb、lodsw:把DS:SI指向的存储单元中的数据装入AL或AX,然后根据DF标志增减SI

    (2) stosb、stosw:把AL或AX中的数据装入ES:DI指向的存储单元,然后根据DF标志增减DI

    (3) movsb、movsw:把DS:SI指向的存储单元中的数据装入ES:DI指向的存储单元中,然后根据DF标志分别增减SI和DI

    (4) scasb、scasw:把AL或AX中的数据与ES:DI指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI

    (5) cmpsb、cmpsw:把DS:SI指向的存储单元中的数据与ES:DI指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI

    (6) rep:重复其后的串操作指令。重复前先判断CX是否为0,为0就结束重复,否则CX减1,重复其后的串操作指令。主要用在MOVS和STOS前。一般不用在LODS前。

    上述指令涉及的寄存器:段寄存器DS和ES、变址寄存器SI和DI、累加器AX、计数器CX
               涉及的标志位:DF、AF、CF、OF、PF、SF、ZF

    二、使用举例

    (1) 把当前数据段中偏移1000H开始的100个字节的数据传送到从偏移2000H开始的单元中

    复制代码
          CLD
          PUSH    DS
          POP     ES
          MOV     SI,1000H
          MOV     DI,2000H
          MOV     CX,100
    NEXT: LODSB
          STOSB
          DEC     CX
          JNZ     NEXT
    复制代码
    复制代码
          CLD
          PUSH    DS
          POP     ES
          MOV     SI,1000H
          MOV     DI,2000H
          MOV     CX,100
    NEXT: MOVSB
          DEC     CX
          JNZ     NEXT
    复制代码
    复制代码
          CLD
          PUSH    DS
          POP     ES
          MOV     SI,1000H
          MOV     DI,2000H
          MOV     CX,3
    NEXT: MOVSB
          LOOP    NEXT
    复制代码
    复制代码
          CLD
          PUSH    DS
          POP     ES
          MOV     SI,1000H
          MOV     DI,2000H
          MOV     CX,3
          REP     MOVSB
    复制代码

    (2) 判断AL中的数字是否为16进制数

    复制代码
    STRING  DB '0123456789ABCDEFabcdef'
    STRLEN  EQU $-STRING
          ...
          CLD
          MOV     DX,SEG STRING
          MOV     ES,DX
          MOV     CX,STRLEN
          MOV     DI,OFFSET STRING
    NEXT: SCASB
          LOOPNZ  NEXT
          JNZ     NOT_FOUND
    FOUND:
          ...
    NOT_FOUND:
          ...
    复制代码

    (3) 其它实例

    复制代码
    start:
        mov    ax,#BOOTSEG
        mov    ds,ax
        mov    ax,#INITSEG
        mov    es,ax
        mov    cx,#256
        sub    si,si
        sub    di,di
        rep
        movw
    复制代码
    复制代码
        movl $1024*5,%ecx 
        xorl %eax,%eax
        xorl %edi,%edi   
        cld;rep;stosl
        movl $pg0+7,_pg_dir 
        movl $pg1+7,_pg_dir+4
        movl $pg2+7,_pg_dir+8  
        movl $pg3+7,_pg_dir+12 
        movl $pg3+4092,%edi
        movl $0xfff007,%eax 
        std
    1:  stosl            
        subl $0x1000,%eax
        jge 1b
    复制代码

     

  • 相关阅读:
    成功更容易光顾磨难和艰辛,正如只有经过泥泞的道路才会留下脚印
    只要信心在,勇气就在,努力在,成功就在!
    不积跬步无以至千里,不积小流无以成江海
    你给自己留的退路越多,你失败的可能性就越大
    不要质疑你的付出,这些都会是一种累积一种沉淀,它们会默默铺路,只为让你成为更优秀的人
    生活的一大乐趣便是完成别人认为你不能做到的事情
    优于别人,并不高贵,真正的高贵,是优于过去的自己
    再长的路 ,一步步也能走完,再短的路,不迈开双脚也不无法到达!
    09SpringAopAdvice
    java中接口(interface)和虚基类(abstract class)的区别
  • 原文地址:https://www.cnblogs.com/vinozly/p/6068444.html
Copyright © 2011-2022 走看看