编制计算N个(N<50)偶数之和(2+4+6+.…)的子程序和接收输入N及将结果送显示器显示的主程序。要求用以下3种方法编写(1)主程序和子程序在同一代码段;(2)在同一模块但不在同一代码段:(3)各自独立成模块。
时间: 2024-02-13 17:06:09 浏览: 16
以下是三种方法的代码:
(1) 主程序和子程序在同一代码段:
```assembly
.MODEL SMALL
.STACK 100H
.DATA
N DW ?
SUM DW ?
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
; 接收输入
MOV AH, 01H
INT 21H ; 读取键盘输入的 ASCII 码
SUB AL, 30H ; 转换成数字
MOV N, AX
; 计算偶数之和
MOV AX, 0 ; 初始化累加器
MOV CX, N ; 循环次数为 N
MOV BX, 2 ; 偶数从 2 开始
LOOP_START:
ADD AX, BX ; 累加偶数
ADD BX, 2 ; 下一个偶数
LOOP LOOP_START
; 将结果送显示器显示
MOV SUM, AX
CALL DISPLAY_SUM
MOV AH, 4CH
INT 21H
MAIN ENDP
DISPLAY_SUM PROC
; 将 AX 中的数值转换成字符串
PUSH AX
MOV CX, 0
MOV BX, 10
CONVERT_LOOP:
XOR DX, DX
DIV BX
ADD DL, 30H
PUSH DX
INC CX
CMP AX, 0
JNE CONVERT_LOOP
; 将字符串送显示器显示
MOV AH, 02H
PRINT_LOOP:
POP DX
INT 21H
LOOP PRINT_LOOP
; 换行
MOV DL, 0AH
MOV AH, 02H
INT 21H
MOV DL, 0DH
MOV AH, 02H
INT 21H
RET
DISPLAY_SUM ENDP
END MAIN
```
(2) 在同一模块但不在同一代码段:
代码段:
```assembly
.MODEL SMALL
.STACK 100H
.DATA
N DW ?
SUM DW ?
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
; 接收输入
MOV AH, 01H
INT 21H ; 读取键盘输入的 ASCII 码
SUB AL, 30H ; 转换成数字
MOV N, AX
; 计算偶数之和
MOV AX, 0 ; 初始化累加器
MOV CX, N ; 循环次数为 N
MOV BX, 2 ; 偶数从 2 开始
CALL SUM_EVEN_NUMBERS
; 将结果送显示器显示
MOV SUM, AX
CALL DISPLAY_SUM
MOV AH, 4CH
INT 21H
MAIN ENDP
END MAIN
; 子程序:计算偶数之和
PROC SUM_EVEN_NUMBERS
PUSH AX
PUSH CX
PUSH BX
MOV AX, 0 ; 初始化累加器
LOOP_START:
ADD AX, BX ; 累加偶数
ADD BX, 2 ; 下一个偶数
LOOP LOOP_START
POP BX
POP CX
POP AX
RET
ENDP
; 子程序:将结果送显示器显示
PROC DISPLAY_SUM
; 将 AX 中的数值转换成字符串
PUSH AX
MOV CX, 0
MOV BX, 10
CONVERT_LOOP:
XOR DX, DX
DIV BX
ADD DL, 30H
PUSH DX
INC CX
CMP AX, 0
JNE CONVERT_LOOP
; 将字符串送显示器显示
MOV AH, 02H
PRINT_LOOP:
POP DX
INT 21H
LOOP PRINT_LOOP
; 换行
MOV DL, 0AH
MOV AH, 02H
INT 21H
MOV DL, 0DH
MOV AH, 02H
INT 21H
RET
ENDP
```
(3) 各自独立成模块:
主程序:
```assembly
.MODEL SMALL
.STACK 100H
.DATA
N DW ?
SUM DW ?
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
; 接收输入
MOV AH, 01H
INT 21H ; 读取键盘输入的 ASCII 码
SUB AL, 30H ; 转换成数字
MOV N, AX
; 调用子程序计算偶数之和
CALL SUM_EVEN_NUMBERS
; 将结果送显示器显示
MOV SUM, AX
CALL DISPLAY_SUM
MOV AH, 4CH
INT 21H
MAIN ENDP
INCLUDE SUM_EVEN_NUMBERS.ASM
INCLUDE DISPLAY_SUM.ASM
END MAIN
```
子程序1:SUM_EVEN_NUMBERS.ASM
```assembly
; 子程序:计算偶数之和
PUBLIC SUM_EVEN_NUMBERS
SUM_EVEN_NUMBERS PROC
PUSH AX
PUSH CX
PUSH BX
MOV AX, 0 ; 初始化累加器
LOOP_START:
ADD AX, BX ; 累加偶数
ADD BX, 2 ; 下一个偶数
LOOP LOOP_START
POP BX
POP CX
POP AX
RET
SUM_EVEN_NUMBERS ENDP
```
子程序2:DISPLAY_SUM.ASM
```assembly
; 子程序:将结果送显示器显示
PUBLIC DISPLAY_SUM
DISPLAY_SUM PROC
; 将 AX 中的数值转换成字符串
PUSH AX
MOV CX, 0
MOV BX, 10
CONVERT_LOOP:
XOR DX, DX
DIV BX
ADD DL, 30H
PUSH DX
INC CX
CMP AX, 0
JNE CONVERT_LOOP
; 将字符串送显示器显示
MOV AH, 02H
PRINT_LOOP:
POP DX
INT 21H
LOOP PRINT_LOOP
; 换行
MOV DL, 0AH
MOV AH, 02H
INT 21H
MOV DL, 0DH
MOV AH, 02H
INT 21H
RET
DISPLAY_SUM ENDP
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.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)