串操作指令2
1. movs
; multi-segment executable file template.data segment ; add your data here! pkey db "press any key...$" str1 db "howbin" str2 db 6 dup(0)endsstack segment dw 128 dup(0)endscode segmentstart:; set segment registers: mov ax, data mov ds, ax mov es, ax ;1 设置源地址寄存器 lea si,str1; ;2 设置目的寄存器 lea di,str2; ;3.设置方向 cld ;std ;4.设置循环次数 mov cx, 6; ;5.重复头 rep movsb; lea dx, str2 mov ah, 9 int 21h ; output string at ds:dx ; wait for any key.... mov ah, 1 int 21h mov ax, 4c00h ; exit to operating system. int 21h endsend start ; set entry point and stop the assembler.
2 stos
; multi-segment executable file template.data segment ; add your data here! pkey db "press any key...$" str1 db 6 dup(0)endsstack segment dw 128 dup(0)endscode segmentstart:; set segment registers: mov ax, data mov ds, ax mov es, ax ; add your code here ;1.选型 stos stosb ;2.设置AL/AL填充物 al 源 mov al,'h'; ;3. 设置目的 lea di, str1 ;4.设置方向 cld ;5.设置次数 mov cx,0 mov cl,6 ;6.设置重复头 rep stosb; lea dx, pkey mov ah, 9 int 21h ; output string at ds:dx ; wait for any key.... mov ah, 1 int 21h mov ax, 4c00h ; exit to operating system. int 21h endsend start ; set entry point and stop the assembler.
3 lods
; multi-segment executable file template.data segment ; add your data here! pkey db "press any key...$" block db -1,-2,-3,0,1,2,3,4 count equ 8 dplus db count dup(0)endsstack segment dw 128 dup(0)endscode segmentstart:; set segment registers: mov ax, data mov ds, ax mov es, ax ; add your code here ;从字符串block中取正数存入字节串dplus中 ;1. 确定取出 lodsb 确定放入 stos ;2. 设置源头 si 目的 di lea si,block lea di,dplus ;3. 设置方向 cld ;4. 设置次数 mov cx,0; mov cl,count; again: lodsb; cmp al,0 jle next; stosbnext: loop again; lea dx, pkey mov ah, 9 int 21h ; output string at ds:dx ; wait for any key.... mov ah, 1 int 21h mov ax, 4c00h ; exit to operating system. int 21h endsend start ; set entry point and stop the assembler.
4 cmps 串比较指令
;比较等长俩个字符串,判断他们是否相等 ; multi-segment executable file template.data segment ; add your data here! pkey db "press any key...$" str1 db "abc" str2 db "abc" result db dub(0);endsstack segment dw 128 dup(0)endscode segmentstart:; set segment registers: mov ax, data mov ds, ax mov es, ax mov result,0 ;1.选择cmps ;2.设置源与目的 lea si,str1; lea di,str2 ;3.设置方向 cld ;4.设置次数 mov cx,0; mov cl,3 ;5.执重复头 repe cmpsb; ;6.判断 jnz next; mov result,1next: lea dx, pkey mov ah, 9 int 21h ; output string at ds:dx ; wait for any key.... mov ah, 1 int 21h mov ax, 4c00h ; exit to operating system. int 21h endsend start ; set entry point and stop the assembler.
5 scas
;从一个字符串中查找一个指定字符 lea di,string mov al, '' ;20h 空格 mov cl, sizeof string cld ;设置方向 repnz scasb jz found ..... found:....enter code here
6 总结
1. 串操作,确定指令 2. 根据串的位置准备ds,es(ds可超越,但是es不可以) 3. 利用了lea,或者 设置offset si,di 4. 利用 sizeof lenghof 设置cx 5. 选择合适的rep 6. 设置不同分支程序(针对repz或者repnz)