emu8086中输入的字符串如何保存以便再次使用?

How can I save the string I entered to use it again in emu8086?

如何保存输入的字符串以便再次使用
例如,我尝试更改 A1、A2 的值:

A1 DB ?

A1 数据库 '$\'

.DATA
P1  DB  'Enter the First Strig : $\'
P2  DB  'Enter the Second character : $\'
L   db 0ah,0dh,'$'
P3  DB  ' the " $\'   
P4  DB  ' " and " $\'   
P5  DB  ' " is: $\' 
FIRST_BASE       db 255
SECOND_BASE      db 255
A1        DB  dup('$')
A2        DB  dup('$')
.code 
.model small 
start:
mov ax,@data
mov ds,ax 

printString P1                            
lea dx, FIRST_BASE                             
mov ah,0ah  
int 21h 
MOV A1,AH            < --------- (!!!Here's the problem I can't save the string!!!)  
printString L                              
                             
                                    

printString P2                           
lea dx, SECOND_BASE                             
mov ah,0ah
MOV A2,AH     < --------- (!!!Here's the problem I can't save the string!!!)
int 21h  
printString L
 

打印

(2)= 他在这里打印奇怪的形状和字母

printString P3 
printString A1             <-----------(2)
printString P4 
printString A2             <-----------(2)
printString P5                          
mov ax,ham_dist          

我希望它看起来像这样 =“(我第一个输入的字符串)”和“(您第二个输入的字符串)”是:(没关系)

A1 DB ?A1 DB '$\' 这样的行没有保留足够的字节来存储字符串。

FIRST_BASE       db 255
SECOND_BASE      db 255
A1        DB  dup('$')
A2        DB  dup('$')
...
lea dx, FIRST_BASE                             
mov ah,0ah  
int 21h 
MOV A1,AH            < --------- (!!!Here's the problem I can't save the string!!!)  

这是不是您设置此 DOS 功能的方式!那些 A1A2 行甚至可以编译吗(dup 前面没有数值)?像 MOV A1,AH 这样的行也是没有意义的; AH 寄存器仍然包含功能号 0Ah,几乎没有什么有趣的。

您可以在 中阅读有关 DOS.BufferedInput 功能 0Ah 的所有信息。

由于您需要多个字符串输入,您可以选择设置 1 个输入缓冲区并将字符串复制到它们自己的专用缓冲区,或者您可以设置 2 个输入缓冲区并将字符串留在输入的位置。我选择了后者:

FIRST_BASE       db 80, 0, 80 dup (0) 
SECOND_BASE      db 80, 0, 80 dup (0)

...

lea dx, FIRST_BASE                             
mov ah, 0Ah  
int 21h

...

这就是您读取输入文本长度的方式:

mov bl, [FIRST_BASE + 1]
mov bh, 0

这就是让输入的文本以 $ 结尾并准备打印的方式:

mov byte ptr [FIRST_BASE + 2 + bx], '$'

这就是打印的方式:

lea dx, FIRST_BASE + 2
mov ah, 09h
int 21h