汇编语言获取输入单词的第一个,中间和最后一个字母

时间:2017-08-06 10:05:48

标签: assembly x86 dos

我正在制作这个项目,用户将输入两个字符串,程序将识别哪个更长。

之后,它将识别最长单词的第一个,中间和最后一个字母。

如果输入的第二个单词更长,我只能设法使它工作...但是当第一个单词更长时我不能得到中间和最后一个字母..请帮助..谢谢:)

我的代码:

    .data
msg db "Enter 1st word: $"
msg1 db 13,10,"Enter 2nd word: $"
msg2 db "1st word is longer $"
msg3 db "2nd word is longer $"
msg4 db "1st letter is: $"
msg5 db "middle letter is $"
msg6 db "last letter is $"
ln db 13,10,10,"$"
str1 dw 20 
str2 dw 20
x db '0'

.code
main:
mov ax, @data
mov ds, ax

lea si, str1
lea di, str2

mov ah, 09
mov dx, offset msg
int 21h

mov ah, 0ah
mov dx, si
int 21h

mov ah, 09
mov dx, offset msg1
int 21h

mov ah, 0ah
mov dx, di
int 21h


;counter 1st word
mov bx, 0h
mov bx, str1 + 1
mov cl,bl
;counter 2nd word
mov bx, 0h
mov bx, str2 + 1
mov al, bl

cmp cl, al
jg long
jl short

long:

mov ah, 09
mov dx, offset ln
int 21h



mov ah, 09
mov dx, offset ln
int 21h

mov ah, 09
mov dx, offset msg2
int 21h
;first letter
mov ah, 09
mov dx, offset ln
int 21h

mov ah, 09
mov dx, offset msg4
int 21h

mov ah, 02
mov dl, si+2
int 21h

;/////////////////

;middle:
mov ah, 09
mov dx, offset ln
int 21h

mov ah, 09
mov dx, offset msg5
int 21h


mov bx, 0
mov bx, str1+1


mov ah, 0h
mov al, bl
mov bl, 02
div bl

mov ah, 0h
mov si, ax


mov bx,str1[si+4]
mov al,bl

mov ah, 02
mov dl, al
int 21h

;last
mov ah, 09
mov dx, offset ln
int 21h

mov ah, 09
mov dx, offset msg6
int 21h

mov bx, 0
mov bx, str1 + 1

mov bx, str1[si+6]
mov al, bl

mov ah, 02
mov dl,al
int 21h




jmp exit


short:

mov ah, 09
mov dx, offset ln
int 21h

mov ah, 09
mov dx, offset msg3
int 21h

mov ah, 09
mov dx, offset ln
int 21h
;first letter        
mov ah, 09
mov dx, offset msg4
int 21h

mov ah, 02
mov dl, di+2
int 21h
;/////////////////////// 

;middle:
mov ah, 09
mov dx, offset ln
int 21h

mov ah, 09
mov dx, offset msg5
int 21h


mov bx, 0
mov bx, str2+1


mov ah, 0h
mov al, bl
mov bl, 02
div bl

mov ah, 0h
mov di, ax


mov bx,str1[di+4]
mov al,bl

mov ah, 02
mov dl, al
int 21h

;last
mov ah, 09
mov dx, offset ln
int 21h

mov ah, 09
mov dx, offset msg6
int 21h

mov bx, 0
mov bx, str2 + 1

mov bx, str1[di+6]
mov al, bl

mov ah, 02
mov dl,al
int 21h




jmp exit

exit:
end main

1 个答案:

答案 0 :(得分:0)

两种情况的代码都是错误的。一个案例似乎有效的唯一原因是你没有尝试过足够的测试。加载中间和最后的代码中的+4和+6都应该是+2。仔细检查str1和str2的用法。在使用之前设置si和di。这应该让你更接近。

P.S。我故意不在这里给出完整的答案,因为你正在努力学习。