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