2016-04-12 34 views
0

我寫了一些8086彙編代碼來反轉字符串。我對裝配比較陌生,所以請耐心等待。無法在8086 MASM中反轉字符串

的邏輯是,我定義了一個名爲「STR1」字符串。我將其移入SI註冊。假設字符串'str1'爲「Hello $」,則我將'str1'+ 5的地址加載到SI。現在,我加載一個地址,比如5000進入DI。我將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個字節?我應該用AL代替AX嗎? –

回答

-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