[汇编]字符的存储方式理解实现字符ASCII查询
然而,在进行编程的前缚聘遥堆夕,我们需要了解所涉及的知识:1、在汇编程序中,我们要定义输入自定义的字符,一般都讵畿缤耒会在段定义中定义DB类(或DW)的一段内存单元来预留需存放的字符。其中,定义用到DB,那么限定我们使用的寄存器也需8位2、程序中,需要用到DOS系统功能调用,这里只提用到的3个,若深入学习,请自行查询资料。(1) 单字符输入(功能调用号AH=01H),使用实例:
mov ah,01H+=L^h9Fint 21H
cEPqcy *(2) 单字符输入(功能调用号AH=02H),使用实例:H|d"45J_
其中DIY为段定义中定义的变量>a8'MKF^wm&:%{`mov dl,OFFSET DIY0{47TX*YXmov ah,02H@$|bMH*1:int 21Hj@jUuYuDgl@aWd0e]或者h`MTB!olea dx,DIYv==/tr)mov ah,02H(5=B^9{Rint 21H
P?`a{sl.(3) 字符串输出(功能调用号AH=09H),使用实例:yRldPk_
data segmentz7O$o/E-*DIY db 'Hellow World! $' ;字符串需要$结束lD1m<ACdata segment/,^AG2]( fN?mQ50o~Cmov dl,OFFSET DIYS,qEKWyLdmov ah,09Hp']oy;tint 21H
YyD0g9{Ou2p^:C(3、字符在寄存器中,是以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
复制代码
assume cs:code,ds:data
data segment
SGWORD DB 8
TIP1 DB 'Please any key,then entering to continue:$'
TIP2 DB '',0AH,0DH,'The ASCII of this word is:$'
data ends
code segment
start:
mov ax,data
mov ds,ax
mov dl,OFFSET TIP1 ;Print the TIP1
mov ah,09H
int 21H
mov ah,01H ;Enter a single word
int 21H
mov cl,al ;Saving the ASCII of word
mov dl,OFFSET TIP2 ;Print the TIP2
mov ah,09H
int 21H
ASCII_P:
mov al,cl
mov dl,16 ;m%d
div dl
mov cl,ah ;The AH saves Latter of ASCII
and al,0FH ;The AL saves Pri of ASCII
mov dl,al
or dl,30H
mov ah,02H
int 21H
ASCII_L:
mov dl,cl
or dl,30H
cmp dl,3AH
jb NOADD
add dl,07H
NOADD:
mov ah,02H
int 21H
mov ah,4CH
int 21H
code ends
END start