不明白汇编程序的输出

时间:2016-12-28 13:08:22

标签: assembly emu8086

这是8086的示例汇编语言代码,用于以相反的顺序打印字符串

.model small
.STACK 100H
.DATA
MSG DB 'HELLO!$'

.CODE
MOV CL,0

 AGAIN:
 MOV DL,DS:[SI]
; MOV AH,2
; INT 21H
 INC CL
 INC SI
 CMP DL,'$'
 JNE AGAIN
 DEC SI
 DEC CL

 REV:
   DEC SI
   MOV DL,DS:[SI]
   MOV AH,2
   INT 21H
   DEC CL
   CMP CL,0
   JNE REV

 .EXIT
  END

它的输出是!OLLEH。但如果我写

  MOV AH,2
  INT 21H

在低于MOV DL的AGAIN级别,DS:[SI]。我认为答案应该是HELLO !! OLLEH,但它显示了' ='字符和以前的输出。为什么会这样?

1 个答案:

答案 0 :(得分:1)

  

我认为答案应该是HELLO !! OLLEH

校正。由于您在使用DOS功能02h输出 后仅检查“$”字符,屏幕应显示:

function DoSomething(DirectoryEntry de){
    // Do some work here against the directory entry
    if (de.Children != null) {
        foreach (DirectoryEntry child in de.Children) {
            using (child) {
                DoSomething(child);
            }
        }
    }
}

只有DOS函数09h才能写出“$”字符。

由于emu8086以某种默认方式初始化寄存器,因此可以获得半正确的结果,但最好在使用之前手动设置寄存器:

HELLO!$!OLLEH