2014-01-03
展开全部
同学我帮你完成了你的程序,编译通过,可 1、从键盘输入一个字符串(串长度小于100个字符),统计其串的长度后输出该串,需要说明的是最后输出的字符串长度是十六进制的,不过这个关系不大。呵呵
;加点分哈~~~~~~~~~~~~~~~~~~~~~~~~~~~
;-----------------------------------------------------------------
;-------------------------------
;宏定义
display MACRO string
mov ah,09h
lea dx,string
int 21h
ENDM
;-------------------------------
;********************************数据段
data segment
array db 100 dup(0) ;数组开辟空间
string1 db "Please input a string ended with ENTER: $" ;字符串以$结束
string2 db "The length of the string = $"
string3 db "The string you inputed is: $"
crlf db 13,10,13,10,"$" ;13回车,10换行
data ends
;**********************************
;**********************************代码段
code segment
assume ds:data,cs:code ;段对应关系的说明
main proc far ;far子程序调用时的参数
;-----------------------------------------
start:
push ds
sub ax,ax ;清零
push ax ;压栈
mov ax,data ;将数据传送入数据段
mov ds,ax
;---------------------------------------
;主程序开始
;---------------------------------------------------------
;显示"Please input a string ended with ENTER: $"的内容
display string1
;----------------------------------------------------------
;键盘输入字符串以回车键结束
mov bx,offset array ;设定基址
mov di,0
input:
mov ah,01h
int 21h
cmp al,20h ;比对空格键不能输入空格
je input
cmp al,0dh ;和'回车键'进行比较
je next
mov [bx+di],al ;存储输入字符
inc di
mov cx,di ;用cx保存di值
cmp di,64h
jbe input
;-----------------------------------------------
;输出字符串的长度
next:
display crlf
display string2
mov ax,cx
mov bl,10h
div bl ;除以10
mov bh,ah ;将余数暂存起来
add al,30h
mov dl,al ;商
mov ah,02h
int 21h
add bh,30h
mov dl,bh ;余数
mov ah,02h
int 21h ;说明:最后结果两位数是十六进制的
mov dl,'H'
mov ah,02h
int 21h
;-------------------------------------------
;输出字符串
display crlf
display string3
mov bx,offset array ;设定基址
mov si,0
again:
mov al,[bx+si]
mov dl,al
mov ah,02h
int 21h
inc si
cmp si,cx
jbe again
ret
main endp ;主函数结束
;********************************************
code ends ;代码段定义结束
end start ;这个程序段全部结束
;加点分哈~~~~~~~~~~~~~~~~~~~~~~~~~~~
;-----------------------------------------------------------------
;-------------------------------
;宏定义
display MACRO string
mov ah,09h
lea dx,string
int 21h
ENDM
;-------------------------------
;********************************数据段
data segment
array db 100 dup(0) ;数组开辟空间
string1 db "Please input a string ended with ENTER: $" ;字符串以$结束
string2 db "The length of the string = $"
string3 db "The string you inputed is: $"
crlf db 13,10,13,10,"$" ;13回车,10换行
data ends
;**********************************
;**********************************代码段
code segment
assume ds:data,cs:code ;段对应关系的说明
main proc far ;far子程序调用时的参数
;-----------------------------------------
start:
push ds
sub ax,ax ;清零
push ax ;压栈
mov ax,data ;将数据传送入数据段
mov ds,ax
;---------------------------------------
;主程序开始
;---------------------------------------------------------
;显示"Please input a string ended with ENTER: $"的内容
display string1
;----------------------------------------------------------
;键盘输入字符串以回车键结束
mov bx,offset array ;设定基址
mov di,0
input:
mov ah,01h
int 21h
cmp al,20h ;比对空格键不能输入空格
je input
cmp al,0dh ;和'回车键'进行比较
je next
mov [bx+di],al ;存储输入字符
inc di
mov cx,di ;用cx保存di值
cmp di,64h
jbe input
;-----------------------------------------------
;输出字符串的长度
next:
display crlf
display string2
mov ax,cx
mov bl,10h
div bl ;除以10
mov bh,ah ;将余数暂存起来
add al,30h
mov dl,al ;商
mov ah,02h
int 21h
add bh,30h
mov dl,bh ;余数
mov ah,02h
int 21h ;说明:最后结果两位数是十六进制的
mov dl,'H'
mov ah,02h
int 21h
;-------------------------------------------
;输出字符串
display crlf
display string3
mov bx,offset array ;设定基址
mov si,0
again:
mov al,[bx+si]
mov dl,al
mov ah,02h
int 21h
inc si
cmp si,cx
jbe again
ret
main endp ;主函数结束
;********************************************
code ends ;代码段定义结束
end start ;这个程序段全部结束
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询