当前位置: 代码迷 >> 汇编语言 >> 100分,解一道简单的题,很急解决办法
  详细解决方案

100分,解一道简单的题,很急解决办法

热度:3651   发布时间:2013-02-26 00:00:00.0
100分,解一道简单的题,很急!!!!
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
  相关解决方案