我正在尝试从我的emu 8086汇编器获取一个字符串作为输入。我想将输入的字符串打印为输出。在打印字符串时,我得到一些有趣的字符作为输出以及输入。
我应该怎么做才能停止输入输入?我试图用$
符号终止输入。
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
答案 0 :(得分:2)
这里有很多问题。
您忘记设置DS
。
mov ax, DATA
mov ds, ax
您不退出程序。
mov ax, 4C00h ; DOS.Terminate
int 21h
您没有为DOS.BufferedInput函数0Ah提供正确的输入缓冲区。
DATA SEGMENT
A db 64, 0, 64 dup (0)
DATA ENDS
我对此DOS函数here
您不会获取字符串以输出存储其字符的位置,也无法正确地对$进行终止。
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
答案 1 :(得分:0)
您没有正确设置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中的偏移量应为A + 2(而不是A)。