所以我试图在DOS程序集中获取用户输入,但我似乎无法理解如何以某种方式设置DS和DX,以便缓冲的输入中断写入右侧地点。这是我的主文件的代码:
BITS 16
org 0x100
Start:
; SNIP
mov dx, Name
call GetString
; SNIP
Exit:
mov ax, 0x4c00
int 0x21
Name:
db 33
db 0
times 255 db 0
这是我的GetString程序,它来自另一个文件。我打算让它在调用函数之前设置DX,然后让DX指向实际字符串的开头:
GetString:
push ax
push bx
; syscall
mov ax, 0x0a
int 0x21
mov bx, dx ; move buffer to adressing register
inc bx ; get number of chars read
movzx si, [bx] ; put bx's value (numbers of chars read) into si
inc bx ; get actual string buffer
add si, bx ; number of chars read + buffer = last byte
mov byte [si], '$' ; $ terminate
mov dx, bx
pop bx
pop ax
ret
我似乎无法理解为什么它不起作用。我是否应该将DS设置为某种东西,如果是的话是什么?
答案 0 :(得分:4)
在GetString
你有
mov ax, 0x0a
int 0x21
这会加载ah
00
(al
0ah
}并调用中断21h
函数00h
,即"终止程序"
如果您打算调用函数0ah
"缓冲STDIN输入"你需要
mov ah, 0x0a
int 0x21
与DS:DX
一起指向初始缓冲区,就像你一样。