【彙編】字符串處理指令 stosb、lodsb、movsw、scasb、rep

1、字符串處理指令spa

(1) lodsb、lodsw:把DS:SI指向的存儲單元中的數據裝入AL或AX,而後根據DF標誌增減SIcode

(2) stosb、stosw:把AL或AX中的數據裝入ES:DI指向的存儲單元,而後根據DF標誌增減DIblog

(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和DIit

(6) rep:重複其後的串操做指令。重複前先判斷CX是否爲0,爲0就結束重複,不然CX減1,重複其後的串操做指令。主要用在MOVS和STOS前。通常不用在LODS前。class

上述指令涉及的寄存器:段寄存器DS和ES、變址寄存器SI和DI、累加器AX、計數器CX
           涉及的標誌位:DF、AF、CF、OF、PF、SF、ZFim

 

2、使用舉例數據

(1) 把當前數據段中偏移1000H開始的100個字節的數據傳送到從偏移2000H開始的單元中img

複製代碼
      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
複製代碼
相關文章
相關標籤/搜索