【问题标题】:8086Assembly - Unable to Reverse String8086Assembly - 无法反转字符串
【发布时间】:2016-04-21 04:47:58
【问题描述】:
JMP START
MSG1 DB "ISSK$"
MSG2 DB 80 DUP("$")
START:

MOV SI,00H
MOV DI,00H

LOOPER:          
CMP MSG1[DI],"$"
JE COMPARE
INC DI
JMP LOOPER  ;AFTER THIS POINT DI=STRINGLENGTH-1


COMPARE:
MOV AL,MSG1[DI]
MOV MSG2[SI],AL
INC SI
DEC DI
CMP MSG1[DI],00H
JE OUTER
JMP COMPARE

OUTER:
MOV DX,OFFSET MSG2
MOV AH,09H
INT 21H
HLT

我的 EMULATOR(emu8086) 的控制台最终打印了一个空白屏幕,而不是 Reversed 字符串。我哪里做错了?

【问题讨论】:

    标签: assembly x86-16 microprocessors emu8086


    【解决方案1】:

    当您退出LOOPER 并转到COMPARE 时,DI 包含'$' 终止符的索引,然后您将其放置在MSG2 的开头。在进入COMPARE 循环之前,您应该减少DI,使其包含'K' 的索引。

    那么你得到了CMP MSG1[DI],00H,这没有任何意义。我怀疑你想检查DI == 0。如果是这样,整个部分:

    DEC DI
    CMP MSG1[DI],00H
    JE OUTER
    JMP COMPARE
    

    可以替换为:

    DEC DI
    JNZ COMPARE  ; continue the COMPARE loop as long as DI != 0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-05
      相关资源
      最近更新 更多