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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档