2016-04-12 16 views
0

文字列を反転するために8086アセンブリコードを記述しました。私は組み立てに比較的新しいので、私に負担してください。8086のMASMで文字列を反転できません

ロジックは、 'str1'という文字列を定義することです。これをSIレジスタに移動します。文字列 'str1'が「Hello $」であると仮定した場合、「str1」+ 5のアドレスをSIにロードします。さて、私はアドレスに5000をロードします。 SIからDIに各文字を読み込み、毎回SIをインクリメントし、SIを5ずつ減らします。ここで

は私が場所にアクセスしたとき、私は絶対ゴミ値を取得するコード

assume cs:code,ds:data 
data segment 
str db "Hello$" 
data ends 
code segment 
start: 
mov ax,data 
mov ds,ax 
cld 
mov cx,5h 
mov bx,5h 
lea si,str 
add si,5 
mov di,5000h 
l1:mov bx,[si] 
mov [di],bx 
dec si 
inc di 
loop l1 
hlt 
code ends 
end 

である5000 Plzをヘルプのおかげ

+0

どのように場所5000にあるのかわかりますか? –

+1

文字はそれぞれ1バイトですが、2バイトを処理しています。 PS:デバッガの使い方を学んでください。 – Jester

+0

@Jester 1バイトをどのように処理しますか? AXの代わりにALを使うべきですか? –

答えて

-1

あなたのコードはほとんど良いですが、あなただけの(補助文字列を必要としますそのようなものが許可されている場合):

assume cs:code,ds:data 
data segment 
str db "Hello$" 
aux db "  $"  ;AUXILIARY STRING. 
data ends 
code segment 
start: 
mov ax,data 
mov ds,ax 
cld 
mov cx,5h 
mov bx,5h 
lea si,str 
add si,4    ;0..4 = 5. 
lea di,aux   ;POINT TO AUXILIARY. 
l1:mov bl,[si]  ;YEAH, LET'S USE 
mov [di],bl   ;"BL" INSTEAD OF "BX". 
dec si 
inc di 
loop l1 
hlt 
code ends 
end 
関連する問題