【快速解决】2022、2023年微机原理程序设计真题讲解
1.设变量x存放了10个字节型有符号数,找出变量x中的最小数,并把它存放到变量y中。要求写出完整的源程序(数据段中定义两个变量,代码完成相关操作)
; 数据段定义
DATA SEGMENT ; 数据段开始
X DB 1, -3, 45, -4, 120, -24, 23, 56, -63, 33 ; 定义数据数组 X,包含10个字节的整数
Y DB ? ; 定义变量 Y,用于存储结果(最小值)
DATA ENDS
; 代码段定义
CODE SEGMENT ; 代码段开始
ASSUME DS:DATA, CS:CODE ; 指定数据段和代码段的假设
START:
MOV AX, DATA ; 将数据段的地址加载到 AX 寄存器
MOV DS, AX ; 将 AX 的值传送给 DS 寄存器,初始化数据段
MOV CL, 10 ; 将 CL 设置为 10,表示要比较的元素数量(数组的长度)
LEA SI, X ; 将数组 X 的地址加载到 SI 寄存器
MOV AL, [SI] ; 将第一个元素加载到 AL 中作为初始最小值
AGAIN:
INC SI ; 移动到下一个元素
DEC CL ; 减少比较次数
CMP CL, 0 ; 检查是否还有元素要比较
JE DONE ; 如果 CL 为 0,跳转到 DONE
MOV BL, [SI] ; 将当前元素加载到 BL 中
CMP AL, BL ; 比较 AL(当前最小值)和 BL(当前元素)
JLE AGAIN ; 如果 AL <= BL,跳回 AGAIN(继续比较)
MOV AL, BL ; 如果 BL < AL,更新最小值
JMP AGAIN ; 跳回 AGAIN
DONE:
MOV Y, AL ; 将找到的最小值存储到 Y 中
MOV AH, 4CH ; 退出程序的系统调用
INT 21H ; 调用中断,终止程序
CODE ENDS ; 代码段结束
END START ; 程序入口
2、设变量Score中存放有某班30个学生某门课程的考试成绩,编程实现30个同学该门课程的平均成绩,并把结果存放到变量Gpa中。
; 数据段定义
DATA SEGMENT
Score DW 45, 56, 74, 84, 66, 73, 88, 92, 77, 65, 70, 80, 90, 85, 78, 67, 82, 81, 76, 75, 68, 69, 72, 74, 91, 94, 89, 83, 95, 88
Gpa DB ? ; 可存放0-255之间的平均值
DATA ENDS
; 代码段定义
CODE SEGMENT
ASSUME DS:DATA, CS:CODE
START:
MOV AX, DATA ; 将数据段的地址加载到 AX
MOV DS, AX ; 将 AX 的值赋给 DS,初始化数据段
MOV CL, 30 ; 控制循环次数为30
LEA SI, Score ; 将数组 Score 的地址加载到 SI
XOR AX, AX ; 清零 AX,为累加做准备
AGAIN:
ADD AX, [SI] ; 将当前成绩加到 AX
ADD SI, 2 ; SI 指向下一个成绩(DW 占 2 个字节)
DEC CL ; 减少循环计数
JNZ AGAIN ; 如果 CL 不为 0,继续循环
MOV DL, 30 ; 除数 30
MOV AH, 0 ; 清零 AH,为除法准备
DIV DL ; 除法,AX 除以 30,商在 AL 中
MOV Gpa, AL ; 将平均成绩存入 Gpa
MOV AH, 4Ch ; 准备结束程序
INT 21H ; 调用 DOS 中断,结束程序
CODE ENDS
END START ; 程序入口
1、请编写完整汇编语言程序龙计算某班级学生考试成绩(0-100分)的平均分班级共 25名学生,学生的考试成绩存放在数组 SCORE 中,平均值放在变量AVE中。
; 数据段定义
DATA SEGMENT
; 定义25个学生成绩,使用DB伪指令初始化成绩数组
SCORE DB 97,83,74,67,...,85 ; 用 DB 指令定义一个包含25个成绩的数组
; 定义一个变量AVE,用于存储平均成绩,初始值未知
AVE DB ? ; 定义变量 AVE,未初始化
DATA ENDS
; 代码段定义
CODE SEGMENT
; 假定CS寄存器关联CODE段,DS寄存器关联DATA段
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA ; 将数据段地址加载到 AX 寄存器
MOV DS,AX ; 将 AX 的值赋给 DS 寄存器,初始化数据段
XOR AX,AX ; 清零 AX 寄存器,为后续成绩累加做准备
MOV CX,25 ; 设置 CX 寄存器值为 25,用于控制循环次数
LEA SI,SCORE ; 将 SCORE 数组的首地址加载到 SI 寄存器
CLC ; 清除 CF 进位标志位,确保 ADC 指令的正确执行
AGAIN:
ADD AL,[SI] ; 将当前 SI 指向的成绩加到 AL 寄存器 AL=AL+ [SI]=(254+67)%255=66
;CF=1
ADC AH,0 ; 加上进位标志位,结果存入 AH 寄存器1 AH = AH+CF=0+1=1
INC SI ; SI 寄存器指向下一个成绩
LOOP AGAIN ; 循环直到 CX 减到 0
MOV CL,25 ; 将 25 加载到 CL 寄存器,用于除法操作
DIV CL ; AX 除以 CL,结果的商存入 AL,余数存入 AH ax(ah,al)
MOV AVE,AL ; 将 AL 寄存器的值(平均成绩)存入 AVE 变量
MOV AH,4CH ; 设置 AH 寄存器为 4CH,用于调用 DOS 中断,结束程序
INT 21H ; 调用 DOS 中断,结束程序
CODE ENDS
END START ; 程序入口
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有