8086/8088汇编的程序,要能运行的那种
题目:
实现
1.从键盘上输入一个安符串,如: 'This Is a String '
2.把所有的字母变成小写后输出:this is a string
3.统计出字的个数(英文单词的个数)
4.并换行输出
由于很急,请高手在1个小时内给答,我也会结贴,谢谢了
------解决方案--------------------------------------------------------
在沒有編譯器下用記事本編寫的,能不能運行就看造化了。
============
data segment
buff db 80
db ?
db 80 dup(?)
cnt db 0
data ends
code segment
assume cs:code,ds:data
main:
mov ax,data
mov ds,ax
lea dx,buff
mov ax,0ah ;輸入一個字符串
int 21h
xor bx,bx
mov cx,buff[bx-1]
s: mov al,buff[bx]
cmp al, ' '
jne cmpr
inc cnt
jmp short next
cmpr: cmp al, 'A '
jb next
cmp al, 'Z '
ja next
add al,20h
mov buff[bx],al
next: inc bx
loop s
inc cnt ;確定單詞個數
xor bx,bx
xor dh,dh
mov cx,buff[bx-1]
sprint: mov dl,buff[bx]
cmp dl, ' '
jne step2
call lntr ;調用換行
jmp short step3
step2: mov ah,2
int 21h
step3: inc bx
loop sprint
lntr proc near ;換行
push ax
push dx
mov dl,10
mov ah,2
int 21h
mov dl,13
mov ah,2
int 21h
push dx
push ax
lntr endp
mov ah,4ch
int 21h
code ends
end main
------解决方案--------------------------------------------------------
回宿舍运行了一下,真是惭愧。没有编译器就是不行啊。。。
、、、、、、、、、、、、、重写了下:
-----------------------------------------
data segment
buff db 80
db ?
db 80 dup(?)
cnt db 0
data ends
code segment
assume cs:code,ds:data
main:
mov ax,data
mov ds,ax
lea dx,buff
mov ah,0ah ;输入一个字符串
int 21h
mov bx,offset buff+2
xor ch,ch
mov cl,buff[bx-1]
xor ch,ch
s: mov al,buff[bx]
cmp al, ' '
jne cmpr
inc cnt
jmp short next
cmpr: cmp al, 'A '
jb next
cmp al, 'Z '
ja next
add al,20h
mov buff[bx],al
next: inc bx
loop s
inc cnt ;确定单词个数
call lntr
mov bx,offset buff+2
xor dh,dh
xor ch,ch
mov cl,buff[bx-1]
sprint: mov dl,buff[bx]
cmp dl, ' '
jne step2
call lntr ;调用换行
jmp short step3
step2: mov ah,2
int 21h
step3: inc bx
loop sprint
mov ah,4ch
int 21h
lntr proc near ;换行
push ax
push dx
mov dl,10
mov ah,2
int 21h
mov dl,13
mov ah,2
int 21h
pop dx
pop ax
ret
lntr endp
code ends
end main