用汇编怎样实现从键盘输入一串字符至内存(利用DOS功能调用)?

发布网友

我来回答

2个回答

热心网友

你的缓存区设置有误的,没有设置最大输入的字符数,默认为0,那当然不行。
0AH功能调用的时候要求将DS:DX指向缓冲区的第一个字节,并设置缓冲区的第一个字节以便指出所能容纳的最大字符的最大个数。正确如下~~~
DAT SEGMENT
NUMBERS DB 100 ;能存最大字符数,这里一定要设置
DB ? ;你输入的字符数,由计算机自动填写
DB 100 DUP(?) ;开始存放字符的段
DAT ENDS
STA SEGMENT STACK
DW 50 DUP(?)
STA ENDS
COD SEGMENT
ASSUME CS:COD,DS:DAT
START: MOV AX,DAT
MOV DS,AX
MOV AH,0AH
MOV DX,OFFSET NUMBERS ;取得存放数据的内存偏移地址,从键盘中输入
INT 21H
MOV AX,4C00H
INT 21H
COD ENDS
END START

热心网友

利用DOS功能调用,用汇编语言编程实现从键盘输入一串字符存至内存,请参考如下程序(输入字符数最多200字符,用回车符表示输入结束):
data segment
str db 200 p (0)
data ends

code segment
assume cs:code,ds:data
main proc far
start:
mov ax,data
mov ds,ax
lea si,str
inpstr: mov ah,06h;DOS功能调用,读取从键盘输入的字符
int 21h
jnz inpstr;无字符可读
mov [si],a1;保存读取的字符
inc si;增量指针指向下一单元
xor al,0dh;判断是否回车符
jz endinp;是则输入结束
jmp inpstr;不是回车符继续等待输入

endinp: mov ah,4ch;终止当前进程
int 21h
ret
main endp
code ends
end start

热心网友

你的缓存区设置有误的,没有设置最大输入的字符数,默认为0,那当然不行。
0AH功能调用的时候要求将DS:DX指向缓冲区的第一个字节,并设置缓冲区的第一个字节以便指出所能容纳的最大字符的最大个数。正确如下~~~
DAT SEGMENT
NUMBERS DB 100 ;能存最大字符数,这里一定要设置
DB ? ;你输入的字符数,由计算机自动填写
DB 100 DUP(?) ;开始存放字符的段
DAT ENDS
STA SEGMENT STACK
DW 50 DUP(?)
STA ENDS
COD SEGMENT
ASSUME CS:COD,DS:DAT
START: MOV AX,DAT
MOV DS,AX
MOV AH,0AH
MOV DX,OFFSET NUMBERS ;取得存放数据的内存偏移地址,从键盘中输入
INT 21H
MOV AX,4C00H
INT 21H
COD ENDS
END START

热心网友

利用DOS功能调用,用汇编语言编程实现从键盘输入一串字符存至内存,请参考如下程序(输入字符数最多200字符,用回车符表示输入结束):
data segment
str db 200 p (0)
data ends

code segment
assume cs:code,ds:data
main proc far
start:
mov ax,data
mov ds,ax
lea si,str
inpstr: mov ah,06h;DOS功能调用,读取从键盘输入的字符
int 21h
jnz inpstr;无字符可读
mov [si],a1;保存读取的字符
inc si;增量指针指向下一单元
xor al,0dh;判断是否回车符
jz endinp;是则输入结束
jmp inpstr;不是回车符继续等待输入

endinp: mov ah,4ch;终止当前进程
int 21h
ret
main endp
code ends
end start

热心网友

你的缓存区设置有误的,没有设置最大输入的字符数,默认为0,那当然不行。
0AH功能调用的时候要求将DS:DX指向缓冲区的第一个字节,并设置缓冲区的第一个字节以便指出所能容纳的最大字符的最大个数。正确如下~~~
DAT SEGMENT
NUMBERS DB 100 ;能存最大字符数,这里一定要设置
DB ? ;你输入的字符数,由计算机自动填写
DB 100 DUP(?) ;开始存放字符的段
DAT ENDS
STA SEGMENT STACK
DW 50 DUP(?)
STA ENDS
COD SEGMENT
ASSUME CS:COD,DS:DAT
START: MOV AX,DAT
MOV DS,AX
MOV AH,0AH
MOV DX,OFFSET NUMBERS ;取得存放数据的内存偏移地址,从键盘中输入
INT 21H
MOV AX,4C00H
INT 21H
COD ENDS
END START

热心网友

利用DOS功能调用,用汇编语言编程实现从键盘输入一串字符存至内存,请参考如下程序(输入字符数最多200字符,用回车符表示输入结束):
data segment
str db 200 p (0)
data ends

code segment
assume cs:code,ds:data
main proc far
start:
mov ax,data
mov ds,ax
lea si,str
inpstr: mov ah,06h;DOS功能调用,读取从键盘输入的字符
int 21h
jnz inpstr;无字符可读
mov [si],a1;保存读取的字符
inc si;增量指针指向下一单元
xor al,0dh;判断是否回车符
jz endinp;是则输入结束
jmp inpstr;不是回车符继续等待输入

endinp: mov ah,4ch;终止当前进程
int 21h
ret
main endp
code ends
end start

热心网友

你的缓存区设置有误的,没有设置最大输入的字符数,默认为0,那当然不行。
0AH功能调用的时候要求将DS:DX指向缓冲区的第一个字节,并设置缓冲区的第一个字节以便指出所能容纳的最大字符的最大个数。正确如下~~~
DAT SEGMENT
NUMBERS DB 100 ;能存最大字符数,这里一定要设置
DB ? ;你输入的字符数,由计算机自动填写
DB 100 DUP(?) ;开始存放字符的段
DAT ENDS
STA SEGMENT STACK
DW 50 DUP(?)
STA ENDS
COD SEGMENT
ASSUME CS:COD,DS:DAT
START: MOV AX,DAT
MOV DS,AX
MOV AH,0AH
MOV DX,OFFSET NUMBERS ;取得存放数据的内存偏移地址,从键盘中输入
INT 21H
MOV AX,4C00H
INT 21H
COD ENDS
END START

热心网友

利用DOS功能调用,用汇编语言编程实现从键盘输入一串字符存至内存,请参考如下程序(输入字符数最多200字符,用回车符表示输入结束):
data segment
str db 200 p (0)
data ends

code segment
assume cs:code,ds:data
main proc far
start:
mov ax,data
mov ds,ax
lea si,str
inpstr: mov ah,06h;DOS功能调用,读取从键盘输入的字符
int 21h
jnz inpstr;无字符可读
mov [si],a1;保存读取的字符
inc si;增量指针指向下一单元
xor al,0dh;判断是否回车符
jz endinp;是则输入结束
jmp inpstr;不是回车符继续等待输入

endinp: mov ah,4ch;终止当前进程
int 21h
ret
main endp
code ends
end start

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com