无法在8086 MASM中反转字符串

时间:2016-04-12 20:54:34

标签: assembly x86 masm x86-16

我已经编写了一些8086汇编代码来反转一个字符串。我对装配比较新,所以请耐心等待。

逻辑是我定义了一个名为' str1'的字符串。我将其移入 SI 寄存器。假设字符串' str1'是" Hello $" ,然后我将' str1' +5的地址加载到 SI 。现在,我将一个地址加载到 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 help thanks

1 个答案:

答案 0 :(得分:-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