汇编中怎样一次输入多个字符
答案:7 悬赏:0 手机版
解决时间 2021-02-12 11:19
- 提问者网友:活着好累
- 2021-02-12 02:54
汇编中怎样一次输入多个字符
最佳答案
- 五星知识达人网友:风格不统一
- 2021-02-12 04:06
汇编语言编程时,如果想一次输入多个字符,需要设定结束字符输入的条件。下面以示例程序说明:
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
全部回答
- 1楼网友:荒野風
- 2021-02-12 10:23
郁闷 看不懂 你学的win32汇编 还是 8086呀 ·
- 2楼网友:山河有幸埋战骨
- 2021-02-12 10:10
dos 21h中断的0AH号功能可以接受一个字符串
- 3楼网友:忘川信使
- 2021-02-12 09:31
类似于C语言中的scanf()函数,如果必要的话,可以自己编写一些函数库,以方便调用
- 4楼网友:躲不过心动
- 2021-02-12 07:56
用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
- 5楼网友:酒者煙囻
- 2021-02-12 06:42
这个要用汇编语言编写一个算法,将输入的各个数字位组合成一个数据
如输入顺序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,将乘积加上第三个按键值;
依此类推,直到最后一个按键,则最后结果即为输入的数据。
可用循环结构实现上述算法
- 6楼网友:何以畏孤独
- 2021-02-12 05:37
这时你可以规定间隔符,通常采用非数字的一些符号如:空格、逗号、回车等。
实际中,通常连续检测(循环)所读到的字符如果是数字字符,则认为该书没有结束,否则数据已经输入完毕。
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:
....... ; 后续处理
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯