然而,在进行编程的前缚聘遥堆夕,我们需要了解所涉及的知识:在汇编程序中,我们要定义输入自定义的字符,一般都讵畿缤耒会在段定义中定义DB类(或DW)的一段内存单元来预留需存放的字符。其中,定义用到DB,那么限定我们使用的寄存器也需8位程序中,需要用到DOS系统功能调用,这里只提用到的3个,若深入学习,请自行查询资料。(1)单字符输入(功能调用号AH=01H),使用实例:
movah,01H+=L^h9Fint21H
cEPqcy*(2)单字符输入(功能调用号AH=02H),使用实例:H|d"45J_
其中DIY为段定义中定义的变量>a8'MKF^wm&:%{`movdl,OFFSETDIY0{47TX*YXmovah,02H@$|bMH*1:int21Hj@jUuYuDgl@aWd0e]或者h`MTB!oleadx,DIYv==/tr)movah,02H(5=B^9{Rint21H
P?`a{sl.(3)字符串输出(功能调用号AH=09H),使用实例:yRldPk_
datasegmentz7O$o/E-*DIYdb'HellowWorld!$';字符串需要$结束lD1m<ACdatasegment/,^AG2]( fN?mQ50o~Cmovdl,OFFSETDIYS,qEKWyLdmovah,09Hp']oy;tint21H
YyD0g9{Ou2p^:C(字符在寄存器中,是以16进制的ASCII存放的。,uCgC4EP3|1v)Eyz^Rm2$f9在本程序中,我们使用DIY的除法方式,来拆分ASCII的十位和个位,商为十位存放于AL中,余数为个位存放于AH中。且得到的商和余数都为16H进制数。a/lTQj]AC\gKJW^]y@例:a-->73H-->07H和03H,其中07H与03H为ASCII值,在ASCII表中对应的值不相符或者不存在。Amj'$G|+hjOx&]{通过了解基本所涉及的知识,我们通过分析程序来体验学习:Ws:MbZyrvW`[CEm^X
复制代码
assumecs:code,ds:data
datasegment
SGWORDDB8
TIP1DB'Pleaseanykey,thenenteringtocontinue:$'
TIP2DB'',0AH,0DH,'TheASCIIofthiswordis:$'
dataends
codesegment
start:
movax,data
movds,ax
movdl,OFFSETTIP1;PrinttheTIP1
movah,09H
int21H
movah,01H;Enterasingleword
int21H
movcl,al;SavingtheASCIIofword
movdl,OFFSETTIP2;PrinttheTIP2
movah,09H
int21H
ASCII_P:
moval,cl
movdl,16;m%d
divdl
movcl,ah;TheAHsavesLatterofASCII
andal,0FH;TheALsavesPriofASCII
movdl,al
ordl,30H
movah,02H
int21H
ASCII_L:
movdl,cl
ordl,30H
cmpdl,3AH
jbNOADD
adddl,07H
NOADD:
movah,02H
int21H
movah,4CH
int21H
codeends
ENDstart