从书中复制 8086 代码后出现错误

Getting error after copying 8086 code from book

我遇到了麻烦 运行这个 8086 程序从键盘输入一个字母并输出“你输入的字母是 _”

我刚开始阅读有关这方面的大学书籍,并尝试 运行 在我的计算机上使用书中的一些代码,但卡在了这里。

下面的代码来自我的大学课本。 我正在 运行在 emu8086 模拟器中安装它。

CODE SEGMENT
            ; set the DS register
MOV AX, DATA
MOV DS, AX
            ; Read Keyboard
MOV AH, 08H
INT 21H
            ; Save input
MOV BL, AL
            ; Display first part of Message
MOV AH, 09H
MOV DX, OFFSET MESSAGE
INT 21H
            ; Display character of BL register
MOV AH, 02H
MOV DL, BL
INT 21H
            ; Exit to DOS
MOV AX, 4C00H
INT 21H

CODE ENDS
DATA SEGMENT
     MESSAGE DB “The letter you typed is $”
DATA ENDS
END

我得到的错误是

INT 21h, AH=09h - 
address: 00020
byte 24h not found after 2000 bytes.
; correct example of INT 21h/9h:
mov dx, offset msg
mov ah, 9
int 21h
ret
msg db "Hello$"

经过我自己的进一步调试,我断定这个有问题

MOV AX, DATA
MOV DS, AX

如果我将它从我的代码中删除,它会执行,但在开始时会出现一些垃圾。

如有任何建议,我们将不胜感激。

更新: 围绕字符串“您键入的字母 $”的模拟器图像

嗯,所以在放弃 2 天后,我参考了另一本书,其中没有使用细分。所以我删除了段和程序 运行 完美这里是新代码:

ORG 100H

MOV AH, 08H ; Read Keyboard
INT 21H
            
MOV BL, AL  ; Save input
            
MOV AH, 09H ; Display first part of Message
MOV DX, OFFSET MESSAGE
INT 21H
            
MOV AH, 02H  ; Display character of BL register
MOV DL, BL
INT 21H
            
MOV AX, 4C00H ; Exit to DOS
INT 21H

RET


MESSAGE DB "The letter you typed is $"

感谢所有试图帮助我的人,真的很感激。