汇编串扫描指令传送串匹配串
Posted Afololer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编串扫描指令传送串匹配串相关的知识,希望对你有一定的参考价值。
初始化
源串地址位于DS:SI,目的串地址位于ES:DI
CLD则DF为0,正向扫描,STD则DF为1,反向扫描
CX,扫描的个数
常用指令
REP+MOVSB(字节传送)/MOVSW(字传送)
例子:把ds中的s1传送到es的s2
DATAS SEGMENT
;此处输入数据段代码
s1 DB "happy"
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
s2 db 5 dup(?)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,ES:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV AX,STACKS
MOV ES,AX
mov cx,5
lea si,s1
lea di,s2
cld
rep movsb
mov cx,5
mov si,0
L1:
mov dl,s2[si]
inc si
mov ah,2
int 21H
LOOP L1
;此处输入代码段代码
MOV AH,4CH
INT 21H
CODES ENDS
END START
REPE 当相等时继续操作
CMPSB 当两个字符不相等时停止扫描,并且DI、SI加1
例题 找出两个串第几个字母开始不相同
DATAS SEGMENT
;此处输入数据段代码
S1 db 'happy'
DATAS ENDS
STACKS SEGMENT
s2 db 'hapqy'
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,eS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV AX,stackS
MOV ES,AX
lea si,S1
lea di,s2
mov cx,5
repe cmpsb
lea bx,s1
SUB si,bx
MOV DX,si
add dx,30H ;因为是个位数,直接加
mov ah,2
int 21H
;此处输入代码段代码
MOV AH,4CH
INT 21H
CODES ENDS
END START
SCAS AL中指定匹配字符,在ES段扫描,找到匹配字符后DI+1
DATAS SEGMENT
;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
s2 db 'hapqy'
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,eS:STACKS
START:
MOV AX,stackS
MOV ES,AX
mov al,'q'
lea di,s2
mov cx,50
cld
repne scasb
lea bx,s2
SUB di,bx
MOV DX,di
add dx,30H ;因为是个位数,直接加
mov ah,2
int 21H
;此处输入代码段代码
MOV AH,4CH
INT 21H
CODES ENDS
END START
以上是关于汇编串扫描指令传送串匹配串的主要内容,如果未能解决你的问题,请参考以下文章