汇编语言编写程序,统计长度为N的字数组ARRAY中有多少种不同数值,例如数组{1,1,3,5,5}中有三种不同数值。将结果存放进BX 测试数据:{1,1,3,5,5} {4,2,5,2,5,4,6,7,4,6,9,11,15,9}
时间: 2024-05-08 07:16:48 浏览: 93
这是一份x86汇编语言程序,可以统计长度为N的字数组ARRAY中有多少种不同数值:
```
DATA SEGMENT
ARRAY DB 1,1,3,5,5
; 请将以上数组替换成测试数据
N DW $ / 2
COUNT DW ?
TEMP DB 256 DUP(0)
DATA ENDS
CODE SEGMENT
START:
MOV AX, @DATA
MOV DS, AX
XOR BX, BX ; 清空BX寄存器
MOV CX, N ; CX寄存器存储字节数组的长度
COUNT_LOOP:
MOV DL, ARRAY[BX] ; DL寄存器存储当前字节的值
INC TEMP[DL] ; 通过TEMP数组统计数值出现的次数
INC BX
LOOP COUNT_LOOP
MOV BX, 0 ; 清空BX寄存器
MOV CX, 256 ; CX寄存器存储TEMP数组的长度
DISTINCT_LOOP:
CMP TEMP[BX], 0 ; 如果当前数值未出现过,则TEMP[BX]为0
JZ SKIP ; 跳过当前数值
INC COUNT ; 不同数值个数加1
INC BX ; 统计下一个数值
JMP NEXT
SKIP:
INC BX ; 统计下一个数值
NEXT:
LOOP DISTINCT_LOOP
MOV BX, COUNT ; 将不同数值个数存储在BX寄存器中
MOV AH, 4CH ; 退出程序
INT 21H
CODE ENDS
END START
```
使用方法:
1. 将测试数据替换掉第3行的数组声明。
2. 将程序保存为.asm文件。
3. 使用MASM汇编器将.asm文件汇编成.obj文件:
```
MASM /Ml /I"MASM\INCLUDE" /I"MASM\LIB" TEST.ASM;
```
4. 使用LINK链接器将.obj文件链接成可执行文件:
```
LINK TEST.OBJ;
```
5. 运行可执行文件:
```
TEST.EXE;
```
6. 查看BX寄存器的值,即为不同数值的个数。对于测试数据{1,1,3,5,5},BX寄存器的值应该为3。对于测试数据{4,2,5,2,5,4,6,7,4,6,9,11,15,9},BX寄存器的值应该为8。
阅读全文