您的位置:首页 > 编程语言

用80x86汇编语言编程--输入、储存与输出

2016-01-25 12:03 363 查看
这个问题,是很久很久以前回答的,最近,才被提问者采纳,所以,拖到现在才发表。

链接:http://zhidao.baidu.com/question/351836527.html

;==============================================
;从键盘输入9个十进制数(数与数之间用空格隔开)
;再输入的一个序号(1-9),输出对应的数。输入0结束。
;输入的序号最好有提示,输出当然是十进制。
;以上要求均已满足。
;程序如下:
;----------------------------------------------
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>

要求输入数据在100之内,请输入者人工控制。

提问者评价:谢谢~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: