アセンブリコードを作成しようとしましたが、文字列を要求し、文字列が印刷される場所から開始し、印刷する長さを指定します。 開始と長さが常に有効であると仮定開始と長さの決定を手伝ってもらえますか?開始と長さのアセンブリ言語を使用した文字列の印刷
それがどのように動作するかを:
Enter String: Hello World
Enter Start: 3
Enter Length: 5
Mid-String: llo W
だから私は、文字列の開始と長さを決定する方法についての問題を抱えています。
.model small
.stack
.data
msg1 db "Enter String:$"
msg2 db 13,10,"Enter Start:$"
msg3 db 13,10,"Enter Length:$"
msg4 db 13,10,"Mid-String:$"
nwln db 13,10
mySample label byte
maxlen db 10
actlen db 0
string db 19 dup (?)
.code
mov ax,@data
mov ds,ax
lea dx, msg1 ;print msg1
mov ah,9
int 21h
lea dx,mySample ;accept string
mov ah,0Ah
int 21h
mov bh,0
mov bl,maxlen
mov string[bx],'$'
mov ah,9
lea dx,string ;print string accept
int 21h
lea dx, msg2 ;print msg2 and accept start
mov ah,9
int 21h
mov ah,1
int 21h
sub al,30h
mov bh,0
mov bl,al
lea dx, msg3 ;print msg3 and accept length
mov ah,9
int 21h
mov ah,1
int 21h
sub al,30h
mov dl,al
;mov maxlen,dl
mov bh,0
mov bl,maxlen
mov string[bx],'$'
lea dx,msg4 ;print msg4
mov ah,9
int 21h
lea dx,string ;print mid-string
int 21h
mov ah,4ch
int 21h
END
OUTPUTは次のようになります:私は以下の私のコードに示されているいくつかのことを試してみました、あなたが実際に行う最後のいくつかの指示、で簡単に見に基づいて
これをデバッガでシングルステップ実行すると、読み込んだ数値は実際に期待通りにレジスタに格納されますか?最後の 'int 21h'の前にレジスタの値がありますか?そうでない場合は、逆方向に作業して、物事が最初に期待したように動作しなくなった場所を見つけてください。 –
Chouny、あなたの質問に新しい答えがあります。 –