Assembly 从8086 emu读取字符串并将其输出回
我试图从我的EMU8086汇编程序中获取一个字符串作为输入。我想将输入的字符串打印为输出。在打印字符串时,我得到了一些有趣的字符作为输出,以及我给出的输入 我应该如何停止输入?我已尝试使用Assembly 从8086 emu读取字符串并将其输出回,assembly,emu8086,Assembly,Emu8086,我试图从我的EMU8086汇编程序中获取一个字符串作为输入。我想将输入的字符串打印为输出。在打印字符串时,我得到了一些有趣的字符作为输出,以及我给出的输入 我应该如何停止输入?我已尝试使用$符号终止输入 DATA SEGMENT A DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV AH,0AH LEA DX,A INT 21H
$
符号终止输入
DATA SEGMENT
A DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV AH,0AH
LEA DX,A
INT 21H
LEA DX,A
MOV AH,9H
INT 21H
CODE ENDS
END START
您没有正确设置INT 21/0A的缓冲区。DS:DX所指向的字节是要读取的最大字节数,下一个字节将保存读取的字节数,然后从第二个字节开始存储读取的字符串。你需要像这样的东西
A DB 20 ; buffer length
DB 0 ; (return) number of characters read
DB 20 DUP(?)
DB '$' ; extra byte for string termination
最多可接受20个字符。在调用INT 21/09之前,您仍然需要添加“$”字符,并且DX中的偏移量应该是+2(而不是A)。这里有很多问题
- 您忘记设置
DS
mov ax, DATA mov ds, ax
- 你不能退出这个项目
mov ax, 4C00h ; DOS.Terminate int 21h
- 您没有为DOS.BufferedInput函数0Ah提供正确的输入缓冲区
我对这个DOS函数有一个很好的解释DATA SEGMENT A db 64, 0, 64 dup (0) DATA ENDS
- 您没有将字符串提取到存储其字符的输出位置,也没有正确地$-终止它
lea dx, A+2 mov bx, dx mov bl, [bx-1] ; Length of the string mov bh, 0 add bx, dx mov byte [bx], "$" ; Replace 13 by "$" mov ah, 09h ; DOS.DisplayString int 21h