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 功能的方式!那些 A1 和 A2 行甚至可以编译吗(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
如何保存输入的字符串以便再次使用
例如,我尝试更改 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 功能的方式!那些 A1 和 A2 行甚至可以编译吗(dup
前面没有数值)?像 MOV A1,AH
这样的行也是没有意义的; AH
寄存器仍然包含功能号 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