搜索
您的当前位置:首页正文

汇编实验三:分类统计字符个数

来源:赴品旅游


一、实验目的

学习用汇编语言编写设计分支循环程序

二、实验要求

程序接收用户键入的一行字符(字符个数不超过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

1

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

1

mov al, letter

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

1

mov dl, ah add dl, 30h mov ah, 2 int 21h ret display endp

case ends end start

五、调试结果

1

因篇幅问题不能全部显示,请点此查看更多更全内容

Top