19、编写一个应用程序,完成以下操作:(1)用50个随机整数填充一个数组;(2)遍历数组,显示每个值,并统计负值的数量;(3)循环结束后,显示统计数量。注意:Irvine32库中的Random32过程可生成随机整数。
以下是一个可能的汇编代码实现思路:首先,使用 Randomize
过程初始化随机数种子,然后定义一个大小为 50 的 DWORD
类型数组。通过循环 50 次,每次调用 Random32
过程生成随机整数并存储到数组中。接着再次遍历数组,显示每个元素的值,同时检查是否为负数,若是则增加负数计数器。最后,显示负数的统计数量。
代码示例如下:
TITLE Fill Array with Random Integers
INCLUDE Irvine32.inc
.data
array DWORD 50 DUP(?)
negativeCount DWORD 0
prompt BYTE 'Array element: ', 0
countMsg BYTE 'Number of negative values: ', 0
.code
main PROC
call Randomize ; 初始化随机数种子
mov ecx, 50 ; 循环50次
mov esi, 0 ; 数组索引
L1:
call Random32 ; 生成随机整数
mov array[esi * 4], eax ; 存储到数组中
inc esi ; 索引加1
loop L1 ; 循环
mov ecx, 50 ; 再次循环50次
mov esi, 0 ; 重置数组索引
mov negativeCount, 0 ; 初始化负数计数器
L2:
mov eax, array[esi * 4] ; 获取数组元素
mov edx, OFFSET prompt
call WriteString ; 显示提示信息
call WriteInt ; 显示数组元素
call Crlf ; 换行
cmp eax, 0 ; 检查是否为负数
jl isNegative ; 若是负数,跳转到isNegative
jmp nextElement ; 否则,继续下一个元素
isNegative:
inc negativeCount ; 负数计数器加1
nextElement:
inc esi ; 索引加1
loop L2 ; 循环
mov edx, OFFSET countMsg
call WriteString ; 显示统计信息提示
mov eax, negativeCount
call WriteInt ; 显示负数统计数量
call Crlf ; 换行
exit
main ENDP
END main
20、使用块结构的 .IF 和 .WHILE 指令,用汇编语言实现以下 C++ 代码。假设所有变量都是 32 位有符号整数:int array[] = {10,60,20,33,72,89,45,65,72,18};int sample = 50;int ArraySize = sizeof array / sizeof sample;int index = 0;int sum = 0;while( index < ArraySize ){if( array[index] <= sample ){ sum += array[index];}index++;}可选:为代码绘制流程图。
以下是使用汇编语言实现上述 C++ 代码的示例,使用了块结构的 .IF
和 .WHILE
指令。假设使用 MASM 汇编器:
.MODEL SMALL
.STACK 100H
.DATA
array DWORD 10, 60, 20, 33, 72, 89, 45, 65, 72, 18
sample DWORD 50
ArraySize DWORD ($ - array) / 4
index DWORD 0
sum DWORD 0
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
.WHILE index < ArraySize
MOV EAX, index
MOV EBX, 4
MUL EBX
MOV EBX, EAX
MOV EAX, [array + EBX]
.IF EAX <= sample
ADD sum, EAX
.ENDIF
INC index
.ENDW
MOV AH, 4CH
INT 21H
MAIN ENDP
END MAIN
关于绘制流程图,这里无法直接绘制,但可以描述其逻辑:
- 开始。
- 初始化变量(
array
、sample
、ArraySize
、index
、sum
)。 - 进入循环判断(
index < Arr