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

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

相关文档
最新文档