汇编实验三:分类统计字符个数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、实验目的
学习用汇编语言编写设计分支循环程序
二、实验要求
程序接收用户键入的一行字符(字符个数不超过80个,该字符串用回车符结束),并按字母、数字及其它字符分类计数,然后将结果存入以letter、digit和other为名的存储单元中。
三、实验提示
(1)程序可0AH功能调用把键入字符直接送到缓冲区中,然后再逐个取出分类计数。也可01H功能调用在接收字符后先分类计数再存入缓冲区中。
(2)程序需要进入debug运行并查看计数结果。
四、实验程序
datarea segment
string db 80
db ?
db 80 dup(?);定义字符串string,长度为80
letter db 0 ;定义存储单元letter
digit db 0 ;定义存储单元digit
other db 0 ;定义存储单元other
datarea ends
case segment
main proc far
assume cs:case, ds:datarea
start:
mov ax, datarea
mov ds, ax
lea dx, string
mov ah, 0ah
int 21h
lea di, string + 2 ;输入一行字符,依次将每个字符存入字符串string中
sub ch,ch
mov cl, string + 1
add dx, 2
check: ;将每个字符进行分类
mov al, [di]
cmp al, 0dh
je exit ;字符串以回车符结束,若进行分类的字符是回车符,则跳转至exit,退出程序
cmp al, 30h ;与ASCII码中的0,即30h比较
jb o ;小于30h的,为其他类型字符,则跳转至o,在other块进行操作
cmp al, 39h ;与ASCII码中的9,即39h比较
jna d ;不大于39h的,结合不小于30h的,则跳转至d,在digit块进行操作
ja loro ;剩下的为字母或者其他类型
loro:
cmp al, 41h ;与ASCII码中的A,即41h比较
jb o ;小于41h的,结合大于39h的,则跳转至o,在other块进行操作
cmp al, 7ah ;与ASCII码中的z,即7ah比较
ja o ;大于7ah的,则条钻至o,在other块进行操作
cmp al, 5ah ;与ASCII码中的Z,即5ah比较
jna l ;不大于5ah的,结合大于41h的,则跳转至l,在letter块进行操作
cmp al, 61h ;与ASCII码中的a,即61h比较
jnb l ;不小于61h的,结合不大于7ah的,则跳转至l,在letter块进行操作
jb o ;小于61h的,结合大于5ah的,则跳转至o,在other块进行操作
l:
inc letter ;属于letter类型,则letter增1
inc di
jmp check ;返回继续比较下一个字符
d:
inc digit ;属于digit类型,则digit增1
inc di
jmp check
o:
inc other ;属于other类型,则other增1
inc di
jmp check
exit: ;输出letter,digit,other类型的计数结果
mov ah, 02
mov dl, 0dh
int 21h
mov dl, 0ah
int 21h
mov dl, 4ch
int 21h
mov dl, 3ah
int 21h
mov dl, 0
int 21h
xor ax, ax
call display ;调用子程序display,输出
mov ah, 02
mov dl, 0dh
int 21h
mov dl, 0ah
int 21h
mov dl, 44h
int 21h
mov dl, 3ah
int 21h
mov dl, 0
int 21h
xor ax, ax
mov al, digit
call display
mov ah, 02
mov dl, 0dh
int 21h
mov dl, 0ah
int 21h
mov dl, 4fh
int 21h
mov dl, 3ah
int 21h
mov dl, 0
int 21h
xor ax, ax
mov al, other
call display
mov ax, 4c00h
int 21h
main endp
display proc near ;子程序display,用于将二进制数转换成十进制数mov bl, 10
div bl
push ax
mov dl, al
add dl, 30h
mov ah, 2
int 21h
pop ax