IBM-PC汇编,键盘输入问题

toann 2004-11-19 08:23:10
请教各位大虾:我想用键盘输入一组数据,存入一个数组中,请问该如何做?

例如:输入10个学生的成绩,存入一个数组。成绩在60-100之间,包括100;希望大虾详细指点。
...全文
149 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
toann 2004-11-20
  • 打赏
  • 举报
回复
多谢各位的指点,这是我完成后的程序。
随后加分^_^
:程序由3个子程序:INPUT_SUB(键盘输入),COUNT_SUB(统计各个分数段的人数),PRINT_SUB(打印 结果)。

TITLE P181_6_9_ProgramAuthor_ChenXiaoTian_54
;*****************DataSegment****************
DATA_SEG SEGMENT
SCORE DW 10 DUP (?)
CRLF DB 13,10,'$' ; For CRLF_SUB
TEN DB 10 ; /10
MSG0 DB 'Please input ten score: $'
MSG1 DB '60-69: $'
MSG2 DB '70-79: $'
MSG3 DB '80-89: $'
MSG4 DB '90-99: $'
MSG5 DB '100: $'
S6 DB 0
S7 DB 0
S8 DB 0
S9 DB 0
S10 DB 0
DATA_SEG ENDS
;*****************CodeSegment****************
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE, DS:DATA_SEG
START:
MOV AX, DATA_SEG ; initialization DS segment
MOV DS, AX
MOV SI, 0 ; initialization array pointer
MOV CX, 10 ; initialization count
LEA DX, MSG0 ; Print MSG0
MOV AH, 09
INT 21H
CALL CRLF_SUB
PUSH CX ; Save CX and SI
PUSH SI
INPUT_LOOP:
CALL INPUT_SUB
MOV SCORE[SI], BX
INC SI
INC SI
LOOP INPUT_LOOP
POP SI
POP CX
START_L:
MOV AX, SCORE[SI]
CALL COUNT_SUB
INC SI
INC SI
LOOP START_L
CALL PRINT_SUB ;Print S6--S10

MOV AX, 4C00H ;Return DOS
INT 21H
MAIN ENDP
;*****************SubProgram****************
INPUT_SUB PROC
MOV BX, 0 ;For input number
NEWCHAR:
MOV AH, 01 ; Keyboard input
INT 21H
SUB AL, 30H ; If not input number then EXIT
JL EXIT
CMP AL, 9D
JG EXIT
CBW
XCHG AX, BX
IMUL TEN
XCHG AX, BX
ADD BX, AX
JMP NEWCHAR
EXIT: RET
INPUT_SUB ENDP

COUNT_SUB PROC
IDIV TEN
CMP AL, 6
JZ L1 ;60-69
CMP AL, 7
JZ L2 ;70-79
CMP AL, 8
JZ L3 ;80-89
CMP AL, 9
JZ L4 ;90-99
CMP AL, 10
JZ L5 ;100
OVER: RET
L1: INC S6
JMP OVER
L2: INC S7
JMP OVER
L3: INC S8
JMP OVER
L4: INC S9
JMP OVER
L5: INC S10
JMP OVER
COUNT_SUB ENDP

CRLF_SUB PROC ; Print CR and LF
LEA DX, CRLF
MOV AH, 09
INT 21H
RET
CRLF_SUB ENDP

PRINT_SUB PROC ;Print result
LEA DX, MSG1
MOV AH, 09
INT 21H
MOV DL, S6
ADD DL, 30H
MOV AH, 02
INT 21H
CALL CRLF_SUB ; Print CR and LF

LEA DX, MSG2
MOV AH, 09
INT 21H
MOV DL, S7
ADD DL, 30H
MOV AH, 02
INT 21H
CALL CRLF_SUB

LEA DX, MSG3
MOV AH, 09
INT 21H
MOV DL, S8
ADD DL, 30H
MOV AH, 02
INT 21H
CALL CRLF_SUB

LEA DX, MSG4
MOV AH, 09
INT 21H
MOV DL, S9
ADD DL, 30H
MOV AH, 02
INT 21H
CALL CRLF_SUB

LEA DX, MSG5
MOV AH, 09
INT 21H
MOV DL, S10
ADD DL, 30H
MOV AH, 02
INT 21H
CALL CRLF_SUB

RET
PRINT_SUB ENDP

CODE ENDS
END START
大熊猫侯佩 2004-11-19
  • 打赏
  • 举报
回复
先定义空间比如
students db 10 dup(?)
然后你就通过不断接收键盘输入,转换为BIN,然后保存到预定义空间即可。
zhuying1983 2004-11-19
  • 打赏
  • 举报
回复
datarea segment
student dw 10 dup(?) ;存放10个学生的成绩
ten dw 10

datarea ends

stackarea segment para stack
sw dw 100 dup(?)
stackarea ends

program segment 'code'

main proc far
assume cs:program,ds:datarea,ss:stackarea

push ds
sub ax,ax
push ax

mov ax,datarea
mov ds,ax

mov si,0
mov cx,10 ;循环10次
again:
push cx
call input
mov student[si],ax
inc si
inc si
pop cx
loop again

mov dl,0ah
mov ah,02h
int 21h
ret
main endp


input proc near

mov ax,0
push ax

again1:
mov ah,01h ;键盘输入
int 21h
cmp al,30h ;当输入不是数字的时候(如空格),跳出,一个成绩输入完成,
jl exit
cmp al,39h
jg exit
sub al,30h ;将ASCII码值转化为数值
mov bl,al
mov bh,0
pop ax
cwd
imul ten ;将已有的数乘10,加上新输入的数
add ax,bx
push ax
jmp again1
exit:
pop ax

ret

input endp


program ends

end main

seu2002 2004-11-19
  • 打赏
  • 举报
回复
写了一个:
data segment
temp db 4
temp1 db ?
db 4 dup(0)
student db 10 dup(0)
data ends

code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
mov cx,10
mov di,offset student
cycle: mov dl,0dh
mov ah,02h
int 21h
mov dl,0ah
mov ah,02h
int 21h
mov ah,0ah
mov dx,offset temp
int 21h
call trans
inc di
loop cycle
mov ah,4ch
int 21h
trans proc
push cx
mov cl,temp1
lea si,temp1+1
cycle1: mov al,[si]
and al,0fh
mov [si],al
inc si
loop cycle1
mov cl,temp1
dec cl
lea si,temp1+1
mov bl,10
mov al,[si]
cycle2: mul bl
inc si
add al,[si]
loop cycle2
mov [di],al
pop cx
ret
trans endp
code ends
end start
大熊猫侯佩 2004-11-19
  • 打赏
  • 举报
回复
呵呵!你可以在论坛搜搜我回答的帖子,有相关内容!
toann 2004-11-19
  • 打赏
  • 举报
回复
呵呵,又是您啊。我的问题都是您回答的。非常感谢。
不过能否给一个小小的例子?具体怎么接受和转换?

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧