2016-09-17 8 views
-2
.model small 
.stack 
.data 
     msg1 db "Enter string max of 9 characters: $" 
     msg2 db 13,10, "Enter a number: $" 
     msg3 db 13,10, "Midstring: $" 

strNine db "$" 
num db 0,"$" 
mid db "$" 

varName label byte 
maxL db 10 
actL db 0 
actCont db 10 dup("?") 

.code 
     mov ax,@data 
     mov ds,ax 

     ;-------------------- Input String --------------------- 
     mov ah,9 
     lea dx,msg1 
     int 21h 

     mov ah,0ah 
     int 21h 

     mov strNine,al 
     mov bh,strNine 

     ;-------------------- Number --------------------- 
     mov ah,9 
     lea dx,msg2 
     int 21h 

     mov ah,1 
     int 21h 

     mov num,al 
     mov bl,num 

     ;-------------------- Midstring --------------------- 
     mov ah,9 
     lea dx,msg3 
     int 21h 


mov ah,4ch 
int 21h 
END 

アセンブリ言語が初めてのので、中弦を見つける必要があります。アセンブリ言語:プログラムを完成させて中芯を完成させる

予想される動作:

Enter max of 9 String: helloword 
Enter a number: 3 
Midstring: lloword 

先頭のスペース、HおよびEは、ユーザが理由番号入力の削除されなければなりません。

私のしましたが、もらって一部だけは、私は、インデックス

のために使用されているBXメモリに保存されている文字列と番号であるユーザからの入力を取得することです私はいくつかのヒント/ガイドを必要としますプログラムを終了する皆さんから。

+0

SOはガイドを求めるのに適していませんが、http://stackoverflow.com/tags/x86/infoにはドキュメントやガイドへのリンクがたくさんあります。ヒント:使用しているシステムコールのドキュメントを確認してください。 DOSのread-string関数がバッファへのポインタを必要としていることを確かめてください。あなたの現在のプログラムが文字列全体を印刷することさえ疑う。末尾の部分文字列は特殊文字で終わる文字列では些細なことです。開始点へのポインタを渡すだけで、同じ場所で終わります。 –

+0

@PeterCordesありがとうございます。申し訳ありませんがヒントやガイドを求める。今はレジスタや16進コードの使い方を今混乱させるだけです。 –

+0

もしあなたがah = code DOSシステムコールを意味するのであれば、どのシステムコールが何をしているのかに関するdocsのDOS割り込みリストをチェックしてください。真ん中の文字列の問題はポインタの数学です。 –

答えて

1
mov ah,9 
lea dx,msg1 
int 21h 
mov ah,0ah 
int 21h 

どのようにこの入力がすべてで動作することができますか? DOS入力機能を呼び出す瞬間にDXレジスタはmsg1に設定され、varName入力構造体を指すように設定する必要があります。


mov ah,0ah 
int 21h 
mov strNine,al 
mov bh,strNine 

あなたはALが、この時点で保持するレジスタの何を期待していますか?このDOS関数は、そこに有用な値を格納しません!

関連する問題