北京邮电大学微机原理与接口技术软件件实验报告

合集下载

微机原理与接口技术软件实验报告

微机原理与接口技术软件实验报告

第一篇软件实验实验一存储器块操作实验一、实验目的1. 熟悉KEIL集成调试环境和汇编程序的调试方法。

2. 掌握存储器读写方法;3. 了解内存块的移动方法;二、实验说明实验1 指定某存储器的其实地址和长度,要求能将其内容赋值。

通过该实验学生可以了解单片机读写存储器的方法,同时也可以了解单片机编程、调试方法。

块移动是单片机常用操作之一,多用于大量的数据复制和图像操作。

例程2给出起始地址,用地址加1方法移动块,将指定源地址和长度的存储块移到指定目标为起始地址的单元中去。

移动3000H起始的256个字节到4000H起始的256个字节。

三、实验内容1. 试编程将片内RAM中的数据依次复制到片外RAM。

假设源数据区的首地址为40H,目的数据区的首地址为1000H,数据块长度为10H。

流程图:程序:运行结果:Memory显示,片内RAM中40H开始数据为03 00 29 00 00 00 71 00 AB 00 00 00 1E 00 00 FF,说明测试数据已经成功输入片内RAM。

从片外RAM中1000H位置开始记录为03 00 29 00 00 00 71 00 AB 00 00 00 1E 00 00 FF,说明片内RAM从40H开始的数据已经成功复制到片外从1000H开始的地址。

2. 两个16位无符号二进制数分别存放在片外RAM首址为2000H和2002H单元内,将它们相加,结果存入RAM 30H(低8位)、31H(高8位)。

程序(以0506H+CDEFH为例):0506H和CDEFH已存入片外单元,运算结果D2F5已存入30H和31H中。

四、思考题1. 如何将存储块的内容置成某固定值(例全填充为0FFH)?请用户修改程序,完成此操作。

答:将源程序中的MOV A, #01H 改为MOV A,#0FFH即可。

2. 若源块地址和目标地址有重叠,该如何避免?答:先执行一次数据转移操作将源块地址中的数据先暂存入一块地址与目标地址和源块地址均不重叠的存储区,再执行一次数据转移操作将暂存区的数据移入目标地址区域。

北京邮电大学微机原理软件实验报告

北京邮电大学微机原理软件实验报告

北京邮电大学微机原理软件实验报告信息与通信工程学院微机原理软件实验报告班级:姓名:学号:班内序号:时间:微机原理软件实验·报告实验一DEBUG 的使用一、实验目的1.掌握汇编程序的编辑,编译,连接和执行的全过程;2.学习和掌握用DEBUG 调试程序的方法。

二、实验内容1. 用编辑软件,输入以下汇编语言源程序:DAT SEGMENTA DB 20 ;(自定)B DB 15 ;(自定)Y DB 3 DUP (0)Z DB 0, 0DAT ENDSSTA SEGMENT STACKDW 50 DUP (?)STA ENDSCOD SEGMENTASSUME CS: COD, DS: DATSTAR PROC FARPUSH DSXOR AX, AXPUSH AXMOV AX, DATMOV DS, AXMOV AX, STAMOV SS, AXMOV AL, AMOV Z, ALMOV Z+1, ALCALL SUB1MOV AL,B微机原理软件实验·报告MOV Z,ALMOV Z+1,ALCALL SUB1MOV AL,AMOV Z,ALMOV AL,BMOV Z+1,ALCALL SUB1ADD WORD PTR Y,AXADC BYTE PTR[Y+2],0RETSTAR ENDPSUB1 PROCMOV AL, ZMOV AH, Z+1MUL AHADD WORD PTR Y, AXADC BYTE PTR[Y+2], 0RETSUB1 ENDPCOD ENDSEND STAR2. 通过编译,连接形成可执行文件。

3. 用DEBUG 将可执行文件调入,并进行调试。

1) 用D 命令观察数据区在内存中的具体内容,记录单元A 和B 的具体地址。

2) 用U 命令对目标代码反汇编,观察反汇编后的结果。

注意发现源程序的起始位置,并记录这个起始地址。

3) 用T 命令作单步跟踪调试。

比较每条指令执行后的结果和原来的理解是否一致,得出程序运行的结果:它们是写在什么单元,具体内容是什么;并判断结果是否正确。

北京邮电大学-微机原理硬件实验报告

北京邮电大学-微机原理硬件实验报告

微机原理与接口技术硬件实验报告学院:信息与通信工程学院班级:201******学生姓名:****** ******学号:201******* 201*******班内序号:** **实验一熟悉实验环境及IO的使用一、实验目的:1. 通过实验了解和熟悉实验台的结构,功能及使用方法。

2. 通过实验掌握直接使用Debug 的I、O 命令来读写IO 端口。

3. 学会Debug 的使用及编写汇编程序二、实验内容:1. 学习使用Debug 命令,并用I、O 命令直接对端口进行读写操作,2.用汇编语言编写跑马灯程序。

(使用EDIT 编辑工具)实现功能A.通过读入端口状态(ON 为低电平),选择工作模式(灯的闪烁方式、速度等)。

B.通过输出端口控制灯的工作状态(低电平灯亮)三、实验步骤:1.实验板的IO 端口地址为0E8E0H在Debug 下,I 是读命令。

(即读输入端口的状态---拨码开关的状态)O 是写命令。

(即向端口输出数据---通过发光管来查看)进入Debug 后,读端口拨动实验台上八位拨码开关输入I 端口地址回车屏幕显示 xx 表示从端口读出的内容,即八位开关的状态ON 是0,OFF 是 1 写端口输入 O 端口地址xx (xx 表示要向端口输出的内容)回车查看实验台上的发光二极管状态,0 是灯亮,1 是灯灭。

2. 在Debug 环境下,用a 命令录入程序,用g 命令运行C>Debug -amov dx, 端口地址mov al,输出内容out dx, almov ah, 0bhint 21hor al, aljz 0100int 20h-g运行查看结果,修改输出内容再运行查看结果分析mov ah, 0bhint 21hor al, aljz 0100int 20h该段程序的作用:检测键盘有没有按键,有则返回DOS。

没有继续执行3.利用EDIT 工具编写汇编写跑马灯程序程序实现功能A.通过读入端口状态(ON 为低电平),选择工作模式(灯的闪烁方式、速度等)。

北邮微机原理软件实验报告(精)

北邮微机原理软件实验报告(精)

北邮微机原理软件实验报告(精)微机原理软件实验报告实验二分支、循环程序设计一.实验目的1.启动独立的汇编语言编程。

2.掌握基本分支和循环编程。

3.掌握最简单的DOS函数调用。

二、实验内容1.安排一个数据区,内存有若干个正数,负数和零。

每类数的个数都不超过9。

2.编写一个程序统计数据区中正数,负数和零的个数。

3.将统计结果在屏幕上显示。

三.流程图IV源代码datasegmentzdw0;数据adw0中的零数;大于0 bdw0的数据数;数据中小于0的数量numdw9,8,0,-7,6,-5,-4,3,2,-1,0,-8,-1,9,0,0,1;设定的一组数据,其中4个0,7个正数,6个负数,符合题目要求NDW($-num/2);此组中的数据数量为类型0DB0DH,0ah,‘零的数量:$’类型1DB0DH,0ah,‘格雷特的数量:$'type2db0dh,0ah,'numberoflessthan0:$'locatedwtype0,type1,type2dataendsstacksegmentstackdw128dup(?stackendscodesegmentassumeds:data,ss:stack,cs:codestart:movax,datamovds,axmovax,stack莫夫斯,斧头;初始化DS和Ss以指向stamovbx,offsetnum;将num中第一个数字的地址送入bxmovcx,n;将n中数字个数送入cxloop1:movax[bx];取出num中的第一个数字cmpax,0;与零相比jzifz;判断结果为是0,跳转到ifz处继续执行salax,1jcifl;如果判断结果小于0,跳转到IFLincwordptra;否则,a自加,然后继续执行程序jmpcontinueifl:incwordptrb;B计数加上1jmpcontinueifz:incz;Z计数加1继续:addbx,2;指针+2,继续送入下一数字looploop1;循环cx次判断movcx,3;共显示3个字符串xorbx,bxdisp:movdx,定位[bx]movah,09h;dos09号功能调用,显示字符串int21hmovdx,z[bx]adddx,'0';转换为ASCII码movah,02h;dos02号功能调用,显示字符int21haddbx,2;指针+2(DW)loopdispmovax,4c00hint21h;返回dos系统codeendsendstart五.运行结果Vi预览问题1.十进制数0--9所对应的ascii码是什么?如何将十进制数0--9在屏幕上显示出来?。

微机原理与接口技术实验报告

微机原理与接口技术实验报告

微机原理与接口技术实验报告
本次实验是关于微机原理与接口技术的实验报告,通过本次实验,我们将深入
了解微机原理与接口技术的相关知识,并通过实际操作来加深对这些知识的理解和掌握。

实验一,微机原理。

在本次实验中,我们首先学习了微机的基本原理,包括微机的组成结构、工作
原理和基本功能。

通过实际操作,我们了解了微机的主要组成部分,如中央处理器(CPU)、内存、输入输出设备等,并学习了它们之间的工作原理和相互配合关系。

同时,我们还学习了微机的基本指令系统和数据传输方式,加深了对微机工作原理的理解。

实验二,接口技术。

在接口技术的实验中,我们学习了微机与外部设备之间的接口技术,包括并行
接口、串行接口和通用接口等。

我们通过实际操作,了解了这些接口技术的工作原理和应用场景,学会了如何通过接口技术实现微机与外部设备的数据交换和通信。

实验三,实验综合。

在本次实验的最后,我们进行了一个综合实验,通过实际操作来综合运用微机
原理和接口技术的知识,实现一个具体的功能。

通过这个实验,我们加深了对微机原理与接口技术的理解,掌握了如何将理论知识应用到实际操作中。

总结。

通过本次实验,我们深入学习了微机原理与接口技术的相关知识,并通过实际
操作加深了对这些知识的理解和掌握。

微机原理与接口技术作为计算机科学与技术的基础知识,对我们今后的学习和工作都具有重要意义。

希望通过这次实验,能够对大家的学习和工作有所帮助,并为今后的学习打下坚实的基础。

以上就是本次实验的实验报告,希望对大家有所帮助。

感谢大家的阅读!。

微机原理与接口技术实验报告

微机原理与接口技术实验报告

微机原理与接口技术实验报告实验目的:本次实验旨在熟悉并掌握微机原理与接口技术的相关知识,通过实例操作和分析实验数据,加深对微机原理与接口技术的理解。

一、实验器材与软件1. 硬件器材:计算机主机、外设设备2. 软件工具:操作系统、编程软件二、实验步骤及结果分析1. 实验1:计算机开机自检在实验中,通过开机启动计算机,观察计算机进行自检的过程。

根据显示屏上的自检信息,可以判断计算机硬件的工作状态。

2. 实验2:串口通信测试在本实验中,通过串口通信实现计算机与外设设备之间的数据传输。

首先,将串口接口连接到计算机主机,然后进行相应的设置,包括波特率、数据位、停止位和校验位等。

在实验中,通过编写相应的程序,实现计算机与外设设备之间的数据交互。

通过观察实验结果,判断串口通信是否正常。

3. 实验3:并口通信测试本实验旨在通过并行口通信实现计算机与外设设备之间的数据传输。

首先,将并行口接口连接到计算机主机。

然后,根据实验要求进行相应的设置,包括数据总线的宽度、传输模式等。

通过编写程序,实现计算机与外设设备之间的数据交互。

观察实验结果,判断并口通信是否正常。

4. 实验4:USB接口测试在本实验中,通过USB接口实现计算机与外设设备之间的数据传输。

首先,将USB接口连接到计算机主机。

然后,在计算机中安装相应的驱动程序。

通过编写程序,实现计算机与外设设备之间的数据交互。

观察实验结果,判断USB接口是否正常工作。

5. 实验5:网络接口测试本实验旨在通过网络接口实现计算机之间的数据传输。

首先,将计算机连接到局域网中的其他计算机。

然后,进行相应的设置,包括IP地址、子网掩码等。

通过编写程序,实现计算机之间的数据交互。

观察实验结果,判断网络接口是否正常工作。

三、实验总结通过本次实验,我对微机原理与接口技术有了更深入的了解,掌握了串口、并口、USB接口和网络接口等常用接口的使用方法。

通过实验的操作和分析,我对接口通信的原理和实现方式有了更详细的了解,对计算机与外设设备之间的数据传输有了更清楚的认识。

北京邮电大学微机原理软件

北京邮电大学微机原理软件

微机原理软件实验报告班级:姓名:学号:班内序号:指导老师:实验二分支、循环程序设计一、实验目的1.开始独立进行汇编语言程序设计;2.掌握基本分支,循环程序设计;3.掌握最简单的 DOS 功能调用.二、实验内容1.安排一个数据区,内存有若干个正数,负数和零.每类数的个数都不超过 9.2.编写一个程序统计数据区中正数,负数和零的个数.3.将统计结果在屏幕上显示.4.(选作)统计出正奇数,正偶数,负奇数,负偶数以及零的个数.三、实验设计四、源代码DATA SEGMENTARRAY DB -1,-2,-3,-4,-5,-6,0,1,2,3,5,4,5,6,0COUNT EQU $-ARRAYPOSI DB 0 ;正数NEGA DB 0 ;负数ZERO DB 0 ;零ODDPOS DB 0 ;正奇数EVENPOS DB 0 ;正偶数ODDNEG DB 0 ;负奇数EVENNEG DB 0 ;负偶数STRING1 DB '正数个数:','$' ;把最后的统计结果显示在屏幕上STRING2 DB '负数个数:','$' ;下同STRING3 DB '零的个数:','$'STRING4 DB '正奇数个数:','$'STRING5 DB '正偶数个数:','$'STRING6 DB '负奇数个数:','$'STRING7 DB '负偶数个数:','$'DATA ENDSSTACK SEGMENT STACK 'STACK'DB 100 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV CX,COUNTLEA BX,ARRAY ;把数据段的偏移地址给BXLOOP1: CMP BYTE PTR [BX],0JGE POSINC NEGA ;统计负数TEST BYTE PTR [BX],01H ;利用奇数的二进制表示式最后一位必为1的特JZ ENEG ;点来判断奇偶INC ODDNEG ;统计负奇数JMP NEXTENEG: INC EVENNEG ;统计负偶数JMP NEXTPOS: JZ ZERINC POSI ;统计正数TEST BYTE PTR [BX],01HJZ EPOSINC ODDPOS ;统计正奇数JMP NEXTEPOS: INC EVENPOS ;统计正偶数JMP NEXTZER: INC ZERO ;统计零NEXT: INC BXLOOP LOOP1MOV AH,09H ;显示正数MOV DX,SEG STRING1MOV DS,DXLEA DX,STRING1INT 21HMOV AH,02HMOV DL,POSIADD DL,30HINT 21HMOV DL,0AH ;显示空格INT 21H ;显示回车MOV DL,0DHINT 21HMOV AH,09H ;显示负数MOV DX,SEG STRING2MOV DS,DXLEA DX,STRING2INT 21HMOV AH,02HMOV DL,NEGAADD DL,30HINT 21HMOV DL,0AHINT 21HMOV DL,0DHINT 21HMOV AH,09H ;显示零MOV DX,SEG STRING3MOV DS,DXLEA DX,STRING3INT 21HMOV AH,02HMOV DL,ZEROADD DL,30HINT 21HMOV DL,0AHINT 21HMOV DL,0DHINT 21HMOV DL,0AHINT 21HMOV DL,0DHINT 21HMOV AH,09H ;显示正奇数MOV DX,SEG STRING4MOV DS,DXLEA DX,STRING4INT 21HMOV AH,02HMOV DL,ODDPOSADD DL,30HINT 21HMOV DL,0AHINT 21HMOV DL,0DHINT 21HMOV AH,09H ;显示正偶数MOV DX,SEG STRING5MOV DS,DXLEA DX,STRING5INT 21HMOV AH,02HMOV DL,EVENPOSADD DL,30HINT 21HMOV DL,0AHINT 21HMOV DL,0DHINT 21HMOV AH,09H ;显示负奇数MOV DX,SEG STRING6MOV DS,DXLEA DX,STRING6INT 21HMOV AH,02HMOV DL,ODDNEGADD DL,30HINT 21HMOV DL,0AHINT 21HMOV DL,0DHINT 21HMOV AH,09H ;显示负偶数MOV DX,SEG STRING7MOV DS,DXLEA DX,STRING7INT 21HMOV AH,02HMOV DL,EVENNEGADD DL,30HINT 21HMOV DL,0AHINT 21HMOV DL,0DHINT 21HMOV AX,4C00HINT 21HCODE ENDSEND START五、程序运行结果六、预习题1.十进制数 0 -- 9 所对应的 ASCII 码是什么? 如何将十进制数 0 -- 9 在屏幕上显示出来?答:十进制数0—9对应的ASCII码是30H—31H。

北邮微机原理软件实验报告

北邮微机原理软件实验报告

实验一1.实验要求:编一程序,将地址偏移量为100H单元开始的256个单元分别写入00H,01H,……,FFH数据;统计写入的数据块的0元素、正元素、负元素的个数,并分别将统计结果送入上述数据块后的三个单元中;用DOS功能调用显示上面数据快各单元(包括统计结果)内容,要求每行显示16个数据,两个数据之间用空格隔开。

程序设计思路:分配256个单元存放数据00H,01H,……,FFH,3个单元存放统计结果。

约定:DH存放0的个数,BH存放负数的个数,BL存放正数的个数,然后进行将256个数据一一与0进行比较,得到 DH、BH、BL。

将DH、BH、BL 存入SI的最后三个单元。

最后在以高、低4位,依次将每个单元的数据输出。

2. 程序流程:4.子程序:DISP PROC NEAR ;Show number MOV DL,AL MOV AH,2 INT 21H RET DISP ENDP开始初始化;SI 前256个单元存放00 H……FFH;CX=256;DH=0;BX=0;CMP AL ,0;MOV AL ,[SI] CX=0?将DH ,BX 存入SI ;INC SI ;CX=259;YESINC DH ;INC BHINC BL显示高4位显示低4位; 添加空格; INC SI ;BH=0??BH=16;CX=0?SF=ELSZF=1N ONO YE SN O终止YE实验二1.实验要求:编一程序,把键入的十六进制数转换成十进制,要求:(1)在屏幕上显示转换的十进制数,键入的最大值为FFFFH;(2)若键入非16进制的数,则提示错误;(3)程序中至少用一个子程序和宏命令。

2.程序设计思路:首先判断键入的字符是否为合法的十六进制字符,若是十六进制,将其转化成二进制数值,放入BX中,然后接收下一个字符,并将上一个字符左移4位,再讲此时的BX与接收到的BX相加,直到键入回车,停止接收。

然后通过除以10000,依次将余数除以1000、100、10、1,将二进制转化为十进制,再显示出来。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

信息与通信工程学院微机原理软件实验报告班级:学号:姓名:序号:时间:2015-11-6——2015-11-29实验二分支,循环程序设计一、实验目的:1.开始独立进行汇编语言程序设计;2.掌握基本分支,循环程序设计;3.掌握最简单的 DOS 功能调用.二、实验内容:1.安排一个数据区(数据段),内存有若干个正数,负数和零.每类数的个数都不超过 9。

2.编写一个程序统计数据区中正数,负数和零的个数。

3.将统计结果在屏幕上显示。

4.(选做)统计出正奇数,正偶数,负奇数,负偶数以及零的个数。

三、预习题:1、十进制数 0 -- 9 所对应的 ASCII 码是什么? 如何将十进制数 0 -- 9 在屏幕上显示出来?答:十进制数0——9对应的二进制数为30H——39H。

要屏显0-9的数码,只需将AH 置成02H(DOS功能调用),然后将要显示的数码的ASCII码存进DL里,然后执行INT 21H 就可以打印字符。

或者,若这些数码是以字符串的格式存储,则可以将AH置成09H,(最后以’$’字符结束,)然后将串首地址传给DS,然后执行INT 21H就可以打印字符串。

2、如何检验一个数为正,为负或为零? 你能举出多少种不同的方法?答:可以将待检验数与0比较(使用CMP指令后用JZ指令判断ZF是否为零),也可以将待检验数与80H相与,判断ZF的值。

二是和0相比是否相等,然后用该数(假设为8位)和10000000相与,取出符号位判断,可区分正负。

本次试验中我使用的方法是与0比较,所有判决方法的核心思想要么是直接和0相比,要么使用逻辑或移位运算,取出符号进行判断。

四、实验过程:流程图:代码:DATA SEGMENT ;数据段BUFF DW 4,0,37,99,-9,-2,-87,0,76,11,0,-34,-11,0,22 ;待判断数据COUNT EQU $-BUFF ;COUNT的值为BUFF所占的字节数POSI DB ? ;正数ZERO DB ? ;负数NEGT DB ? ;0POSIEVEN DB 0 ;正偶数POSIODD DB ? ;正奇数NEGTEVEN DB 0 ;负偶数NEGTODD DB ? ;负奇数POSICHAR DB 'Positive: $' ;用于打印提示的字符串定义NEGTCHAR DB 'Negtive: $'ZEROCHAR DB 'Zero: $'EVENCHAR DB ' Even: $'ODDCHAR DB ' Odd: $'CR DB 0DH,0AH,'$' ; 回车换行的ASCII码DATA ENDSSTACK SEGMENT STACK 'STACK' ;堆栈段DB 100 DUP(?)STACK ENDSCODE SEGMENT ;代码段ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKBEGIN:PUSH DSXOR AX,AXPUSH AX ;返回DOSMOV AX,DATAMOV DS,AX ;给DS真正赋值MOV CX,COUNTSHR CX,1 ;相当于除2, 正好为BUFF中的数据个数MOV DX,0 ;设定初值:DH及DL分别为等于、大于零的个数MOV AH,0 ;设定初值:AH为小于零的个数LEA BX,BUFF ;把BUFF中的第一个数存到BXAGAIN: CMP WORD PTR [BX],0 ;BUFF中的第一个数与0进行比较JGE POSITIVE ;大于等于0时转POSITIVEINC AH ;统计小于零的个数ADD WORD PTR [BX],1AND NEGTEVEN,[BX] ;和1与之后的结果加到负偶数中JMP NEXTPOSITIVE: JZ ZERO ;等于0时转ZEROINC DL ;统计大于零的个数ADD WORD PTR [BX],1AND POSIEVEN,[BX] ;和1与之后的结果加到正偶数中JMP NEXTZERO: INC DH ;统计等于零的个数NEXT INC BX ;修改地址指针INC BXLOOP AGAIN ;循环判断CX不为0MOV POSI,DL ;保存结果,正数MOV ZERO,DH ;0MOV NEGT,AH ;负数MOV AH,POSIMOV AL,POSIEVENSUB AH,AL ;计算正奇数个数MOV POSIODD,AHMOV AH,NEGTMOV AL,NEGTEVENSUB AH,ALMOV NEGTODD,AH ;计算负奇数个数PRINT: ;打印正数提示符和正数(奇偶)个数MOV AH,09HMOV DX,OFFSET POSICHARINT 21HMOV AH,02HMOV DL,POSIADD DL,30HINT 21HMOV AH,09HMOV DX,OFFSET EVENCHARINT 21HMOV AH,02HMOV DL,POSIEVENADD DL,30HINT 21HMOV AH,09HMOV DX,OFFSET ODDCHARINT 21HMOV AH,02HMOV DL,POSIODDADD DL,30HINT 21HMOV DX,OFFSET CRMOV AH,09H;打印负数提示符和负数(奇偶)个数MOV AH,09HMOV DX,OFFSET NEGTCHARINT 21HMOV AH,02HMOV DL,NEGTADD DL,30HINT 21HMOV AH,09HMOV DX,OFFSET EVENCHARINT 21HMOV AH,02HMOV DL,NEGTEVENADD DL,30HINT 21HMOV AH,09HMOV DX,OFFSET ODDCHARINT 21HMOV AH,02HMOV DL,NEGTODDADD DL,30HINT 21HMOV DX,OFFSET CRMOV AH,09HINT 21HMOV AH,09HMOV DX,OFFSET ZEROCHARMOV AH,02HMOV DL,ZEROADD DL,30H INT 21HCODEENDS END BEGIN ;代码段结束结果分析:数据区待统计的数据为:4,0,37,99,-9,-2,-87,0,76,11,0,-34,-11,0,22实验结果如下图所示:本实验意在练习基本的分支、循环结构。

关键的点在于和0比较,区分正负和零,然后在正数和负数中判断奇偶,这里巧妙地使用了和1与之后结果加和到偶数中,最后利用统计的数的个数减去偶数得奇数的方法。

使得程序更加流畅和简洁,思路也更清晰。

五、实验总结汇编程序同高级语言一样,在写代码前都要对实验做分析,设计好思路,这样写代码时思路才比较清晰,代码也比较容易写和查找错误。

此次实验主要是循环和分支,也是用汇编语言编写的第一个程序,让我熟悉了汇编语言的基本写法,对很多理论课学到的知识都有了更深的了解。

了解了怎样利用判别条件在不同的分支中跳转,循环的判别及循环过程。

总而言之,此次实验收获还是很多的,不仅加深了对这两种结构的了解,提升了自己设计程序的能力,并且也提升了自己排除bug 的能力,进一步熟悉了第一个实验的整个流程。

实验三代码转换程序设计一、实验目的:1.掌握几种最基本的代码转换方法;2.运用子程序进行程序设计.二、实验内容:1.从键盘上输入若干两位十进制数,寻找其中的最小值,然后在屏幕上显示出来.2.两个十进制数之间的分隔符,输入结束标志自定,但要在报告中说明.3.对输入要有检错措施,以防止非法字符输入,并有适当的提示.4.将整个程序分解为若干模块,分别用子程序实现.在报告中要给出模块层次图.三、预习题:1.如何将输入的两个字符(0 -- 9)变为十进制或二进制数?答:两字符减去0的ASCII码(30H)后,高位数乘以十加上低位数,即变为十进制数。

2.如何将选出的最小值(二进制或十进制)变为 ASCII 码再进行显示?答:本次实验是直接读入并存储数字的ASCII码,比较其大小,然后直接输出ASCII 码。

3.你觉得采用二进制运算还是十进制运算更适合于这个实验?答:相比二进制,采用十进制运算更简洁,但需要和ASCII码进行转换。

可直接使用数字对应的ASCII比较,分别比较十位和个位,最后直接输出字符即可。

四、实验过程:模块层次图:流程图:代码:DATA SEGMENT ;数据段INPUT DB 100 DUP(?)MINTMP DB '9'-30H,'9'-30H ; 置最小值的初始值为99COUNT DB 0DIFERROR DB 0D; 用于判断调用输入子程序是否有错WELCOME DB 'Please input numbers:','$' ;提示信息字符串 OUTTIP DB 'Minimum is :','$'CR DB 0DH,0AH,'$'; 回车换行ERROR1 DB 'ERROR:Character is not valid!','$';各种错误输入提示 ERROR2 DB 'ERROR:Number must contains two digits!','$'ERROR3 DB 'ERROR:Number is empty!','$'ERROR4 DB 'ERROR:Need separate char!','$'DATA ENDSSTACK SEGMENT STACK 'STACK' ;堆栈段DB 100 DUP(?)STACK ENDSCODE SEGMENT ;代码段ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA BEGIN PROC FARPUSH DS ;返回DOSXOR AX,AXPUSH AXMOV AX,DATA ;真正给DS赋值MOV DS,AXMOV DX,OFFSET WELCOME; 调用欢迎提示CALL PRINT ;调用子程序MOV DX,OFFSET CR; 回车换行CALL PRINTCALL MAIN; 获取用户输入CMP IFERROR,0; 判断输入过程是否有错JNZ BACK; 错误则直接返回DOSMOV DX,OFFSET CR; 回车换行CALL PRINTCALL FINDMIN; 查找最小数MOV DX,OFFSET OUTTIP; 调用输出提示CALL PRINTMOV AH,02HMOV DL,MINTMP; 输出最小值的十位ADD DL,30HINT 21HMOV AH,02HMOV DL,MINTMP[1]; 输出最小值的个位ADD DL,30HINT 21HBEGIN ENDP;获取输入,出口参数为IFERROR,表示是否有错MAIN PROCPUSH AX; 保存现场PUSH BXPUSH CXPUSH DXPUSH DIMOV DI,0; 数组偏移地址MOV CX,0; 标识数字的位数GETLOOP:MOV AH,01H; 从键盘读取一个字符INT 21HCMP AL,0DH; 和回车比较JE EXIT1; 是回车则结束输入CMP CX,0; 数字位数为空JE CMPSPACE0CMP CX,1; 数字位数为1JE CMPSPACE1CMP CX,2; 数字位数为2JE CMPSPACE2CMPSPACE0: CMP AL,20HJE GETLOOP; 数字位数为0且输入空格则忽略,继续输入JMP ASCBIN; 不是空格就读取该字符CMPSPACE1: CMP AL,20HJE ERR2; 数字位数为1且输入空格则位数不是两位数出错JMP ASCBIN; 否则读取该字符CMPSPACE2: CMP AL,20HJNE ERR4; 数字位数为2后,不输入空格则分隔符错误XOR CX,CX; 输入空格则清零重新计数JMP GETLOOPASCBIN: SUB AL,30H; 化为二进制数字JL ERR1; 小于则无效字符CMP AL,9; 和9比较JG ERR1; 大于9则是无效字符MOV INPUT[DI],AL; 保存输入的数INC COUNT; 统计输入的数字个数,为判断是否输入为两位数INC DI; 向后移动数组INC CXJMP GETLOOPERR1: MOV IFERROR,1; 输出错误1MOV DX,OFFSET ERROR1CALL PRINTJMP RETURNERR2: MOV IFERROR,1; 输出错误2MOV DX,OFFSET ERROR2CALL PRINTJMP RETURNERR3: MOV IFERROR,1; 输出错误3MOV DX,OFFSET ERROR3CALL PRINTJMP RETURNERR4: MOV IFERROR,1; 输出错误4MOV DX,OFFSET ERROR4CALL PRINTJMP RETURNEXIT1: MOV BL,COUNT; 判断输入数的个数是否为零CMP BL,0JE ERR3;输入数目为0则输出错误并退出AND BL,01H; 判断数字是否为两位数CMP BL,0JNE ERR2;输入数字个数为奇数则出错RETURN: POP DI; 恢复现场POP DXPOP CXPOP BXPOP AXRETMAIN ENDP;回车换行输出字符串,入口参数为DXPRINT PROCPUSH AXMOV AH,09HINT 21HPOP AXRETPRINT ENDP;查找最小的数子程序FINDMIN PROCPUSH DI; 保护现场PUSH AXPUSH CXMOV DI,-2; 数组下标MOV CL,COUNT; 把数组长度移入CXMOV AL,CLCBWMOV CX,AXLOP: ADD DI,2CMP CX,DI; 是否已经比较完毕JE EXIT2; 如果比较完毕所有数则退出MOV AH,INPUT[DI];否则接着比较,移入十位数MOV AL,INPUT[DI+1]; 移入个位数CMP AH,MINTMP; 比较十位数,MINTMP低地址为十位JA LOP ;如果MINTMP小,则直接比较下一个数JE HIGHEQU;如果十位数相等,比较个位数,再否则十位大就直接存储STOMIN: MOV MINTMP,AHMOV MINTMP[1],ALJMP LOPHIGHEQU: CMP AL,MINTMP[1]; 比较个位数JNB LOP; 个位数比MINTMP大则跳到下一个数JMP STOMIN; 否则将当前数写入为MINTMPEXIT2: POP CXPOP AXPOP DIRETFINDMIN ENDPCODE ENDSEND BEGIN结果分析:实验以空格为分隔符,空格的个数不限制,以回车为输入结束标志符。

相关文档
最新文档