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
;题意不清。
;已知是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
相关文章推荐
- 王爽汇编语言,外中断例题,照抄都出错
- 百度空间迁入新家百度云
- VB 6.0 精确到毫秒的计时器 demo
- 80x86 汇编语言:查找字符串
- C语言:写一个约瑟夫环的程序
- 80x86 汇编语言编程:有符号数输出
- 80x86 汇编语言编程:移动平均处理
- C 程序:凑成平方数
- C 程序:号码验证方法
- C 语言编程:输入10个整数,将其中最小的数与第一个数对换
- 80x86 汇编语言编程:编程实现 sum=1+2+…+100
- Android Studio 常见问题
- SQL分类
- Jmeter特殊情况一:登录请求中密码加密的情况
- Java读取文件夹大小的6种方法及代码
- 卫星风
- 51 单片机 C 语言:不规则的矩阵键盘
- C 语言编程:输入 16 进制,以 8 进制输出
- 80x86汇编语言编程:相邻两字符的判断
- 51 单片机汇编语言:利用 RET 指令实现多路分支