您的位置:首页 > 其它

80x86 汇编语言:统计数据的个数

2016-01-25 12:14 387 查看
;http://zhidao.baidu.com/question/241878508910823964.html

;题意不清。
;已知是20个,怎么还有《数据的个数》存在...

;下面按照N个数据,编程。

;N个测试数据,每个数据占用16位二进制数,
;数据的个数分别存放在缓冲区的前两个字节,
;现要求分别统计出大于0,等于0,小于0的个数,
;分别存放在GREATZ、ZERO、LITTLEZ单元中。
;在显示屏中显示:
;Name:
;No.1:
;DATA(20个数据)
;GREATZ:
;ZERO:
;LITTLEZ:
;===========================================
;---------------------------
ASSUME  CS:CC, DS:QQ
;---------------------------
QQ  SEGMENT
    M1  DB  13, 10, 'Name: HAO '
    M2  DB  13, 10, 'No.1: 1234567891 '
        DB  13, 10, 'DATA: $'
    M3  DB  13, 10, 'GREATZ: $'
    M4  DB  13, 10, 'ZERO: $'
    M5  DB  13, 10, 'LITTLEZ: $'

    DATA  DW   18
          DW   -1, 1, 0, -12, 31, 7, 2, -6, 0
          DW   12, 5, 99, -3, 82, 5, 22, 0, 8
    N_G   DW  0
    N_Z   DW  0
    N_L   DW  0

QQ  ENDS
;---------------------------
CC  SEGMENT
START:
    MOV   AX, QQ
    MOV   DS, AX
;---------------------------
    MOV   CX, DATA
    MOV   SI, 0
M_LP:
    CMP   DATA[SI + 2], 0
    JNZ   M_1
    INC   N_Z
    JMP   NEXT
M_1:
    CMP   DATA[SI + 2], 32768
    JB    M_2
    INC   N_L
    JMP   NEXT
M_2:
    INC   N_G
NEXT:
    ADD   SI, 2
    LOOP  M_LP
;---------------------------
    LEA   DX, M1
    MOV   AH, 9
    INT   21H

    MOV   CX, DATA
    MOV   SI, 0
M_LP1:
    PUSH  CX
    MOV   AX, DATA[SI + 2]
    CALL  OUTPUT
    ADD   SI, 2
    POP   CX
    LOOP  M_LP1

    LEA   DX, M3
    MOV   AH, 9
    INT   21H
    MOV   AX, N_G
    CALL  OUTPUT

    LEA   DX, M4
    MOV   AH, 9
    INT   21H
    MOV   AX, N_Z
    CALL  OUTPUT

    LEA   DX, M5
    MOV   AH, 9
    INT   21H
    MOV   AX, N_L
    CALL  OUTPUT
;---------------------------
EXIT:
    MOV   AH, 4CH
    INT   21H       ;返回DOS
;---------------------------
OUTPUT:
    CMP   AL, 128
    JB    OL0
    NEG   AL
    PUSH  AX
    MOV   AH, 2
    MOV   DL, '-'
    INT   21H
    POP   AX
OL0:MOV   BL, 10
    MOV   CX, 0
OL1:MOV   AH, 0
    DIV   BL
    MOV   DL, AH
    ADD   DL, '0'
    PUSH  DX
    INC   CX
    CMP   AL, 0
    JNZ   OL1
    MOV   AH, 2
OL2:POP   DX
    INT   21H
    LOOP  OL2
    MOV   DL, ' '
    INT   21H
    RET
;---------------------------
CC  ENDS
    END   START
;---------------------------
;===========================================

本程序执行后,显示如下:

Name: HAO
No.1: 1234567891
DATA: -1 1 0 -12 31 7 2 -6 0 12 5 99 -3 82 5 22 0 8
GREATZ: 11
ZERO: 3
LITTLEZ: 4
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: