汇编中怎样一次输入多个字符
用DOS功能调用的01号只能一次输入一个字符吧?怎样能把连续输入的‘12’当作一个十进制数储存起来呢?...
用DOS功能调用的01号只能一次输入一个字符吧?怎样能把连续输入的‘12’当作一个十进制数储存起来呢?
展开
7个回答
展开全部
汇编语言编程时,如果想一次输入多个字符,需要设定结束字符输入的条件。下面以示例程序说明:
data segment
str db 200 dup (00h);定义输入字符接收区
data ends
code segment
assume cs:code,ds:data
main proc far
start:
mov ax,data
mov ds,ax
lea si,str
mov cx,200;限定最多输入200字符
inpstr: mov ah,01h;等待输入字符
int 21h
mov [si],a1;输入的字符存入接收区
inc si
xor al,0dh;以回车符作为结束条件
jz endinp
loop inpstr;如果没有输入回车符,以输入200字符作为结束条件
endinp: mov ah,4ch;输入的字符在接收区,结束程序
int 21h
ret
main endp
code ends
end start
data segment
str db 200 dup (00h);定义输入字符接收区
data ends
code segment
assume cs:code,ds:data
main proc far
start:
mov ax,data
mov ds,ax
lea si,str
mov cx,200;限定最多输入200字符
inpstr: mov ah,01h;等待输入字符
int 21h
mov [si],a1;输入的字符存入接收区
inc si
xor al,0dh;以回车符作为结束条件
jz endinp
loop inpstr;如果没有输入回车符,以输入200字符作为结束条件
endinp: mov ah,4ch;输入的字符在接收区,结束程序
int 21h
ret
main endp
code ends
end start
展开全部
这时你可以规定间隔符,通常采用非数字的一些符号如:空格、逗号、回车等。
实际中,通常连续检测(循环)所读到的字符如果是数字字符,则认为该书没有结束,否则数据已经输入完毕。
LEA DI, BUF
CLD
next:
MOV AH, 1
INT 21H
CMP AL,'0'
JB LEND
CMP AL,'9'
JA LEND
STOSB ; 保存在buf中,以备后续处理
LEND:
....... ; 后续处理
实际中,通常连续检测(循环)所读到的字符如果是数字字符,则认为该书没有结束,否则数据已经输入完毕。
LEA DI, BUF
CLD
next:
MOV AH, 1
INT 21H
CMP AL,'0'
JB LEND
CMP AL,'9'
JA LEND
STOSB ; 保存在buf中,以备后续处理
LEND:
....... ; 后续处理
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个要用汇编语言编写一个算法,将输入的各个数字位组合成一个数据
如输入顺序1、2、3,则可以设计以下算法:
0*10=0,0+1=1
1*10=10,10+2=12
12*10=120,120+3=123
即:用初值0乘以10,将乘积加上第一个按键值;
将第一步结果乘以10,将乘积加上第二个按键值;
将第二步结果乘以10,将乘积加上第三个按键值;
依此类推,直到最后一个按键,则最后结果即为输入的数据。
可用循环结构实现上述算法
如输入顺序1、2、3,则可以设计以下算法:
0*10=0,0+1=1
1*10=10,10+2=12
12*10=120,120+3=123
即:用初值0乘以10,将乘积加上第一个按键值;
将第一步结果乘以10,将乘积加上第二个按键值;
将第二步结果乘以10,将乘积加上第三个按键值;
依此类推,直到最后一个按键,则最后结果即为输入的数据。
可用循环结构实现上述算法
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用INT 16H读取
;下面的只能读两个数字,需要多的自行修改
;只接受0~9按键
DATA SEGMENT
ASSUME DATA:DS
KEYCODE DB 0,0,$
NUM DB 0
DATA ENDS
CODE SEGMENT
ASSUME CODE:CS
START: MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET KEYCODE
XOR CX,CX
READKEY:XOR AX,AX
PUSH CX
PUSH SI
INT 16H
POP SI
POP CX
CMP AL,'0'
JB READKEY
CMP AL,'9'
JA READKEY
MOV [SI],AL
PUSH CX
PUSH SI
MOV DL,AL;显示数字字符
MOV AH,2
INT 21H
POP SI
POP CX
INC SI
INC CX
CMP CX,1
JBE READKEY
MOV SI,OFFSET KEYCODE;开始转换
MOV AL,[SI]
SUB AL,30H
MOV CL,10
MUL CL
INC SI
MOV CL,[SI]
SUB CL,30H
ADD AL,CL
MOV NUM,AL
;转换过的数在NUM,如果只是显示可以直接用KEYCODE
MOV AX,4C00H
INT 21H
CODE ENDS
END START
;下面的只能读两个数字,需要多的自行修改
;只接受0~9按键
DATA SEGMENT
ASSUME DATA:DS
KEYCODE DB 0,0,$
NUM DB 0
DATA ENDS
CODE SEGMENT
ASSUME CODE:CS
START: MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET KEYCODE
XOR CX,CX
READKEY:XOR AX,AX
PUSH CX
PUSH SI
INT 16H
POP SI
POP CX
CMP AL,'0'
JB READKEY
CMP AL,'9'
JA READKEY
MOV [SI],AL
PUSH CX
PUSH SI
MOV DL,AL;显示数字字符
MOV AH,2
INT 21H
POP SI
POP CX
INC SI
INC CX
CMP CX,1
JBE READKEY
MOV SI,OFFSET KEYCODE;开始转换
MOV AL,[SI]
SUB AL,30H
MOV CL,10
MUL CL
INC SI
MOV CL,[SI]
SUB CL,30H
ADD AL,CL
MOV NUM,AL
;转换过的数在NUM,如果只是显示可以直接用KEYCODE
MOV AX,4C00H
INT 21H
CODE ENDS
END START
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
类似于C语言中的scanf()函数,如果必要的话,可以自己编写一些函数库,以方便调用
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询