gpt4 book ai didi

assembly - Turbo 汇编器多输入重叠

转载 作者:行者123 更新时间:2023-12-04 01:40:49 28 4
gpt4 key购买 nike

我是汇编语言的新手,我的代码有问题。起初我尝试了 1 个输入,然后是 1 个输出,它工作得很好。但是当我尝试 2 个输入时。这就是问题出现的时候。当它询问“性别”时,输入 1 和输出 1 似乎重叠了。

我已经彻底搜索并设法找到一个问同样问题的人,但他/她的不同,我似乎无法理解。我希望有人能帮帮忙。这是给学校的。

完整代码:

.model small
.stack 200
.data
message db "Name: ","$"
message2 db "Your name is: ","$"
message3 db "Gender: ","$"
message4 db "Your name is: ","$"
BUF DB 100
DB 100 DUP("$")

.code
MOV ax,@data
mov ds,ax

LEA dx,message
mov ah,09h
int 21h
mov ah,0ah ;
mov dx, offset buf
int 21h

LEA dx,message2
mov ah,09h
int 21h
LEA DX,BUF
ADD DX,02
MOV AH,09H
INT 21H

LEA dx,message3
mov ah,09h
int 21h
mov ah,0ah
mov dx, offset buf
int 21h


LEA dx,message4
mov ah,09h
int 21h
LEA DX,BUF
ADD DX,02
MOV AH,09H
INT 21H

MOV AX,4C00H
INT 21H
END

最佳答案

您应该在每次 AH=0Ah 调用后显式写入终止字符“$”(或使用单独的缓冲区)。否则,如果您先键入字符串“123456”,然后键入“abc”,缓冲区将首先保存 123456\n$$$$$$...abc\n56\n$$ $$$ 下一次。

中断 AH=0Ah 会将读取的字符数放在位置 DX+1。由于某些原因,输入中断使用 '\n' 作为终止字符,而 AH=09h/打印字符串使用 '$'。

 ;; given dx == offset buf, replace the Carriage Return
;; with the terminating character '$'
fix_end_of_string:
mov bx, dx
mov al, [bx + 1]
mov ah, 0
add bx, ax
mov al, '$'
mov [bx + 2], al
ret

Some random reference to AH=0Ah / AH=09h services

另一个问题,如其他答案所示,是 DOS 如何将终端作为具有单独回车和换行的模拟打字机进行管理。CR (0x0d) 仅将“写入头”设置为行首,但不会前进到下一行。在 DOS 中,这是通过写入换行符 (ASCII 0x0a) 来完成的,它完全独立于 CR。可以在任何水平位置移动到下一行并继续键入。当输入名称时,显然输入服务 AH=0Ah 将在内部键入 CR 和 LF,允许在单独的行上打印下一条消息,但输入缓冲区将只有 CR。

关于assembly - Turbo 汇编器多输入重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46379799/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com