使用x86汇编语言编写以下程序,要求可以用masm汇编器运行:统计长度为5的字数组ARRAY中有多少种不同数值,数组ARRAY为{1,1,3,5,5}。将结果存放进BX并输出显示。
时间: 2024-05-14 08:14:04 浏览: 15
```
INCLUDE Irvine32.inc
.DATA
ARRAY DWORD 1,1,3,5,5
count DWORD 0
len DWORD 5
.CODE
main PROC
mov bx, 0 ; 将计数器清零
mov ecx, len ; 将计数器设为数组长度
mov esi, 0 ; 将esi设为数组起始地址
L1: mov eax, [esi] ; 将数组元素读入eax
mov edx, esi ; 将esi的值复制到edx
add edx, 4 ; 将edx加上4,指向下一个元素
mov ebx, ecx ; 将ecx的值复制到ebx
L2: cmp ebx, len ; 如果ebx等于len,则跳到L3
je L3
mov edi, [edx] ; 将下一个元素读入edi
cmp eax, edi ; 比较eax和edi的值
je L4 ; 如果相等,跳到L4
add edx, 4 ; 如果不相等,将edx加上4
dec ebx ; 将ebx减1
jmp L2 ; 跳回L2
L4: add esi, 4 ; 如果相等,将esi加上4
jmp L1 ; 跳回L1
L3: mov bx, ecx ; 将不同数值的个数存放在bx中
mov eax, bx
call WriteDec ; 输出不同数值的个数
exit
main ENDP
END main
```
注:该程序使用了“双重循环”方法,以便统计不同数值的个数。内层循环比较数组中的两个元素,如果它们相等,则跳到“L4”处;如果不相等,则将指针edx加上4,以便比较下一个元素。外层循环遍历整个数组,如果发现有相同的元素,则将指针esi加上4,以便跳过重复元素。如果内层循环比较完所有元素,则将不同数值的个数(即ecx的值)存放在bx中,并输出显示。
相关推荐
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)