-108- | PC机汇编语言实战精解 | ![]() |
|||||||||||||||||||
main code |
int endp ends end |
21h main |
|||||||||||||||||||
这个程序首先在给定字符串中寻找子串的第一个字符,找到后将后面的字符与子串进行比较,若后面的字符均相同则输出首字符的偏移量;否则继续在剩余的字符中寻找。找到第一个子串后程序并未结束,而是继续在源字符串中搜索,直至整个字符串全部搜索完毕。不难看出这个程序的结构不很理想,我们用了许多的转移指令,使程序的流程显得比较混乱。那么用串处理指令能否使程序得以简化呢?请看下面的程序: SCHSTR1.ASM |
|||||||||||||||||||||
data string substrg ascii data code main next_char: out_di: outloop: |
segment assume db'The sa db'sunshi db'012345 ends segment assume proc mov mov mov mov cmp jz push mov mov repz pop jcxz inc jmp mov sub mov mov rol rol rol rol push and xlat |
ds:data me sunshine is presente ne' 6789ABCDEF' cs:code far ax,data ds,ax es,ax di,offset string byte ptr [di],0 exit di si,offset substrg cx,8 cmpsb di out_di di next_char ax,di ax,offset string bx,offset ascii cx,4 ax,1 ax,1 ax,1 ax,1 ax ax,000fh |
d to all those who love sunshine',0 ;初始化DS、ES寄存器指向数据段 ;DI寄存器指向源字符串 ;DI寄存器指向源字符串末尾了吗? ;若DI寄存器已指向末尾则结束程序 ;暂存DI寄存器 ;SI寄存器指向待查字符串 ;比较8个字符 ;将待查字符串与DI指向的8个字符相比 ;恢复DI寄存器 ;若8个字符均相同则输出DI寄存器的指针 ;DI寄存器指向下一个字符 ;转NEXT_CHAR继续比较 ;DI寄存器中的指针送入AX寄存器 ;计算待查字符串在源串中的偏移位置 ;BX寄存器指向ASCII表 ;输出4个数位 ;AL寄存器循环左移4位 ;暂存AX寄存器 ;保留AX寄存器的低4位 ;取得对应的ASCII码 |
||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |