2017-08-06 7 views
0

私はこのプロジェクトを2つの文字列を入力してプログラムが識別します。入力された単語の最初、中、最後の文字を取得するアセンブリ言語

その後、最も長い単語の最初、中、最後の文字を識別します。

..私は..、入力された第二の単語が長い場合それを動作させるために管理が、最初は長く、私は真ん中と最後letter..pleaseの助けを得るカントときに感謝:)

私のコード:

.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 
+3

あなたのコードをコメントしてください。あなたのアルゴリズムを説明し、テスト入力と予想される実際の出力を提供してください。デバッガを使用してコードをステップ実行し、自分の間違いを見つける方法を学びます。 – Jester

+0

デバッガは、2番目の単語を読むと面白いことがあります。 –

+0

作業用ケースと非作業用ケースの両方の出力を表示してください。 – prl

答えて

0

両方の場合のコードが間違っています。 1つの理由は、十分なテストを試していないということだけです。中間と最後をロードするコードの+4と+6は両方とも+2でなければなりません。 str1とstr2の使用を再確認してください。それらを使用する前にsiとdiを設定してください。それはあなたにもっと近づくはずです。

P.S.私は意図的にここで完全な答えを与えていない、あなたが学んでいるからです。

関連する問題