汇编实验报告(适合初学者)
更新时间:2023-12-27 00:46:01 阅读量: 教育文库 文档下载
汇编语言程序设计
一、实验目的与要求
1.熟悉汇编语言运行、调试环境及方法。 2.掌握简单汇编语言程序的设计方法。
3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。
二、实验内容
根据下列要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。
1. 若X、Y、R、W是存放8位带符号数字节单元的地址,Z是16位字单元的地址。试编写汇编程序,完成Z<-((W-X)/5-Y)*(R+2)
①.程序算法流程图。
开始初始化AL=(W-X)AL=(W-X)/5CL=(W-X)/5-YAL=(R+2)Z=((W-X)/5-Y)*(R+2)结束
②.源程序清单。
DATA SEGMENT
X DB 1H ;数据定义 Y DB 0H R DB 3H W DB 6H Z DW ? DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA START:MOV AX,DATA
MOV DS,AX ;段寄存器定义 MOV AL,W
SUB AL,X;求(W-X) CBW ;字节转换为字 MOV CL,5
IDIV CL ;(W-X)/5 MOV CL,AL
MOV AL,Y;(W-X)/5-Y SUB CL,AL MOV AL,R
ADD AL,2;(R+2)
IMUL CL;((W-X)/5-Y)*(R+2) MOV [Z],AX
ADD AL,30H;输出结果 MOV DL,AL; MOV AH,2 INT 21H MOV AH,4CH
INT 21H CODE ENDS
END START ③.程序运行结果。
2
④.调试过程中遇到的问题和解决的方法。
还未能实现动态的输入数据,对指令的不熟悉,以至于在程序中经常性出错,得掌握固定的程序功能。
2.试编写一个程序,测试某数是否是奇数。如该数是奇数,则把DL的第0位置1,否则将该位置0。
①.程序算法流程图。
开始AL=XAL右移一位得CF否CF==1是DL与000000001B相或DL与11111110B相与结束 ②.源程序清单。
DATA SEGMENT
X DB 9H;数据定义 DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA START:MOV AX,DATA
MOV DS,AX;段寄存器定义 MOV AL,X
SHR AL,1;利用右移一位得到cf值,JB判断 JB NEXT;为1则为奇数
AND DL,11111110B;偶数DL第一个数置为0 JMP EXIT
NEXT:OR DL,000000001B;奇数DL第一个数置为1 EXIT:MOV AH,4CH
INT 21H CODE ENDS
END START
3
③.程序运行结果。
④.调试过程中遇到的问题和解决的方法。
刚开始想用高级程序语言的方法来判断奇偶数的,但在汇编没实现,通过shr指令直接得到末尾数,判断是否为1来区别奇偶数。
3.键入一数,判断该数是否在3< X < 9范围内,是输出标志0,不是输出-1。
①.程序算法流程图。
开始初始化数据X>=3否是输出-1否X<=9是输出0结束
②.源程序清单。
DATA SEGMENT
X DB 10 ;数据定义 DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA
4
START:MOV AX,DATA
MOV DS,AX ;段寄存器定义 CMP X,3
JG NEXT;大于3转NEXT JMP EXIT;小于3转EXIT NEXT:
CMP X,9
Jl NEXT2;小于9转NEXT2 JMP EXIT;大于9转EXIT
NEXT2:MOV DL,30H;输出0 MOV AH,2 INT 21H MOV AH,4CH INT 21H EXIT:
MOV DL,2DH;输出- MOV AH,2 INT 21H
MOV DL,31H;输出1 MOV AH,2 INT 21H
MOV AH,4CH;退出 INT 21H CODE ENDS
END START ③.程序运行结果。
④.调试过程中遇到的问题和解决的方法。
还未能实现在控制动态输入一个数 再进行判断。代码有点冗余可以精简。
5
4.试编程统计数据区中正数、零和负数的个数。 ①.程序算法流程图。
开始初始化数循环计数值i=0;O=0;Z=0;F=0是X[i]=0否否X[i]>0O++(0数加1)是F++(负数个数加1)Z++(正数个数加1)i=i+1否循环计数值=0?是结束 ②.源程序清单。
DATA SEGMENT
X DB 5,6,7,8,0,-1,-2,-3,-4;数据定义 Y DB 9;存放循环计数值 Z DB 0;存放正数个数 O DB 0;存放0个数 F DB 0;存放负数个数
MESSAGE1 DB 'positive number:$';输出正数个数提示符 MESSAGE2 DB 'negative number:$';输出负数个数提示符 MESSAGE3 DB 'zero number:$';输出数为0个数提示符 DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA
6
START:MOV AX,DATA
MOV DS,AX;段寄存器定义
LEA DI,X;将X数组放到DI寄存器 MOV CL,Y;初始化循环计数值 NEXT:
MOV AL,[DI];开始取数组里的值 CMP AL,0;与0比较
JE ZERO;等于0 则转ZERO JG ZHENG;大于0 则转ZHENG JMP FUSHU;小于0 则转FUSHU ZERO:
INC [O];0的个数加一 ADD DI,1;到数组下一个数 JMP LOOP_HERE ZHENG:
INC [Z];正数个数加一 ADD DI,1;到数组下一个数 JMP LOOP_HERE FUSHU:
INC [F];负数个数加一 ADD DI,1;到数组下一个数 LOOP_HERE:
LOOP NEXT;循环计数自动减一,循环计数不为0继续循环
MOV AH,9;输出正数个数 MOV DX,OFFSET MESSAGE1 INT 21H MOV DL,Z ADD DL,30H MOV AH,2 INT 21H MOV DL,0AH MOV AH,2 INT 21H
MOV AH,9;输出0个个数 MOV DX,OFFSET MESSAGE3 INT 21H MOV DL,O ADD DL,30H MOV AH,2 INT 21H MOV DL,0AH
7
MOV AH,2 INT 21H
MOV AH,9;输出负数个数 MOV DX,OFFSET MESSAGE2 INT 21H MOV DL,F ADD DL,30H MOV AH,2 INT 21H MOV DL,0AH MOV AH,2 INT 21H
MOV AH,4CH;退出 INT 21H CODE ENDS
END START ③.程序运行结果。
④.调试过程中遇到的问题和解决的方法。
对loop指令的跳转不熟悉,以至程序出错;一开始使用BX来缓存数据,但数组不跳转,使用DI指针寄存器来解决。
5. 编程求无符号数字节序列中最大值和最小值。 ①.程序算法流程图。
8
开始初始化数循环计数值i=0BL=X[i](最大值)DL=X[i](最小值)是X[i]>BL否BL=X[i]X[i]
DATA SEGMENT
X DB 5,6,7,8,0;数据定义 Y DB 5
MESSAGEMAX DB 'max number:$';输出最大值提示符 MESSAGEMIN DB 'min number:$';输出最小值提示符 DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA START:MOV AX,DATA
MOV DS,AX ;段寄存器定义
LEA DI,X;将X数组放到DI寄存器
9
MOV CL,Y;初始化循环计数值 MOV BL,X[DI];初始化最大值 MOV DL,X[DI];初始化最小值 NEXT:
MOV AL,X[DI];取数组里的数 CMP AL,BL
JG MMAX;大于最大值 转MMAX CMP AL,DL
JL MMIX;小于最小值 转MMIX ADD DI,1;到数组下一个数 JMP LOOP_HERE MMIX:
MOV DL,AL;更新最小值 ADD DI,1;到数组下一个数 JMP LOOP_HERE MMAX:
MOV BL,AL;更新最大值 ADD DI,1;到数组下一个数 JMP LOOP_HERE LOOP_HERE:
LOOP NEXT;循环计数自动减一,循环计数不为0继续循环 MOV CL,DL;输出用到DL,将值存在CL里 MOV AH,9;输出最大值
MOV DX,OFFSET MESSAGEMAX INT 21H MOV DL,BL ADD DL,30H MOV AH,2 INT 21H MOV DL,0AH MOV AH,2 INT 21H
MOV AH,9;输出最小值
MOV DX,OFFSET MESSAGEMIN INT 21H MOV DL,CL ADD DL,30H MOV AH,2 INT 21H
MOV AH,4CH;退出 INT 21H CODE ENDS
END START ③.程序运行结果。
10
④.调试过程中遇到的问题和解决的方法。
与上面一题的方法类似,循环遍历的时候加上判断,保存最大最小值。 6.编写汇编程序,统计某存储区若干个数据中英文字母的个数,并将结果在屏幕上显示。
①.程序算法流程图。
开始初始化数循环计数值i=0,num=0AL=S[i]否X[i]>=’A’是是X[i]>’Z’否否X[i]>=’a’是否num++是i++X[i]>’z’循环计数值=0?否是输出最大值,最小值结束
11
②.源程序清单。
DATA SEGMENT
S DB 'Y1j3q4';定义字符串
COUNT EQU $-S;获得字符串的字符数 NUM DB 0;用于记录字母的个数
MESSAGE DB 'english alphabet number:$';输出英文字母个数提示符
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START:
MOV AX,DATA
MOV DS,AX;段寄存器定义
MOV DI,OFFSET S;获得s首地址
MOV CX,COUNT;初始化循环计数值 BEGIN:
MOV AL,[DI];开始取字符 CMP AL,'A'
JGE NEXT;比A大于等于继续 JMP RE;比A小,取下一个字符 NEXT:
CMP AL,'Z';和Z比较
JG NEXT2;大于Z,得跟a比较
INC NUM;在到Z之间为大写字母,num加1 JMP RE;取下一个字符 NEXT2:
CMP AL,'a';跟a比较
JGE NEXT4;大于等于a,得跟z比较 JMP RE;介于Z与a之间,取下一个字符 NEXT4:
CMP AL,'z';跟z比较
JG RE;大于z,取下一个字符
INC NUM;在a到z之间为小写字母,num加1 JMP RE;取下一个字符 RE:
INC DI;下一个字符
LOOP BEGIN;循环计数自动减一,循环计数不为0继续循环 MOV AH,9;输出英文字母个数提示符 MOV DX,OFFSET MESSAGE INT 21H MOV AL,NUM; ADD AL,30H MOV DL,AL
12
MOV AH,2 INT 21H
MOV AH,4CH;退出 INT 21H CODE ENDS
END START ③.程序运行结果。
④.调试过程中遇到的问题和解决的方法。
与之前的实验类似,将字符串存入数组中,遍历数组,加上条件判断。
13
正在阅读:
汇编实验报告(适合初学者)12-27
二年级阅读写作1-212-18
我和父亲一起淋雨作文550字06-22
备稿、情景再现、内在语和对象感01-30
大学生法院暑期实习个人心得体会范文五篇03-25
实用测量技巧(摘取去老王笔记)12-23
一道美丽的风景作文800字06-18
小学道德与法治_2.《我们生活离不开他们》教学设计学情分析教材分析课后反思03-21
确权登记发证及数据库建设、监理08-24
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 汇编
- 初学者
- 适合
- 实验
- 报告
- 上海市虹口区教育学院附属中学学生留学找谁办理靠谱
- 理论试题二
- 15亩空地及厂房出租合建共同开发项目可行性研究报告
- 2、新形势下我国反腐败的困难与策略 2
- 离散数学(本科)
- 小小班第二学期幼儿发展评价总结
- 对非公有制企业党建工作的调查与思考
- 压缩空气系统验证方案
- 关于我市产业化扶贫工作情况的调查报告
- 金文老师vb教程笔记(完整版)
- 绘本课《小种子》教学设计 doc
- 对建筑工程安全管理的探讨
- ArcGis10.0详细安装和破解方法
- 基于MATLAB的图像复原
- 有关教师应聘时可能用到的知识
- 王献之简介
- 最新-大学协会会长就职演讲 协会会长就职演讲稿 精品
- 小学语文五年级教学计划 教材分析
- 广东省广州市白云区太和镇2014-2015学年八年级物理下学期期中试题教科版
- 上海市人民政府贯彻国务院关于推进上海加快发展现代服务业和先进制造业建设国际金融中心和国际航运中心意见