微机实验报告(1)

合集下载

微机实验报告

微机实验报告

微机实验报告第⼀次实验1.写出完成下列功能的指令序列(1)传送20H到AL寄存器MOV AL , 20H(2)将(AL)*2 MOV AL , 02H MUL AL (3)传送25H到BL寄存器MOV BL , 25H (4)(AL)*BL MUL BL问最后结果(AX)=?AX=0940H2.分别写出完成下列指令要求的指令(1)将BX的低4位清零AND BX , F0H(2)将AX的⾼4位置1 OR AX , F0H(3)将DX的低4位取反;XOR DX , 0FH(4)将CX的中间⼋位清零AND CX , 0FF0H(5)将AX中与BX中的对应位不相同的位均置1 XOR AX , BX3.上机运⾏下⾯指令序列,分析运⾏后(AX)=?mov cl , 8sar ax ,cldec axmov cx ,8mul cxax=210.9h4. 4.设DS=当前段地址,BX=0300H,SI=0002H,请⽤DEBUG的命令将存储器偏移地址300-304H连续单元装⼊0AH0BH0CH0DH0EH。

在DEBUG状态下送⼊下⾯的程序,并⽤单步执⾏的⽅法,分析每条指令原源地址的形成过程?当数据传送完毕时,AX中的内容是什么?8.编程:求两个数的平均值。

这两个数分别放在X单元和Y单元中,⽽平均值放在Z单元中。

即Z=(X+Y)/2 data segmentx db 2y db 6z db ?data endscode segmentassume cs:code, ds;datastart:mov ax, datamov ds,axmov al, xmov ah,0add al,ymov bl,2div blint 21hcode endsend start9.输⼊下⾯源程序,并对程序进⾏会变,连接,调式并说明程序的功能。

data segment number dw 0168hdata endscode segmentassume cs;code, ds: dataorg 0100hstart:mov ax, datamov ds, axmov dx,0mov bx, 0001hmov di, 8000hmov si, 0mov ax, numbermov cx, 16next;test ax, bxjz continueor dx, diinc sicontinue:ror di, 1mov ah,4chint 21hcode endsend start1.编写程序: 求1+2+3+…..+100的和data segment number db 01hdata endscode segmentassume cs:code , ds:datastart:mov ax , datamov ds , axmov ax , datamov bx , numbermov ax , 0mov cx , 64hnext:add ax ,bxinc bxloop nextmov ah , 4chint 21hcode endsend start2.在内存中tab为⾸的地⽅存有1-9的平⽅值,从键盘输⼊⼀个数(1-9),将该数存⼊X单元,⽴⽅值存⼊XXX单元中data segmenttab db 0,1,4,9,16,25,36,49,64,81x db 10dup(?)xxx db 10dup(?)data endscode segmentassume cs:code ,ds: datastart:mov ax ,datamov ds , ax mov ax , datamov cx ,09hnext:mov ah , 1int 21hand ah ,0fhmov bx ,ahmov si , offset tabmov sp , offset xmov di , offset xxxmov dx , byte ptr[bx+si]mov al, blmul dxmov [bx+di] ,axmov [sp+bx] , bxmov ah , 4chint 21hcode endsend start第⼆次实验顺序程序设计从键盘输⼊两个1位⼗进制数,求这两个数的和,并将结果显⽰在屏幕上data segment infor1 db 'please input the first data (<10):$'infor2 db 0ah,0dh,'please input the second data (<10):$'infor3 db 0ah,0dh,'the result is:$'data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov dx,offset infor1mov ah,9int 21hmov ah,1int 21hand al,0fhmov ah,00000000000000000000mov bl,almov dx,offset infor2int 21hmov ah,1int 21hand ax,000fhadd al,blaaaor ax,3030hpush axmov dx,offset infor3 mov ah,9int 21hpop axmov dl,ahpush axmov ah,2int 21hpop axmov dl,almov ah,2int 21hmov ah,4chint 21hcode endsend startresult db 0ah,0dh,'cube result is :$' data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov dx,offset numbermov ah,9int 21hmov ah,1int 21hand ax,000fhmov bx,axmul blmul blmov cl,64hdiv clor al,30hpush axmov dx,offset resultmov ah,9int 21hpop axmov dl,alpush axmov ah,2int 21hpop axmov cl,0ahmov al,ahmov ah,0div clor ax,3030hpush axmov ah,2int 21hpop axmov dl,ahmov ah,2int 21hmov ah,4chint 21hcode endsend start分⽀程序设计1.某程序可从键盘接收命令(0-5),分别专项6个⼦程序,⼦程序⼊⼝地址分别为p0-p5,编制程序,⽤跳转表实现分⽀结构程序设计,记录实验结果data segmentmessage db 'please input key (0-5):$'crmessage db 0ah,0dh,'$'errormessage db 'you hit error key !',0ah,0dhdb 'please try again(0-5):$'message0 db 'you hit the key 0',0ah,0dh,'$'message1 db 'you hit the key 1',0ah,0dh,'$'message2 db 'you hit the key 2',0ah,0dh,'$'message3 db 'you hit the key 3',0ah,0dh,'$'message4 db 'you hit the key 4',0ah,0dh,'$'message5 db 'you hit the key 5',0ah,0dh,'$'code segmentassume cs:code,ds:data start:mov ax,datamov ds,axmov ah,9lea dx,messageint 21htryagain:mov ah,1int 21hmov bl,almov ah,9mov dx,offset crmessage int 21hcmp bl,'0'jz key0cmp bl,'1'jz key1cmp bl,'2'jz key2cmp bl,'3'jz key3cmp bl,'4'jz key4cmp bl,'5'jz key5error:mov ah,9mov dx,offset errormessage int 21hjmp tryagainkey0:lea dx,message0mov ah,9int 21hjmp exitkey1:lea dx,message1 mov ah,9int 21hjmp exitkey2:lea dx,message2 mov ah,9int 21hjmp exitkey3:lea dx,message3 mov ah,9int 21hjmp exitkey4:lea dx,message4 mov ah,9int 21hjmp exitkey5:lea dx,message5 mov ah,9int 21hexit:mov ah,4chint 21hcode endsend start第三次实验循环程序设计1.从⾃然数1开始累加,直到累加和⼤于1000为⽌,统计被累加的⾃然数的个数,并把统计的个数送⼊N单元,把累加和送⼊SUM单元。

南邮微机原理实验报告

南邮微机原理实验报告

微机原理硬件实验报告实验一 I/O 地址译码一、实验目的1、掌握 I/O 地址译码电路的工作原理。

二、实验内容及原理实验电路如图1-1所示,其中74LS74为D触发器,可直接使用实验台上数字电路实验区的D触发器,74LS138为地址译码器。

译码输出端Y0~Y7在实验台上“I/O地址“输出端引出,每个输出端包含8个地址,Y0:280H~287H,Y1:288H~28FH,…… 当CPU执行I/O指令且地址在280H~2BFH范围内,译码器选中,必有一根译码线输出负脉冲。

根据图1-1,我们可以确定A9~A3,AEN,IOW,IOR的值。

要使译码电路正常工作,必须使处于低电平有效。

因而可以确定A6=A8=0,A7=A9=1,AEN=0,IOW与IOR不可同时为1(即不能同时读写)。

当要从Y4输出低脉冲时,A5A4A3=100;从Y5输出时,A5A4A3=101。

综上所述,Y4输出时,应设置值2A0H(A9~A0=1010100000B);Y5输出时,应设置值2A8H(A9~A0=1010101000B)。

执行下面两条指令MOV DX,2A0HOUT DX,AL(或IN AL,DX)Y4输出一个负脉冲到D触发器的CLK上,因为D=1(接了高电平+5V),所以Q被赋值为1.延时一段时间(delay);执行下面两条指令;MOV DX,2A8HOUT DX,AL(或IN AL,DX)Y5输出一个负脉冲到CD,D触发器被复位,Q=0。

再延时一段时间,然后循环上述步骤。

利用这两个个负脉冲控制L7闪烁发光(亮、灭、亮、灭、……),时间间隔通过软件延时实现。

三、硬件接线图与软件流程图硬件接线:Y4/IO 地址接 CLK/D 触发器Y5/IO地址接 C/D触发器D/D触发器接 SD/D角发器接+5VQ/D触发器接 L7(LED灯)或逻辑笔软件流程图:四、源程序OUTPORT1 EQU 2A0H ;预置,方便修改OUTPORT2 EQU 2A8HCODE SEGMENTASSUME CS:CODESTART: MOV DX,OUTPORT1 ;根据原理图设定A9~A0 的值(Y4)OUT DX,AL ;让译码器Y4 口输出一个负脉冲CALL DELAY ;延时MOV DX,OUTPORT2 ;根据原理图设定A9~A0 的值(Y5)OUT DX,AL ;让译码器Y5 口输出一个负脉冲CALL DELAY ;延时MOV AH,1 ;调用1 号DOS 功能,等待键盘输入INT 16HJE START ;若有键盘输入则退出程序,否继续循环MOV AH,4CHINT 21HDELAY PROC NEAR ;延时子程序MOV BX,200 ;时延长度 (200)A: MOV CX,0B: LOOP BDEC BXJN E ARETDELAY ENDPCODE ENDSEND START五、实验结果LED 灯处于闪烁状态,键盘有输入后,成功退出。

南理工微机实验报告

南理工微机实验报告

南理工微机实验报告篇一:微机实验报告实验1 基本操作实验一、实验目的(1)掌握TD- PITC 80X86微机原理及接口技术教学实验系统的操作,熟悉Wmd86联机集成开发调试软件的操作环境。

(2)掌握使用运算指令类编程及调试方法。

(3)掌握运算类指令对各状态标志位的影响及其测试方法。

(4)学习使用软件监视变量的方法。

二、实验设备PC机一台,TD- PITC实验装置一套三、实验内容及步骤通过对样例程序的操作,学会使用在TD- PITC环境下,如何输入汇编语言程序,如何进行汇编语言源程序的汇编、连接、下载和运行;在调试程序的学习过程中,应学会:如何设置断点,如何单步运行程序,如何连续运行程序,怎样查看寄存器的内容,怎样修改寄存器的内容,怎样查看存储器的内容,怎样修改存储器的内容实验内容一——BCD码转换为二进制实验内容将四个二位十进制数的BCD码存放于3500H起始的内存单元中,将转换的二进制数存入3501H起始的内存单元中,自行绘制流程图并编写程序。

实验步骤:1)运行Wmd86软件,进入Wmd86集成开发环境。

2)根据程序设计使用语言的不同,通过在“设置”下拉列表来选择需要使用的语言。

语言选择后,下次再启动软件,语言环境保持这次的修改不变。

在这里我们选择汇编语言。

3)语言选择后,点击新建来新建一个文档。

默认文件名为Wmd861.4)编写实验程序。

并保存,此时系统会提示输入新的文件名,输完后点击保存。

实验程序清单如下:SSTACK SEGMENT STACKDW 64 DUPSSTACK ENDSCODE SEGMENTASSUME CS:CODESTART:XOR AX,AXMOV SI 3500HMOV DI 3510HA1:MOVE AL,[SI]ADD AL,ALMOV BL,ALADD AL,ALADD AL,ALADD AL,BLINC SIADD AL,[SI]MOV [DI],ALINC SIINC DILOOP A1A2:JMP A2CODE ENDSEND START5)点击编译文件,若程序无误,再点击进行连接。

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

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

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

实验一,微机原理。

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

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

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

实验二,接口技术。

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

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

实验三,实验综合。

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

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

总结。

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

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

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

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

感谢大家的阅读!。

微机原理的实验报告

微机原理的实验报告

一、实验目的1. 理解微机的基本组成和各部件的功能;2. 掌握微机的工作原理和指令系统;3. 熟悉汇编语言程序设计的基本方法;4. 提高动手能力和实际操作技能。

二、实验内容1. 微机系统组成实验(1)实验目的:了解微机的基本组成和各部件的功能。

(2)实验内容:观察并记录微机系统的各个部件,如CPU、内存、硬盘、主板等,并了解它们的功能。

(3)实验步骤:①观察微机系统各个部件的连接情况;②了解各个部件的功能和作用;③分析微机系统的整体结构。

2. 微机工作原理实验(1)实验目的:掌握微机的工作原理。

(2)实验内容:观察并记录微机工作过程中的各个阶段,如指令的取指、译码、执行等。

(3)实验步骤:①观察微机工作过程中的各个阶段;②了解各个阶段的功能和作用;③分析微机工作原理。

3. 指令系统实验(1)实验目的:熟悉汇编语言指令系统。

(2)实验内容:学习汇编语言的基本指令,如数据传送指令、算术运算指令、逻辑运算指令等。

(3)实验步骤:①学习汇编语言的基本指令;②编写简单的汇编语言程序,实现数据传送、算术运算、逻辑运算等功能;③调试程序,观察程序运行结果。

4. 汇编语言程序设计实验(1)实验目的:提高汇编语言程序设计能力。

(2)实验内容:编写一个汇编语言程序,实现以下功能:①计算两个数的和;②判断一个数是否为偶数;③输出程序运行结果。

(3)实验步骤:①编写汇编语言程序,实现上述功能;②调试程序,观察程序运行结果;③分析程序运行过程,确保程序正确性。

三、实验结果与分析1. 微机系统组成实验:通过观察和记录微机系统的各个部件,了解了微机的基本组成和各部件的功能。

2. 微机工作原理实验:通过观察微机工作过程中的各个阶段,掌握了微机的工作原理。

3. 指令系统实验:通过学习汇编语言的基本指令,熟悉了汇编语言指令系统。

4. 汇编语言程序设计实验:通过编写汇编语言程序,提高了汇编语言程序设计能力。

四、实验心得通过本次微机原理实验,我对微机的基本组成、工作原理和指令系统有了更深入的了解。

微机 实验一

微机 实验一

实验一汇编语言程序上机过程
一、实验目的
1.掌握EDIT、MASM、LINK 等软件工具的使用。

2.掌握在计算机上建立、汇编、连接、调试及运行程序的方法。

二、实验内容
1.将DISP 单元中存放的一压缩BCD码内容显示出来。

(如果能显示为(DISP)=XXH 更好)
2.将字节变量DISP 的内容(00H-FFH 任意值)显示出来。

(如果能显示为(DISP)=XXH 更好)
3.编一程序连续显示两个字符串(内容自选,第一串比第二串长,能更好检验结果),通过实验理解回
车、换行的区别。

(通过在两个字符串间1无回车、换行2仅回车3仅换行4回车+换行验证,分别
记录不同情况的结果)
三、实验准备
1.了解实验操作方法,准备好实验程序和数据。

2.记录汇编、连接过程产生的错误及解决办法,设置相关的出错情况,查看汇编结果;3.记录运行结果,更改数据再运行,记录结果。

四、实验报告
(进实验室前必须准备好实验报告,编写好实验程序,在每个实验内容之后留一定空间用于记录结果,实验过程中注意记录汇编出错信息及分析出错原因)
(1)将DISP 单元中存放的一压缩BCD码内容显示出来。

程序:
实验结果记录:
(2)将字节变量DISP 的内容(00H-FFH 任意值)显示出来。

程序:
实验结果记录:
(3)编一程序连续显示两个字符串(内容自选),通过实验理解回车、换行的区别。

程序:
实验结果记录:
五.实验总结。

微机原理实验报告

微机原理实验报告

微机原理实验报告实验⼀DEBUG 调试实验类型:实验课时:指导教师:时间:2013 年⽉⽇课次:第节教学周次:第周实验分室:实验台号:实验员:⼀、实验⽬的1.练习使⽤DEBUG,调试简单汇编程序。

⼆、实验要求1.掌握DEBUG的使⽤,调试程序。

2.读懂程序中各条指令,说明程序功能。

三、实验内容1.启动DEBUG,⽤A命令输⼊并汇编下列程序段。

100 MOV SI,200103 MOV CX,10106 MOV AL,0108 MOV [SI ],AL10A INC SI10B INC AL10D DEC CX10E JNZ 108110 INT 3四、实验结果及分析实验⼆简单汇编语⾔设计实验类型:实验课时:指导教师:时间: 2012 年⽉⽇课次:第节教学周次:第周实验分室:实验台号:实验员:⼀、实验⽬的1.巩固DEBUG及宏汇编的使⽤。

2.加深对指令的理解。

⼆、实验要求1.设堆栈指针SP=2000H,(AX)=3000H,(BX)=5000H。

请编⼀程序将AX的内容和BX的内容进⾏交换。

请⽤堆栈作为两寄存器交换内容的中间存储单元,⽤DEBUG调试程序进⾏汇编与调试。

2.设DS=当前段指地址,(BX)=0300H,(SI)=0002H,请⽤DEBUG的命令将存储器偏移地址300H~304H连续单元顺序装⼊0AH、0BH、0CH、0DH、0EH。

在DEBUG状态下送⼊下⾯程序,并⽤单步执⾏的⽅法,分析每条指令源地址的形成过程?当数据传送完毕时,AX中的内容是什么?程序清单如下:MOV AX,BXMOV AX,0304HMOV AX,[0304H]MOV AX,[BX]MOV AX,0001[BX]MOV AX,[BX][SI]MOV AX,0001[BX][SI]HLT3.设(AX)=0002H,编⼀个程序段将AX的内容乘10,要求⽤移位的⽅法完成。

三、思想描述实验内容1将两个寄存器的内容进⾏交换时,必须有⼀个中间寄存器才能进⾏内容的交换,如果⽤堆栈做为中间存储单元,必须遵循先进后出的原则。

微机系统实验报告

微机系统实验报告
BUF DB 'hellowword',09H
LENS EQU $-BUF
MESG DB 'THE RECEIVED CHARACTERS:','$'
DATA ENDS
CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA
BEG:
MOV AX,DATA
MOV DS,AX
CALL I8250
实验报告
(2016--2017学年第1学期)
课程名称
微型计算机原理与接口技术
实验名称(1)排除语法错误(2)测试微机系统串行口
实验时间
2016

12

11

指导单位
南京邮电大学
指导教师
李爱群
学生姓名鞠黄杰班级学号B14020230
学院电子科学与工程专业电子科学与技术
实验报告(一)
实验名称
排除语法错误
END BEG
四、实验小结(包括问题和解决方法、心得体会、意见与建议等)
通过这次实验我对串行通信的基本知识,8251、8255的结构更加的了解了也加深对串行接口的控制端口、数据端口工作方式的理解。
五、指导教师评语
成绩
批阅人
李爱群
日期
MOV BX,OFFSET NUM
MOV CH,0
MOV CL,9
AGAIN: CMP BYTE PTR [BX] ,0
JG NEXT1
INC AB
CMP BYTE PTR [BX], CH
JG NEXT1
MOV CH,BYTE PTR [BX]
NEXT1: INC BYTE PTR BX
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《微机实验》报告实验名称 KeilC的使用与汇编语言上机操作指导教师刘小英专业班级中法1201 姓名肖洋学号 U3 联系电话一、任务要求1.掌握KeilC环境的使用1)字节拆分、合并:调试程序,观察相关寄存器和单元的内容。

2)数据块填充:调试程序,观察相关寄存器和单元的内容。

2. 编写两个十六位数的加法程序。

有两个十六位无符号数,分别存放在从20H和30H开始的数据区中,低八位先存,高八位在后,和存于R3(高八位)和R4(低八位),进位位存于R2。

二、设计思路1.字节拆分、合并程序:利用汇编语言中的 XCHD 和 SWAP 两个语句来实现将八位二进制数拆分为两个四位二进制数并分别存储于不同的存储空间的功能,BCD 码与 30H 相或(加上 30H)得到 ASCII 码。

将两个 ASCII 码和 0FH 相与(高四位清零)得到 BCD 码,利用 SWAP 语句将高位数放至高四位,将高位数和低位数相或可实现字节的合并。

2.数据块填充程序:将 R0 用作计数器,DPTR 用作片外数据指针,A 作为原始数据来源,依顺序在片外的存储单元内容填充数据。

利用循环语句来减少程序长度,并控制填充单元个数为片外 100H 个。

(通过 R0 的进位控制)3.两个十六位数加法程序:把第一个十六位无符号数的地八位和高八位分别存于 20H 和21H 中,把第二个十六位无符号数的地八位和高八位分别存于 30H 和 31H 中,对 20H 和30H 中的两个低八位进行 ADD 加法操作,结果存于 R4 中;然后对 21H 和 31H 中的两个高八位进行 ADDC 带进位的加法操作,结果存于 R3 中.然后将累加器 A 清零,并和#00H进行 ADDC 带进位的加法操作,结果产生进位数并存于 R2 中,程序结束。

三、资源分配1. 字节拆分、合并程序:片内 30H 单位存放原 BCD 码,31H 和 32H 存放拆分后的两个 ASCII 码,33H 存放合并后的 BCD 码。

2.数据块填充程序:R0 作为计数器,DPTR 作为数据指针,片外RAM空间从 7000H 开始填充。

3.两个十六位数加法程序:20H,21H: 第一个数的低八位和高八位 30H,31H:第二个数的低八位和高八位 R4:加法结果的低八位 R3:加法结果的高八位 R2:加法结果的进位四、流程图1.字节拆分、合并程序2.数据块填充程序3.两个十六进制数相加程序五、源代码 (含文件头说明、语句行注释)1.字节拆分、合并程序File name:Description: 1字节BCD 码转换为2字节ASCII2字节ASCII 码转化为1字节BCD 码Source used: 30H: BCD data31H, 32H :ASCII data31H, 32H ->33HORG 0000HLJMP MAINORG 0100H MAIN: MOV SP, #40H ;赋堆栈指针MOV 30H, #49H ;30H单元赋值MOV R0, #32H ;R0指针赋值MOV @R0, #0 ;32H单元清零MOV A, 30HXCHD A, @R0 ;拆分字节ORL 32H, #30H ;转换为ASCIISWAP AORL A, #30H ;转换为ASCIIMOV 31H, A ;结果存于31H单元MOV A, 31H ;从31H单元取值ANL A, #0FH ;转换为BCDSWAP AMOV 33H, A ;结果存于33H单元MOV A, 32H ;从32H单元取值 ANL A, #0FH ;转换为BCDORL 33H, A ;合并字节HERE: SJMP HERE ;踏步END2.数据块填充程序:将片外RAM 7000H-70FFH单元按一定规律填充File name:Source used: R0: 计数器DPTR: 片外数据指针ORG 0000HLJMP MAINORG 0100HMAIN: MOV SP,#40HFILL: CLR A ;A寄存器清零MOV R0, #00H ;设循环计数器MOV DPTR, #7000H ;设数据指针FILL1: MOVX @DPTR, A ;传送到片外RAMINC A ;A内容加1INC DPTR ;修改数据指针INC R0 ;修改循环计数器CJNE R0, #00H, FILL1 ;判断是否结束HERE: SJMP HERE ;原地踏步END3.两个十六位数加法程序:File name:Description:Source used:ORG 0000HLJMP MAINORG 0100HMAIN:CLR C ;进位清零MOV 20H,#11H ;赋值MOV 21H,#19HMOV 30H,#90HMOV 31H,#09HMOV R0,#20H ;置数据指针MOV R1,#30HMOV A,@R0 ;取第一个数低位ADD A,@R1 ;两位数低位相加MOV R4,A ;存“和”低位ADDC A,#00H ;处理地位相加进位INC R0 ;修改指针INC R1MOV A,@R0 ;取第一个数高位ADDC A,@R1 ;两数高位相加MOV R3,A ;存“和”高位CLR AADDC A,#00H ;处理高位相加进位MOV R2,A ;最终进位存于R2HERE: SJMP HERE ;原地踏步END六、程序测试方法与结果1.字节拆分、合并程序:测试方法:单步调试观察寄存器变量和片内RAM的存储空间。

结果如图:性能分析:该程序能很方便地实现将一个BCD码拆分为两个ASCII码以及将两个ASCII码合并成一个BCD码的功能。

2.数据块填充程序:测试方法:利用程序的运行和停止控制来观察最终的寄存器变量和片内RAM的存储空间。

结果如图:性能分析:从寄存器变量DPTR最后的取值(7100H)来看,该程序能实现片外RAM从7000H到70FFH的数据填充。

程序中利用R0从00H到FFH 的计数中产生的进位很巧妙地控制了循环的次数。

3.两个十六进制数相加测试方法:手动输入两个加数,运行程序,观察结果是否正确。

在调试过程中,跟踪A,R2,R3,R4的值,看是否与预期相同。

结果如图:结果:输入两个十六进制数为1911H和0990H,得出合数为22A1H,进位为0,各项指标均与预期相同,程序正确。

七、思考题1.怎样查看工作寄存器、SFR、片内RAM、片外RAM及程序代码空间内容Disassembly 窗口有何作用(1)选择Debug下的Start/Stop Debug Session,在界面的左侧会出先程序代码的空间地址内容(2)Disassembly窗口可以显示编译之后的汇编代码2. 字节拆分、合并还有哪些方法,举一例说明(1)字节拆分可以利用与运算ANL,例如将30H单元中的数据从中间拆分,低字节存于31H,高字节存于32H:MOV A, 30HANL A, #0FHMOV 31H, AMOV A,30HANL A, #F0HMOV 32H,A(2)合并字节可以利用或运算ORL,例如将31H单元中的数据和32H单元中的数据合并,结果存放于30H中:MOV A,31HSWAP AORL A,32HMOV 30H,A3. 若按递减1规律填充数据块,应如何修改程序修改后程序如下ORG 0000HLJMP MAINORG 0100HMAIN: MOV SP,#40HFILL: CLR A ;A寄存器清零MOV R0, #FFH ;设循环计数器MOV DPTR, #70FFH ;设数据指针FILL1: MOVX @DPTR, A ;传送到片外RAMDEC A ;A内容减1DEC DPTR ;修改数据指针DEC R0 ;修改循环计数器CJNE R0, #FFH, FILL1 ;判断是否结束HERE: SJMP HERE ;原地踏步END4.若从7020H单元开始,连续填充10个字节,应该如何修改程序ORG 0000HLJMP MAINORG 0100HMAIN: MOV SP, #40HFILL: CLR A ;A寄存器清零MOV R0, #00H ;设循环计数器 MOV DPTR, #7020H ;设数据指针FILL1: MOVX @DPTR, A ;传送到片外RAM INC A ;A内容加1INC DPTR ;修改数据指针 INC R0 ;修改循环计数器 CJNE R0, #10H, FILL1 ;判断是否结束HERE: SJMP HERE ;原地踏步END5. 若完成双字节BCD码加法,应如何修改程序ORG 0000HLJMP MAINORG 0100HMAIN: MOV SP, #40HMOV 20H, #0ABHMOV 21H, #99HMOV 30H, #0CDHMOV 31H, #0EFHMOV A, 20HADD A, 30HDA AMOV R4, AMOV A, 21HADDC A, 31H DA AMOV R3, ACLR AADDC A, #00H DA AMOV R2, ASJMP $END。

相关文档
最新文档