用80x86汇编语言编程:键盘输入数组,再选择输出

来源:互联网 发布:知乎 神人 常凯申 编辑:程序博客网 时间:2024/06/05 17:17

从键盘输入9个十进制数(0~3位),数与数之间用空格隔开;
再输入的一个序号(1-9),则输出对应的数。输入0结束。

问题补充:输入的序号最好有提示,输出当然是十进制。
| 2011-12-7 15:51 | 悬赏分:100 |

;==============================================
最佳答案:        2011-12-8 01:43

;以上要求均已满足,程序如下:
;----------------------------------------------
DISP_STR  MACRO  X     ;宏定义.
    MOV  DX, OFFSET X
    MOV  AH, 9
    INT  21H
ENDM
;----------------------------------------------
DATA  SEGMENT          ;数据段.
  MSG1 DB  13, 10, 'Please Input N$'
  MSG2 DB  13, 10, 'I can not count so much ! $'
  MSG3 DB  13, 10, 'Please Input NUM (1~9, 0 end):$'
  IN_N1 DB  9 DUP ('$$$$')

  N DB  30H          ;序数.
DATA  ENDS
;----------------------------------------------
CODE   SEGMENT         ;代码段.
    ASSUME   CS: CODE, DS: DATA
START:
    MOV  AX, DATA
    MOV  DS, AX
;--------------------------------
    MOV  BX, OFFSET IN_N1;数据
    MOV  CX, 9
;--------------------------------
IN_X:
    PUSH CX
    MOV  CX, 3
    DISP_STR  MSG1     ;宏调用,提示 Please Input :
    INC  N
    MOV  DL, N
    MOV  AH, 2
    INT  21H
    MOV  DL, ':'
    MOV  AH, 2
    INT  21H
    MOV  DX, BX
;----------------------
IN_LOOP:
    MOV  AH, 1         ;输入字符.
    INT  21H
    CMP  AL, ' '       ;空格?
    JZ   IN_Y          ;本数字结束.
    CMP  AL, 30H
    JB   _IN_ERR       ;小于'0',输入错误.
    CMP  AL, 3AH
    JNB  _IN_ERR       ;大于'9',输入错误.
    MOV  [BX], AL
    INC  BX
    MOV  AX, BX
    SUB  AX, 2
    SUB  AX, DX
    JA   IN_Y
    JMP  IN_LOOP       ;继续输入.
;----------------------
IN_Y:
    ADD  DX, 4
    MOV  BX, DX
    POP  CX
    LOOP IN_X
;--------------------------------
IN_END:
    DISP_STR  MSG3     ;宏调用,提示  NUM is :

    MOV  AH, 1         ;输入字符.
    INT  21H
    CMP  AL, 30H
    JE   EXIT          ;'0',结束.
    JB   _IN_ERR       ;小于'0',输入错误.
    CMP  AL, 3AH
    JNB  _IN_ERR       ;大于'9',输入错误.

    PUSH AX

    MOV  DL, 13
    MOV  AH, 2
    INT  21H
    MOV  DL, 10
    MOV  AH, 2
    INT  21H

    POP  AX
    SUB  AL, 31H
    MOV  BL, 4
    MUL  BL
    MOV  DX, OFFSET IN_N1
    ADD  DX, AX
    MOV  AH, 9
    INT  21H

    JMP  IN_END
;--------------------------------
_IN_ERR:
    DISP_STR  MSG2     ;宏调用,提示 can not count so much !
EXIT:   
    MOV  AH, 4CH
    INT  21H
;--------------------------------
CODE  ENDS
    END  START
;==============================================

程序运行的屏幕显示如下:

c:\masm510>Z2

Please Input N1:342
Please Input N2:45
Please Input N3:25
Please Input N4:21
Please Input N5:566
Please Input N6:32
Please Input N7:12
Please Input N8:563
Please Input N9:2
Please Input NUM (1~9, 0 end):3
25
Please Input NUM (1~9, 0 end):2
45
Please Input NUM (1~9, 0 end):1
342
Please Input NUM (1~9, 0 end):6
32
Please Input NUM (1~9, 0 end):0
c:\masm510>

;==============================================
回答者: 做而论道 | 十五级 采纳率:43% 名人 达人
提问者对于答案的评价:谢谢~
原题网址:http://zhidao.baidu.com/question/351836527.html?fr=im100008
;==============================================

0 0
原创粉丝点击