80x86汇编语言写一个过程Preeven,判断一个串中偶数元素(用位运算)的个数,通过堆栈传递两个参数的完整程序
时间: 2024-02-06 21:10:41 浏览: 127
下面是一个80x86汇编语言写的过程Preeven,用于计算一个串中偶数元素(用位运算)的个数,通过堆栈传递两个参数的完整程序:
```
.MODEL SMALL
.STACK 100H
.DATA
; 定义一个测试用的数组
arr DB 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
; 调用 Preeven 过程进行计算
PUSH OFFSET arr
PUSH 10
CALL Preeven
; 输出结果
MOV AH, 09H
MOV DX, OFFSET msg
INT 21H
; 退出程序
MOV AH, 4CH
INT 21H
MAIN ENDP
Preeven PROC
PUSH BP
MOV BP, SP
; 获取参数
MOV BX, [BP + 4] ; 取得首地址
MOV CX, [BP + 6] ; 取得元素个数
XOR AX, AX ; 初始化计数器
; 循环遍历数组中的每个元素
LOOP_START:
MOV DL, [BX] ; 取得当前元素的值
AND DL, 1 ; 判断是否为奇数
JZ IS_EVEN ; 如果是偶数,跳转到 IS_EVEN 处
; 如果是奇数,继续循环
INC BX ; 指向下一个元素
LOOP LOOP_START ; 继续循环
; 如果是偶数,累加计数器
IS_EVEN:
INC AX ; 计数器加1
INC BX ; 指向下一个元素
LOOP LOOP_START ; 继续循环
; 返回计数器的值
MOV SP, BP
POP BP
RET
Preeven ENDP
; 输出结果的提示信息
msg DB '偶数元素的个数为 $'
END MAIN
```
这个程序的主体是一个 `Preeven` 过程,该过程通过堆栈传递两个参数:数组的首地址和元素个数。该过程使用循环遍历数组中的每个元素,并使用位运算来判断每个元素是否为偶数。如果是偶数,则递增计数器,最后返回计数器的值。在主程序中,我们将一个测试用的数组传递给 `Preeven` 过程,并输出结果。
阅读全文