32位微处理器指令系统之字符串操作指令

1.字符串传送指令

指令格式:

① MOVS OPD,OPS

② MOVSB

③ MOVSW

④ MOVSD

例:在内存中,一个英文字母表存放在数据段DS,编写程序使之移动到附加数据段ES,并将移动到附加数据段的英文字母显示出来。

data segment ;数据段,提供源串。
src db 'abcdefghijklmnopqrstuvwxyz$'
data ends
edata segment ;附加数据段,提供目的地址。
dest db 27 dup(?)
edata ends
code segment ’code’
assume cs:code,ds:data,es:edata
start: mov ax,data
mov ds,ax
mov ax,edata
mov es,ax
cld ;设置传送方向
mov cx,27 ;设置重复次数
lea si,src
lea di,dest
rep movsb ;重复传送
mov ah,9 ;利用9号中断显示目的串内容
lea dx,dest ;变量名dest的偏移地址→dx
int 21h
mov ah,2 ; 利用2号中断显示回车换行
mov dl,0dh 0dh 回车:
int 21h
mov dl,0ah 0ah 换行:
int 21h
mov ah,4ch

int 21h
code ends
end start

2.字符串比较指令

指令格式:

① CMP OPD,OPS

② CMPSB ;字节串比较

③ CMPSW ;字串比较

④ CMPSD ;双字串比较

3. 字符串搜索指令

指令格式:

① SCAS OPD

② SCASB ;字节串搜索

③ SCASW ;字串搜索

④ SCASD ;双字串搜索

4. 字符串装入指令

指令格式:

① LODS OPS

② LODSB ;从源地址中取字节串

③ LODSW ;从源地址中取字串

④ LODSD ;从源地址中取双字串

5. 字符串存储指令

指令格式:

① STOS OPD

② STOSB ;向目的地址中存字节串

③ STOSW ;向目的地址中存字串

④ STOSD ;向目的地址中存双字串

例:下面的程序是将字符串“Readme”从以SOUR为首地

址的内存单元传送到以DEST为首地址的内存单元。具体作法是用LODS

指令每次从SOUR串中取出一个字符到AL再用STOS指令每次将AL的

值存入目的串DEST中,直到传送完毕。

 Data segment
sour db 'readme'
n=$-sour
dest db 6dup(0)
data ends
code segment 'code'
assume cs:code,ds:data,es:data
start:mov ax,data
mov ds,ax
mov es,ax
mov cx,n
lea si,sour ;源串首地址的偏移地址→si
lea di,dest ;目的串首地址的偏移地址→di
cld ;置df=0,增址传送

cycle:lodsb ;从源串取出一个字符到al
stosb ;将al的值存入目的串
loop cycle ;cx←cx-1,如果cx不等于0则转移到cycle
mov ah,4ch
int 21h
code ends
end start


分享到:


相關文章: