![]() | 第5章 子程序和串处理 | -103- | |||||||||||||||||||
② 本功能解释诸如0DH、0AH这样的控制码。 我想这两个有别于其它功能的特征就可以算是TTY方式的定义吧。它还有其它特性,我们将在下一章中学到。 通过这个程序我们应该对串处理指令有了一些很初步的认识: |
|||||||||||||||||||||
事实上还有第五点:串处理指令往往有"指令前缀"且和CX寄存器也有密切关系,下面就会讲到这一点。 解决了字符串的输入与输出,现在来考虑这样一个问题:如何在一个字符串中查找一个给定的字符?下面给出了一般的解决方法: SEARCH.ASM |
|||||||||||||||||||||
data mess ascii errmsg data code main outchar: out_cx: outloop: |
segment assume db db db ends segment assume proc mov mov mov mov mov cmp jz cmp jz inc inc jmp mov mov mov rol rol rol |
ds:data 'Price: $1.00',0dh,0ah,0 '0123456789ABCDEF' 07h,'Character not found! cs:code far ax,data ds,ax si,offset mess cx,0 al,byte ptr [si] al,'$' out_cx al,0 not_fd cx si outchar ax,cx bx,offset ascii cx,4 ax,1 ax,1 ax,1 |
;定义一个含有'$'的字符串 ;十六进制数字对应的ASCII码 ',0dh,0ah,'$' ;初始化DS寄存器指向数据段 ;SI寄存器指向字符串MESS ;CX寄存器清0,准备计字符数 ;取一个字符送入AL寄存器 ;是所要找的'$'符吗? ;若是则转OUT_CX输出CX的计数值 ;到字符串结尾了吗? ;显示出错信息并退出 ;CX寄存器加1 ;SI寄存器指向下一个字符 ;判断下一个字符 ;CX寄存器存入AX寄存器 ;BX寄存器指向ASCII表 ;处理4个数位 ;循环左移4位,高4位移至低4位 |
||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |