【问题标题】:Unable to reverse string in 8086 MASM无法在 8086 MASM 中反转字符串
【发布时间】:2016-04-12 20:54:33
【问题描述】:

我编写了一些 8086 汇编代码来反转字符串。我对组装比较陌生,所以请多多包涵。

逻辑是我定义了一个名为“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 时,我得到一个绝对垃圾值。请帮助谢谢

【问题讨论】:

  • 你怎么知道位置 5000 有什么?
  • 每个字符为 1 个字节,但您正在处理 2 个字节。 PS:学习使用调试器。
  • @Jester 我如何处理 1 个字节?那我应该用 AL 代替 AX 吗?
  • 你甚至不使用AX,你使用的是BX。是的,你应该使用BL(例如)。
  • 我想知道您是否自己进行过任何类型的搜索或研究。此问题在过去两天内至少发布了五次。

标签: assembly x86 masm x86-16


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-15
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多