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