汇编串扫描指令传送串匹配串

初始化

源串地址位于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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值