微机原理实验2 编程实现循环程序

合集下载

微机原理与应用综合实验—循环程序设计

微机原理与应用综合实验—循环程序设计

94 A2:PUSH AX 95 MOV DL,' ' 96 MOV AH,2 97 INT 21H 98 POP AX 99 ADD AX,BX 100 SHL AX,1 101 RET 102 A3:PUSH AX 103 MOV DL,' ' 104 MOV AH,2 105 INT 21H 106 POP AX 107 SUB AX,BX 108 SHL AX,1 109 RET 110 111 RET 112 CHRAC ENDP 113 MOV AH,4CH 114 INT 21H 115 CODE ENDS 116 END MAIN
45 ;********************************************** 46 INPUTPRO PROC NEAR 47 PUSH CX ;保护现场 48 PUSH AX 49 PUSH BX 50 SHL AX,1 ;得到每一行输入的字符(‘*’、‘ ’)总数 51 MOV CX,0001H 52 LOP:CALL CHRAC 53 INC CX ;CX自加 54 CMP CX,AX 55 JNA LOP;判断相等就换行 56 POP BX 57 POP AX ;恢复现场 58 POP CX 59 RET 60 INPUTPRO ENDP 61 ;********************************************** 62 ;子程序:输入每一个‘*’和‘ ’和0AH(换行字符) 63 ;********************************************** 64 CHRAC PROC NEAR 65 CMP CX,AX 66 JZ A1; 67 MOV DL,'*' 68 69 SHR AX,1 ;满足空格的条件 70 SUB AX,BX 71 CMP CX,AX 72 JNA A2 73 ADD AX,BX 74 ADD AX,BX 75 CMP CX,AX 76 JNB A3 77 78 SUB AX,BX 79 SHL AX,1 80 PUSH AX 81 MOV AH,2 82 INT 21H 83 POP AX 84 RET 85 A1:PUSH AX 86 MOV DL,0DH 87 MOV AH,2 88 INT 21H 89 MOV DL,0AH 90 MOV AH,2 91 INT 21H 92 POP AX 93 RET

微机原理与接口技术实验二 建立90H个无符号数

微机原理与接口技术实验二  建立90H个无符号数

电子信息专业实验报告课程微机原理与接口技术实验实验题目建立90H个无符号数学生姓名lz评分学号班级同实验者实验时间地点电子信息学院专业实验中心一、实验目的1、掌握循环程序设计与调试方法2、在指定内存区域存放数据3、掌握“单步执行T”、“分段执行G=起始地址停止地址”、“连续执行G=起始地址”的调试方法二、实验内容(含技术指标)1、在指定单元建立90H个无符号数,使用基本指令编写循环程序实现2、用DEBUG调试执行文件3、在指定的内存单元检查数据4、按照要求执行程序,记录并分析数据三、实验仪器(仪器名称、型号,元器件名称、清单,软件名称、版本等)1、联想笔记本电脑Windows系统2、Masm for Windows集成实验环境2015四、实验原理(基本原理,主要公式,参数计算,实现方法及框图,相关电路等)1、以偏移地址1000H为起点,初始值为00H,每次增加1H,依次建立90H个无符号数2、数据位置:数据段地址DS:3000H偏移地址(起始)1000H初始数据:第一个数00H偏移地址(起始)1000H总数90H个寄存器安排:AL:需存的数(第一个00H)SI:存入的地址(第一个1000H)3、本次实验用到了条件转移指令JNZ,JNZ全称jump if not zero,在本实验中当CL 结果不为零则转移L1循环。

4、操作指令分段执行操作G=起始地址停止地址;连续执行操作G=起始地5、实现原理框图:(经实验指导老师签字认可的原始数据记录纸或添加页粘贴处)五、实验步骤(实验关键操作步骤,仪器、电路及器件选择使用,原程序及关键指令注释等)1、编写循环程序DATAS SEGMENT MOV DS,AXDATAS ENDS MOV CL,90HSTACKS SEGMENT L1:MOV[SI],ALSTACKS ENDS INC SICODES SEGMENT INC ALASSUME CS:CODES,DS:DATAS,SS:STACKS DEC CLSTART:JNZ L1MOV AL,00H INT3HMOV SI,1000H CODES ENDSMOV AX,3000H END START2、单步执行调试使用DEBUG,将执行文件调入内存;—U检查程序;—R检查、设置所需寄存器;—T从程序的第一条指令开始,单步执行每执行一条指令,检查并记录要求的数据;连续执行20个单步3、用分段执行方式调试程序重新使用DEBUG,将执行文件调入内存;—U检查程序;—R检查、设置所需寄存器;执行第1次循环:G停止地址(判断CL=0指令的偏移地址);从程序第1条指令开始(含初始化指令)到循环体的最后一条指令处停止;检查、记录指定的寄存器内容执行第2次循环:—T先执行一个单步;第一次循环未执行判断指令(—T,执行判断);CL不为零,转移到前面,循环存入第二个数;—G停止地址(判断CL=0指令的偏移地址)(执行第2次循环,不包含初始化指令)检查、记录指定寄存器内容执行第3次循环:同第2次循环的操作共执行10次循环;每次都需检查、记录指定寄存器内容4、连续执行(将所有循环执行完毕)—G=0000从程序的第1条指令开始执行,遇INT3H停止检查存放数据的区域(31000H开始的90H个单元)D3000:10001090记录数据六、实验数据(测量数据波形曲线或数据列表,标明单位及测量数据的有效位数)单步执行检查记录表分步执行检查记录表连续执行数据记录七、实验数据分析(对实验结果的评价,误差分析,出现故障原因及排除方法,回答思考题等)数据分析:1、在单步执行检查中,AL,CL,SI,IP的数据与理论结果一致,没有出现错误。

微机原理及应用实验报告

微机原理及应用实验报告
2•深入了解数据在存储器中的存取方法及堆栈中数据的压入与弹出。
3•掌握各种寻址方法以及简单指令的执行过程。
二、实验要求
1实验前要作好充分准备,包括汇编程序清单、调试步骤、调试方法以及对程序结果的分 析等。
2•本实验要求在PC机上进行。
3•本实验只要求在DEBUC调试状态下进行,包括汇编程序,调试程序,执行程序。
4•熟悉建立源文件,进行汇编和连接的全过程,并对程序进行调试。
二、实验要求
1•实验前准备
1分析题目,将程序中的原始数据、中间结果和最终结果的存取方式确定好。
2写出算法或画出流程图。
3写出源程序。
4对程序中的结果进行分析,并准备好上机调试的过程。
2•本实验要求在PC机上进行。
3•汇编过程中出现问题,可用DEBU(进行调试。
xorax,ax pushax movax,data movds,ax leasi,data1 leadi,data2 leabx,data3 moval,[si+3] movah,[di+3] an dal,0fh an dah,0fh addal,ah oral,30h mov[bx+3],al moval,[si+2] movah,[di+2] an dal,0fh an dah,0fh adcal,ah oral,30h mov[bx+2],al moval,[si+1] movah,[di+1] an dal,0fh an dah,0fh adcal,ah oral,30h mov[bx+1],al moval,[si] movah,[di] an dal,0fh an dah,0fh adcal,ah
;exercize21

汇编语言-实验二 循环与子程序程序设计

汇编语言-实验二   循环与子程序程序设计

实验二循环与子程序程序设计一、实验目的1) 加深对循环结构的理解。

2)掌握循环程序的设计方法。

3)学习子程序的定义和调用方法。

4)掌握子程序、子程序的嵌套、递归子程序的结构。

5) 掌握子程序设计、编制及调试。

6) 熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。

二、实验内容1) 编制程序计算S=1+2·3+3·4+4·5+……+N(N+1)+……直到N(N+1)大于200为止,并将结果由屏幕上显示出来。

2)将从3000H内存单元开始的100个字节存储单元全部清0。

3)编制在屏幕上显示九九乘法表的程序。

4)编制在屏幕上显示用*组成的三角形的程序。

5)设有五个字数据存放在以BUF为首地址的内存单元中,要求采用调用多个字数据相加的子程序方法编程,和的低位字放在RESULT单元,和的高位字放在RESULT+2单元,并将结果显示在屏幕上。

6)编写一个递归子程序,计算指数函数X n的值,其中X,n从键盘输入。

三、源程序EXAM2-1DA TA SEGMENTBUF DB’S=1+2×3+3×4+4×5+…+N(N+1)+…=’,’$’RES DW 4 DUP(0),’$’DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DA TAMOV DS,AXMOV DX, OFFSET BUFMOV AH,09HINT 21HMOV DX, 1MOV BL, 2NEXT:MOV AL,BLINC BLMUL BLADD DX,AXCMP AX,200JNA NEXTMOV CX,0004HMOV DI,OFFSET RESADD DI,03HNEXT1:MOV AX, DXAND AX, 000FHCMP AL,0AHJB NEXT2ADD AL,07NEXT2:ADD AL, 30HMOV [DI],ALDEC DIPUSH CXMOV CL,04SHR DX,CLPOP CXLOOP NEXT1MOV DX,OFFSET RESMOV AH,09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START执行程序EXAM2-1·EXE,屏幕上显示结果:S=1+2×3+3×4+4×5+...+N(N+1)+ (045)EXAM2-2ORG 2000H2000 BF0030 MOV DI, 30002003 B164 MOV CL, 642005 C60500 MOV BYTE PTR[DI],02008 47 INC DI2009 FEC9 DEC CL200B 75F8 JNZ 2005200D F4 HLTEXAM2-3DATA SEGMENTA TAD DB ?, 2AH, ?, 3DH, ?, ?, 20H, '$'A TAD1 DB ?, 2AH, ?, 3DH, ?, ?, 0DH, 0AH, '$' DA TA ENDSSTACK SEGMENT STACKDB 20H DUP(0)STACK ENDSCODE SEGMENTASSUME CS:CODE, DS:DA TASTART:MOV AX, DA TAMOV DS, AXMOV CL, 09HMOV BL, 00HOKL:MOV AL, 00HINC BLOK1:INC ALPUSH AXCMP BL, ALJZ OKMOV BH, ALMUL BLMOV DI, OFFSET ATADCALL OKPPOP AXJMP OK1OK:MOV BH, ALMUL BLMOV DI, OFFSET ATAD1CALL OKPPOP AXLOOP OKLMOV AH, 4CHINT 21HOKP PROCPUSH AXPUSH BXPUSH CXADD BX, 3030HMOV [DI], BHMOV [DI + 02H], BLMOV CX, 0AHMOV DH, 00HOKL2:CMP AX, CXJS OK2ADD CX, 0AHINC DHJMP OKL2OK2:SUB CX, 0AHSUB AX, CXMOV AH, DHADD AX, 3030HMOV [DI + 04H], AHMOV [DI + 05H], ALMOV DX, DIMOV AH, 09HINT 21HPOP CXPOP BXPOP AXRETOKP ENDPCODE ENDSEND START执行程序EXAM2-2·EXE,屏幕上显示结果:1*1=011*2=02 2*2=041*3=03 2*3=06 3*3=091*4=04 2*4=08 3*4=12 4*4=161*5=05 2*5=10 3*5=15 4*5=20 5*5=251*6=06 2*6=12 3*6=18 4*6=24 5*6=30 6*6=361*7=07 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=491*8=08 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=641*9=09 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81EXAM2-4CODES SEGMENTASSUME CS:CODESSTART:XOR BX,BXMOV DL,2AHMOV CX,9LOP: PUSH CXINC BLMOV CL,BLMOV DL,2AHLOP2: MOV AH,02HINT 21HLOOP LOP2POP CXMOV DL,0AHMOV AH,02HINT 21HMOV DL,0DHMOV AH,02HINT 21HCMP BL,9JZ ENDPROLOOP LOPENDPRO:MOV AH,4CHINT 21HCODES ENDSEND START执行程序EXAM2-4·EXE,屏幕上显示结果:*********************************************EXAM2-5STACK SEGMENT STACKDB 1024 DUP(0)STACK ENDSDA TA SEGMENTBUF DW 0F101H,110DH,52H,100H,456H COUNT =($-BUF)/2RESULT DW 4 DUP(?),'$'DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA,SS:STACK WDADD PROCPUSH DIMOV AX, 0MOV DX, 0MOV DI, OFFSET BUFNEXT2: ADD AX, [DI]JNC NEXT1INC DXNEXT1: ADD DI, 2LOOP NEXT2POP DIRETWDADD ENDPSHOW PROCPUSH CXPUSH DIMOV CX, 04HMOV DI, OFFSET RESULTMOV BX, AXADD DI, 07HBBB: MOV AX, BXAND AX, 000FHCMP AL, 0AHJB QQQADD AL, 07HQQQ: ADD AL, 30HMOV [DI], ALDEC DIPUSH CXMOV CL, 04SHR BX, CLPOP CXLOOP BBBMOV CX, 0004HCCC: MOV AX, DXAND AX, 000FHCMP AL, 0AHJB DDDADD AL, 07HDDD: ADD AL, 30HMOV [DI], ALDEC DIPUSH CXMOV CL, 04HSHR DX, CLPOP CXLOOP CCCPOP DIPOP CXRETSHOW ENDPBEGIN: MOV AX, DATAMOV DS, AXMOV CX, COUNTCALL WDADDCALL SHOWMOV DX, OFFSET RESULTMOV AH, 09HINT 21HMOV AH, 4CHINT 21HCODE ENDSEND BEGIN执行程序EXAM2-5·EXE,屏幕上显示结果:000107B6。

四川大学微机原理实验报告

四川大学微机原理实验报告

《微机原理及接口技术实验报告》学院:电气信息学院班级: 109班老师:罗江陶学号: 1143031270姓名:实验一汇编语言程序的上机步骤一、实验目的:1、了解汇编语言程序的执行流程。

2、熟悉和使用DEBUG调试工具,分析和读懂一些及硬件相关的小程序。

3、通过对程序的分析,理解计算机程序的执行过程。

4、了解并逐步熟悉汇编语言的编辑方法及特点.5、复习8086汇编语言的段结构、常用的指令及伪指令、存储空间的分配等。

6、掌握汇编语言的编辑、汇编及连接的过程。

7、了解并逐步掌握运用DEBUG进行调试汇编语言程序二、实验内容:以文件名为1.asm源程的序为例,学习汇编语言的上机步骤。

汇编语言程序MASM软件由编辑器,汇编MASM.EXE程序,连接LINK.EXE程序以及DUEBUG.EXE调试程序四个部分组成。

汇编语言编制完成后,在计算机上的操作过程就分为四个阶段。

1. 编辑:首先输入源程序:在记事本里录入,注意在保存时文件格式必须选择所有文件,文件后缀名为.ASM, 即保存时文件名为XXX.asm。

2.用汇编程序MASM.Exe对源程序.ASM文件汇编,生成目标文件.OBJ:双击MASM软件中的MASM.Exe文件框,在命令行后键入源程序名XXX.asm,(如果源程序及MASM软件在同一路径下,可以只键入文件名,而不要后缀)3.连接LINK.EXE双击MASM软件中的LINK.Exe文件框,在命令行后键入目标文件名XXX.OBJ(如果源程序,目标文件及MASM软件在同一路径下,可以只键入文件名,而不要后缀)如果连接没有错误,就会产生一个XXX.EXE的可执行文件,如果.OBJ文件有错误,连接时会指出错误的原因。

4.运行和调试DEBUG.exe运行可执行文件,即双击XXX.EXE文件框即可,或在DOS下运行此程序,E:\XXX.EXE。

三、程序流程图:四、程序清单及注释:DATA SEGMENTNUM1 DB 35,35HNUM2 DW 35,35HNUM3 DB 4 DUP (34,3 DUP (34H))NUM4 DB '34AB'NUM5 DW '34','AB'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV BX,OFFSET NUM1MOV AL,[BX]MOV BX,OFFSET NUM5MOV AX,[BX]MOV AH,4CHINT 21HCODE ENDSEND START五、运行结果:将以上程序在笔记本中保存为xueyuan1.ASM 编译后显示编译成功:运行结果如下:运行可执行文件出现此界面后“闪退”六、实验心得:通过本次实验,我了解了一个汇编程序在计算机上的执行步骤,如何实现一个汇编程序的编辑、连接、运行。

实验二 循环程序设计

实验二  循环程序设计

实验二循环程序设计一、实验目的1) 加深对循环结构的理解。

2) 掌握循环程序的设计方法。

二、实验内容将从3000H内存单元开始的100个字节存储单元全部清0。

要求:先在在DEBUG调试状态下进行,然后在dos下进行masm和link进行。

过程包括汇编程序、运行程序、检查结果。

三、实验设备PC机一台四、实验步骤1) 输入源程序并检查无误。

2) 对内存单元3000H开始的100个存储单元用E命令输入任意数。

3) 程序用DEBUG的T命令单步跟踪执行。

4) 程序用DEBUG的G命令执行。

5) 用D命令检查执行结果。

6) 用宏汇编格式写源程序。

7) 对源程序进行编译、连接、运行。

五、实验报告的要求1) 列出源程序。

2) 对程序中用到的寄存器说明其功能。

1、数据寄存器数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。

32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。

对低16位数据的存取,不会影响高16位的数据。

这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。

4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL 、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。

程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。

寄存器AX和AL通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。

累加器可用于乘、除、输入/输出等操作,它们的使用频率很高;寄存器BX称为基地址寄存器(Base Register)。

它可作为存储器指针来使用;寄存器CX称为计数寄存器(Count Register)。

在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数;寄存器DX称为数据寄存器(Data Register)。

循环操作实验报告

循环操作实验报告

一、实验目的1. 理解循环操作的概念及其在编程中的应用。

2. 掌握不同类型循环语句(如for、while、do-while)的使用方法。

3. 学会循环操作中的跳转语句(如break、continue)的使用。

4. 通过实际操作,加深对循环操作的理解和应用。

二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.83. 编译器:PyCharm三、实验内容1. 循环操作的基本概念及类型2. for循环3. while循环4. do-while循环(Python中无此循环,以while循环为例)5. 循环中的跳转语句6. 循环嵌套四、实验步骤1. 循环操作的基本概念及类型(1)在编程中,循环操作是指重复执行一组语句,直到满足某个条件为止。

(2)循环操作分为三类:for循环、while循环和do-while循环。

2. for循环(1)for循环用于遍历一个序列(如列表、元组、字符串等)或迭代器。

(2)语法格式:for 变量 in 序列: 语句(3)实验代码:```for i in range(1, 6):print(i)```3. while循环(1)while循环用于当满足某个条件时,重复执行一组语句。

(2)语法格式:while 条件表达式: 语句(3)实验代码:```i = 1while i < 6:print(i)i += 1```4. do-while循环(Python中无此循环,以while循环为例)(1)do-while循环用于至少执行一次循环体,然后根据条件表达式判断是否继续执行。

(2)语法格式:do 语句 while 条件表达式(3)实验代码:```i = 1while True:print(i)i += 1if i >= 6:break```5. 循环中的跳转语句(1)break语句用于立即退出循环。

(2)continue语句用于跳过当前循环的剩余部分,并继续执行下一次循环。

汇编语言程序设计实验报告二分支循环程序实验

汇编语言程序设计实验报告二分支循环程序实验

、实验目的、实验内容1、 编写一程序,将内存中某一区域的数据传送到另一个区域中 (要求用循结构,不考虑数据块重叠问题 ) 。

2、 编写一程序,将内存中某一区域的数据传送到另一区域 ( 要求考虑数据块 重叠问题)。

实验准备用QE 或其它编辑软件,在计算机上编辑源程序,使其正确无误。

进入DEBUG 打入DEBUGT MYPROG.EXMYPRC 为所编程序的文件名。

(2) 先用G 命令连续剧连续执行程序,程序执行完毕后,观察运行结果。

如果 汇编语言程序设计实验报告( 分支循环程序实验 )1、 掌握分支程序、循环程序的设计方法。

2、 熟悉DEBU®序的使用方法。

3、 掌握汇编语言程序的编辑、汇编、连接以及调试过程。

1、 预习数据传送指令,熟悉分支和循环程序设计方法。

2、 预习DEBUG 调试程序的使用方法。

3、 根据实验内容要求,编写好实验源程序。

四、实验步骤 1、 2、 汇编、连接源程序,产生.EXE 可执行文件。

3、 运行程序。

(1)执行后是对的,说明程序编写是正确的,如果结果不对,说明程序有错误, 则执行下一步。

(3) 检查程序。

在程序中设置若干断点,以便杳出错误所在。

(4) 采用单步命令 T 或执行程序,观察各寄存器和存储单元内容,以便找到错 误之处。

总结实现数据传送的几种方法,指出它们的区别。

开始说明本实验中是如何使用 DEBU 进行调试的。

CX 、SI 、DI 置初值六、流 程图勤开始 设置增量方式CX 、 SI 、 DI 置初值 保存 SI 内容AL [SI] SI SI+ 源块长度[DI] AL N SI>DISI SI+1 恢复 SI 内容 恢复 SI 内容DI DI+1CX CX-1 设置减量方式N CX=0, SI 指向源块末尾DI 指向目的块末尾结束 [DI] [SI]题一流程图 N 传完了吗, 书馆 Y五、 实验报告要求1、 列出程序清单,并给出程序流程图。

汇编语言、微机原理、接口技术-实验三:循环程序实验

汇编语言、微机原理、接口技术-实验三:循环程序实验
外层循环:初始化BL。初始化比较两个数的指针。当BL=0时,提前退出循环。
图一:直接选择排序
图二:冒泡排序
三.实现方法(含实现思路、程序流程图、实验电路图和源程序列表等
基本要求源代码:
冒泡排序关键代码:
mov cx,4 ; CX length-1
mov si,offset a ; DI string pointer
INC SI jna j1
loop lp3 xchg al,[si+2]
HLT mov [si],al
A DW '5','7','1','9','2' inc bl
; si string pointer j1:
;cx length-1 inc si
sort proc inc si
lp2: loop lp1
计算机硬件实验室实验报告
课程名称:
姓名
学号
班级
成绩
设备名称及软件环境
Windows XP操作系统emu8086仿真器proteus仿真器
实验名称
[0003]循环程序实验
实验日期
2012/11/6
一.实验内容
1.实现内存数据访问,用两种方法对五个字从大到小排序
2.扩展要求
1.用冒泡法时快排
2.理论分析或算法分析
思考内容:冒泡排序之所以能实现快速排序,是每一次排序都将最大或最小的放在最后或最前,并且有个来统计交换的次数,一旦交换的次数为0时直接退出循环。
五.结论\
完成了本次实验要求的实验内容。学会了实现内存数据访问,用两种方法实现对五个字从大到小排序
报告提交日期

微机接口实验:分支和循环的程序设计

微机接口实验:分支和循环的程序设计

实验四分支程序设计实验一、实验目的1、掌握分支程序的结构。

2、掌握分支程序的设计、调试方法。

二、实验设备TDN86/88教学实验系统一台三、实验内容及步骤1、设计一数据块间的搬移程序设计:程序要求把内存中一数据区(称为源数据块)传送到另一存储区(成为目的数据块)。

源数据块和目的数据块在存储中可能有三种情况,数据的传送从数据块的首址开始,或者从数据块的末址开始均可。

但对于有部分重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭破坏,可以得出以下结论:当源数据块首址>目的块首址时,从数据块首地址开始传送数据。

当源数据块首址<目的块首址时,从数据块末地址开始传送数据。

实验程序如下:STACK1 SEGMENT STACKDW 64 DUP(?)STACK1 ENDSCODE SEGMENTASSUME CS:CODESTART: MOV CX,0010HMOV SI,3100HMOV DI,3200HCMP SI,DIJA A2ADD SI,CXADD DI,CXDEC SIDEC DIA1: MOV AL,[SI]MOV [DI],ALDEC SIDEC DIDEC CXJNE A1JMP A3A2: MOV AL,[SI]MOV [DI],ALINC SIINC DIDEC CXJNE A2A3: JMP A3CODE ENDSEND START实验步骤:(1)阅读程序,画出程序流程图。

(2) 输入源程序,进行编译、链接和加载。

(3) 用E命令在以SI为起址的单元中填入16个数。

(4) 运行程序并检查结果,用D命令查看DI为起址的单元中的数据是否与SI单元中数据相同。

(5)试改变SI、DI的取值,观察在三种不同的数据块情况下程序的运行。

将SI,DI的首地址改成:MOV SI,3100HMOV DI,3108H执行结果:程序执行完后,将SI所指向的数据块传给了DI所指向的数据段,分步执行时可以发现程序执行是从程序段的末地址开始的。

最新微机原理实验之_分支程序、循环程序设计

最新微机原理实验之_分支程序、循环程序设计

实验三分支程序、循环程序设计实验一、实验目的1.掌握分支程序的结构。

2.掌握分支程序的设计、调试方法。

3.加深对循环结构的理解。

4.掌握循环结构程序设计的方法以及调试方法。

二、实验设备PC机一台,TD-PITE实验装置一套。

三、实验内容:设计一数据块间的搬移程序。

设计思想:程序要求把内存中一数据区(称为源数据块)传送到另一存储区(称为目的数据块)。

源数据块和目的数据块在存储中可能有三种情况,如图1所示。

图3-1 源数据块与目的数据块在存储中的位置情况对于两个数据块分离的情况,如图3-1(a),数据的传送从数据块的首地址开始,或从数据块的末地址开始均可。

但是对于有重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭到破坏,可有如下结论:当源数据块首地址<目的块首地址时,从数据块末地址开始传送数据,如图3-1(b)所示。

当源数据块首地址>目的块首地址时,从数据块首地址开始传送数据,如图3-1(c)所示。

参考流程:如图3-2所示。

图3-2 程序流程图实验程序STACK SEGMENT STACKDW 64 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODESTART: MOV CX, 0010HMOV SI, 3100HMOV DI, 3200HCMP SI, DIJA A2ADD SI, CXADD DI, CXDEC SIDEC DIA1: MOV AL, [SI]MOV [DI], ALDEC SIDEC DIDEC CXJNE A1JMP A3A2: MOV AL, [SI]MOV [DI], ALINC SIINC DIDEC CXJNE A2A3: JMP A3CODE ENDSEND START实验步骤1. 按流程图编写实验程序,经编译、链接无误后装入系统;2. 用E命令在以SI为起始地址的单元中填入16个数;3. 运行程序,然后再停止运行;4. 通过D命令查看DI为起始地址的单元中的数据是否与SI单元中数据相同;5. 通过改变SI、DI的值,观察在三种不同的数据块情况下程序的运行情况,并验证程序的功能。

微机原理及接口技术实验指导书

微机原理及接口技术实验指导书

微机原理及接口技术实验指导书书写实验名称时请按下表内容填写:实验一、熟悉实验运行环境实验一、实验目的1、熟悉汇编语言程序的调试环境2、掌握部分DEBUG命令二、实验内容编写一个汇编语言程序,计算1+2+3+…+99+100,并将结果存入SUM字单元。

通过调试程序熟悉汇编语言的上机操作过程及部分命令。

三、上机操作过程1、建立ASM文件(编辑源程序)使用编辑程序EDIT在磁盘上建立源程序EX.ASM例如:D:\MASM>EDIT EX.ASM用MASM程序产生OBJ文件源文件建立后,就要用汇编程序对源文件汇编,汇编后产生二进制的目标文件(OBJ文件)例如:D:\MASM>MASM EX3 、用LINK程序产生EXE文件汇编程序已产生出二进制的目标文件(OBJ),但OBJ文件并不是可执行文件,还必须使用连接程序(LINK)把目标文件转换为可执行的EXE文件例如:D:\MASM>LINK EX4、调试运行在建立了EXE文件后,就可以直接从DOS执行程序。

如果用户程序有错误或者没有直接将结果在终端上显示出来,程序执行完之后无法看见正确的结果。

那么怎么知道程序执行的结果是正确的呢?此外,大部分程序必须经过调试阶段才能纠正程序执行中的错误,得到正确的结果。

这里就要使用调试程序。

例如:D:\MASM>DEBUG EX.EXE①R命令显示或修改寄存器中的内容例如:_R BXBX 0369:059E不作修改,直接回车;否则键入修改内容,并回车②U命令反汇编a、_U[地址] 从指定地址开始,反汇编32个字节。

如果地址省略,则从上一个U命令的最后一条指令的下一个单元开始显示32个字节b、_U[范围] 对指定范围的内存单元进行反汇编例如:_U 04BA:0100 0108③T命令单步执行命令(一次执行一条指令)例如:从代码段的0000H处开始单步执行_R IPIP XXXX: 0000_T④G命令执行命令(执行多条指令)_G 地址1 地址2表示从地址1开始执行指令到地址2结束例如:从代码段的0000H处开始连续执行指令,知道0013H处_R IPIP XXXX: 0000_G 0013⑤D命令显示内存单元的内容a、_D 地址b、_D 范围例如:显示数据段中0000H开始的若干个字节单元的内容_D DS:0000例如:显示数据段中0000H到0010H各字节单元的内容_D DS:0000 0010⑥E命令修改存储单元的内容例如:修改数据段0002H字节单元的内容为0FFH_E DS:0002XXXX:0002 XX FF⑦Q命令退出DEBUG程序实验二、分支程序设计一、实验目的1、掌握分支程序的结构形式2、掌握分支程序的设计方法 二、实验内容1、计算分段函数,X 为8位带符号数2、算法分析先将X 的范围确定在-10≤x ≤20之内,除此之外结果全为0,然后计算X+5,再根据结果的符号求绝对值。

编程实现循环程序

编程实现循环程序

微机原理实验报告实验三、编程实现循环程序电子信息工程(1)班1、流程图:2、程序如下:STACK SEGMENT STACKdw 32 DUP(?)STACK ENDSDA TA SEGMENTS1 DB 'please input a number:$'S2 DB 13,10,'Sum is:$'BUF DB 10 DUP(?)DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA,SS:STACKSTART PROC FARPUSH DSSUB AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV SI,OFFSET BUF ;入口参数:SI,BUF的偏移地址CALL NEXT1 ;子程序NEXT1MOV AH,4CHINT 21HNEXT1 PROCPUSH AXPUSH BXPUSH CXPUSH DXMOV DX,OFFSET S1MOV AH,9INT 21HMOV AH,1INT 21HSUB AL,30HMOV CX,10 ;循环次数AGAIN:MOV [SI],ALINC ALINC SI ;根据输入的数字递增填充BUFLOOP AGAINCALL NEXT2 ;调用子程序NEXT2POP DXPOP CXPOP BXPOP AXRETNEXT1 ENDPNEXT2 PROCPUSH AXPUSH BXPUSH CXPUSH DXMOV DX,OFFSET S2 ;显示提示字符Sum is:MOV AH,9INT 21HMOV SI,OFFSET BUFMOV CX,10 ;循环次数MOV AL,0SUM: ;实现累加,和置于AL中ADD AL,[SI]INC SILOOP SUM 判断循环是否为0MOV BL,ALCMP BL,100 ;判断和是否大于100JNB N1 ;是则跳到N1输出百位JMP N2 ;跳到N2输出十位和个位N1: ;数字的ASC11转换为十进制CBWMOV CL,100DIV CLMOV BL,AHADD AL,30HMOV DL,ALMOV AH,2INT 21HMOV AL,BLN2:XOR AH,AHCBWMOV CL,10DIV CLMOV BL,AHCMP AH,10ADD AL,30HMOV DL,ALMOV AH,2INT 21HADD BL,30HMOV DL,BLMOV AH,2INT 21HPOP DXPOP CXPOP BXPOP AXRETNEXT2 ENDPSTART ENDPCODE ENDSEND START3、实验结果:4、实验分析与结论:次次实验难度比上一次增加了很多,在做的过程中遇到了很多阻碍,尤其是在调用子程序和转换成ascll码那个地方的知识结构还是不清楚,常常会在那里出毛病,通过查找资料的过程中又学习了很多关于汇编语言的知识,最终才能顺利的把实验完成。

微机实验分支和循环程序设计实验

微机实验分支和循环程序设计实验

微机实验分支和循环程序设计实验微机实验三分支和循环程序设计实验一、分支程序设计实验1.实验目的1.掌握分支程序的结构。

2掌握分支程序的设计、调试方法。

2.实验设备微机一台3.内容设计一数据块间的搬移程序代码:DATA SEGMENT ;定义数据段ORG 2520H ;输入原数据存放地址 X DB 1,2,3,4,5,6,7 ;1234567的赋值COUNT EQU $-X ;计算数据串长度 ORG 2525H ;输入目的数据存放地址 Y DB 7 DUP(0) ;定义目的数据长度 DATA ENDS ;数据段结束STACK SEGMENT PARA STACK 'STACK' ;定义堆栈段 STAPN DB 100 DUP(?) ;定义100个字节空间 TOP EQU LENGTH STAPN STACK ENDSCODE SEGMENT ;定义代码段MAIN PROC FAR ;过程定义语句ASSUME CS:CODE,DS:DATA,SS:STACK ;段寄存器分别与哪些段有关START:MOV AX,STACK;设置堆栈寄存器MOV SS,AXMOV SP,TOPPUSH DS ;DS入栈保护SUB AX,AX ;AX=0PUSH AX ;段内偏移量0入栈MOV AX,DATA ;数据段基址赋给AXMOV DS,AXLEA AX,X ;取X的地址偏移量LEA BX,Y ;取Y的地址偏移量CMP AX,BX ;比较大小JC FE ;如果AX小于BX,则执行FEJMP FS ;否则执行FSFS: MOV SI,0 ;从前往后复制MOV DI,0MOV CX,COUNT ;确定复制次数CIRCLE1:MOV AL,X[SI] ;MOV不能实现两存储空间赋值,所以先把原始数据存入ALMOV Y[DI],AL ;将数据赋给YINC SI ;SI指向下一个数据INC DI ;DI指向下一个数据LOOP CIRCLE1 ;循环赋值JMP END1 ;循环结束退出 FE: MOV SI,COUNT ;从末尾开始赋值MOV DI,COUNTDEC SI ;指向最后一个数据DEC DIMOV CX,COUNT ;确定循环次数CIRCLE2: MOV AL,X[SI] ;MOV不能实现两存储空间赋值,所以先把原始数据存入ALMOV Y[DI],AL ;将数据赋给YDEC SI ;SI指向下一个数据DEC DI ;DI指向下一个数据LOOP CIRCLE2 ;循环赋值JMP END1 ;循环结束退出END1: RET ;返回dos MAIN ENDP ;MAIN过程结束CODE ENDS ;代码段结束END MAIN ;源代码结束运行结果:若从后往前传:若从前往后传:二、循环程序设计实验1.实验目的(1)加深对循环结构的理解。

微机原理实验报告

微机原理实验报告

微机原理实验报告微机原理实验报告班级:自动化72组员梁慕佳 07054031张乐 07054033张林鹏 07054034实验一:8255 并行接口实验1 实验目的1. 学习并掌握8255 的工作方式及其应用;2. 掌握8255 典型应用电路的接法。

2 实验设备PC机一台,TD-PITE 实验装置一套。

3 实验内容1. 基本输入输出实验。

编写程序,使8255 的A口为输入,B口为输出,完成拨动开关到数据灯的数据传输。

要求只要开关拨动,数据灯的显示就发生相应改变。

2. 流水灯显示实验。

编写程序,使8255 的A口和B口均为输出,数据灯D7~D0由左向右,每次仅亮一个灯,循环显示,D15~D8与D7~D0 正相反,由右向左,每次仅点亮一个灯,循环显示。

4 实验原理并行接口是以数据的字节为单位与I/O 设备或被控制对象之间传递信息。

CPU和接口之间的数据传送总是并行的,即可以同时传递8 位、16 位或32 位等。

8255可编程外围接口芯片是Intel公司生产的通用并行I/O 接口芯片,它具有A、B、C三个并行接口,用+5V单电源供电,能在以下三种方式下工作:方式0--基本输入/输出方式、方式1--选通输入/输出方式、方式2--双向选通工作方式。

8255的内部结构及引脚如图2-6-1 所示,8255工作方式控制字和C口按位置位/复位控制字格式如图2-6-2所示。

图2-6-1 8255内部结构及外部引脚图图2-6-2 8255控制字格式5 实验步骤1. 基本输入输出实验本实验使8255 端口A工作在方式0 并作为输入口,端口B工作在方式0 并作为输出口。

用一组开关信号接入端口A,端口B 输出线接至一组数据灯上,然后通过对8255 芯片编程来实现输入输出功能。

具体实验步骤如下述:(1)实验接线图如图2-6-3所示,按图连接实验线路图;(2)编写实验程序,经编译、连接无误后装入系统;(3)运行程序,改变拨动开关,同时观察LED 显示,验证程序功能。

微机原理硬件实验二_用74HC273输出数据

微机原理硬件实验二_用74HC273输出数据

硬件实验二 74HC273输出数据及 74LS245读入数据一、实验要求1、利用板上的 273 输出电路,从总线上输出 I/O 信号,控制八个 LED 灯的亮灭。

编程实现 LED 灯从 L0 开始轮流点亮。

2、利用板上的 245 输入电路,用总线方式读入开关状态。

二、实验目的1、学习在微机系统中扩展简单 I/O 接口的方法。

2、学习数据输出程序的设计方法。

3、了解数据锁存的概念和方法。

4、了解 CPU常用的端口连接总线的方法。

5、掌握 74LS245 进行数据读入或输出。

三、实验电路四、实验连接1、273 连接连线 连接孔 1 连接孔 2 连线 连接孔 1 连接孔 21 L0 273-O0 6 L5 273-O52 L1 273-O1 7 L6 273-O63 L2 273-O2 8 L7 273-O74 L3 273-O3 9 CS0 CS2735 L4 273-O42、245连接连线 连接孔 1 连接孔 2 连线 连接孔 1 连接孔 21 K0 245-I0 6 K5 245-I52 K1 245-I1 7 K6 245-I63 K2 245-I2 8 K7 245-I74 K3 245-I3 9 CS0 CS2455 K4 245-I4五、实验说明1、因为本实验是用74HC273扩展 I/O端口。

方法是:通过片选信号和写信号将数据总线上的值锁 存在 273 中, 同时在 273的输出端输出, 当数据总线上的值撤消以后, 由于 273 能够锁存信号, 所以 273 的输出端保持不变,直到下次有新的数据被锁存。

本实验中,在数据输出同时输出片选信号和写信号。

2、一般情况下,CPU 的总线会挂有很多器件,如何使这些器件不造成冲突,这就要使用一些总线隔 离器件,例如 74LS245 就是一种。

74LS245 是三态总线收发器,利用它既可以输出也可输入数据。

本实 验 74LS245 的片选地址为 CSO,即 8000H,读这个地址,就是从 74LS245 读回开关的值。

(完整版)简单的循环程序

(完整版)简单的循环程序

一、 实验目的:1. 熟练掌握3种循环语句的用法。

2. 掌握在程序设计中用循环方法实现一些常用算法。

3. 进一步学习调试程序。

二、 实验内容:1. 调试示例:下列程序意在计算1+2+…+100的值,程序有错误,请通过调试改正并运行之。

有错误的程序:#include<stdio.,h>Int main(){Int I ,sum ;For(i=1,i<=100,i++)Sum=sum+I;Printf(“sum=%d\n ”,sum);Return 0;}改过后的程序:#include <stdio.h>void main(){int i,sum;for(i=1,sum=0;i<=100;i++)sum=sum+i;printf("sum=%d\n",sum);return 0;}程 序 输 出 结 果:2. 改错题下列给定程序中的功能是:根据整型参数m 的值,计算如下公式的值:mm t ⨯--⨯-⨯-=13312211Λ 请改正程序中的错误,使它能得出正确的结果。

注意:不得增行或删行,也不得更改程序的结构。

#include <stdio.h >Void main(){Int i,m=5;Double y=1.0;/*****found*******/For(i=2;i<m;i++)/*****found*******/Y-=1/(i*i);Printf(“\nThe result is %lf\n”,y);}修改以后的程序结构:#include <stdio.h>void main(){int i,m=5;double y=1.0;for(i=2;i<=m;i++)y-=1.0/(i*i);printf("\nthe result is %lf\n",y);}输出结果:3.编写并调试打印乘法九九表的程序。

微机原理loop循环的应用

微机原理loop循环的应用

微机原理loop循环的应用1. 什么是loop循环在微机原理中,loop循环是一种重复执行某段代码的结构。

通过使用loop循环,可以简化程序的编写,并且可以在程序执行中多次运行同一段代码。

2. loop循环的应用场景loop循环可以在各种应用场景中发挥作用,下面列举了几个常见的应用场景:•数据处理:在数据处理过程中,如果需要对数据集合进行遍历或者执行某种操作,可以使用loop循环来实现。

例如,在一个数组中查找特定元素或对集合中的元素进行求和等操作。

•图形绘制:loop循环可以用来实现图形的绘制。

通过在每个像素点上执行一系列的操作,可以绘制出复杂的图形。

例如,在绘制一个矩形时,可以使用loop循环来控制每个像素点的颜色和位置。

•模拟仿真:在模拟仿真中,loop循环可以用来模拟实际系统的行为。

通过重复执行一段代码,可以不断更新系统的状态,并模拟出该系统的运行过程。

•游戏开发:在游戏开发中,loop循环可以用来实现游戏的主循环。

通过每一帧都执行一系列的操作,可以控制游戏的逻辑和渲染。

3. loop循环的语法loop循环的语法会根据不同的编程语言而有所不同,下面是几种常见编程语言中loop循环的语法:•C语言:for (初始化表达式; 循环条件; 更新表达式) {// 循环体语句}•Python语言:for变量in序列:# 循环体语句•JavaScript语言:for (初始化语句;循环条件;更新语句) {// 循环体语句}4. loop循环的应用示例下面给出一个使用loop循环的应用示例,以展示它在实际编程中的应用:```python # 计算1到10的平方和 sum = 0 for i in range(1, 11): sum += i * i print(f。

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

微机原理实验
实验二编程实现循环程序
编程实现:自行定义某班30个学生的某课程成绩(0~100分之间),要求:
统计>=90分、80~89分、70~79分、60~69分、60分以下的人数,结果转为ASCII码显示出来(要求有分数段字符串提示,并每个分数段一行显示)。

结果举例:
>=90:3
80-89:4
70-79:11
60-69:10
<60:2
实验流程图:
程序:
stack segment stack 'stack'
dw 100H dup(0)
stack ends
data segment
BUF DW 62,73,32,74,66,54,71,65,97,98
DW 75,82,81,59,92,85,88,66,61,89
DW 63,98,88,43,39,96,66,45,12,20
COUNT EQU $-BUF ;COUNT的值为BUF所占的字节数STR1 DB '<60:','$'
STR2 DB '60-69:','$'
STR3 DB '70-79:','$'
STR4 DB '80-89:','$'
STR5 DB '>90:','$'
RES DW 30 DUP(?) ;在存储区RES中设置30个初值为0的数据data ends
code segment
begin proc far
assume ss:stack,cs:code,ds:data
push ds
sub ax, ax
push ax
mov ax, data
mov ds, ax
START: MOV CX,COUNT/2+1 ;设计数器初值
MOV DI,OFFSET RES ;取RES的首址
MOV SI,OFFSET BUF-2 ;取BUF的首址
LURY: INC SI
INC SI ;修改SI指针
DEC CX ;设循环次数CX
JZ OUTPUT ;循环结束,则转OUTPUT
MOV AX,[SI] ;取BUF中第一个数放到AX寄存器
CMP AX,60 ;将AX中数据和60进行比较
JB LOP1 ;小于60,则转LOP1
CMP AX,70 ;否则,继续与70进行比较
JB LOP2 ;小于70,则转LOP2
CMP AX,80 ;否则,继续与80进行比较
JB LOP3 ;小于80,则转LOP3
CMP AX,90 ;否则,继续与90进行比较
JB LOP4 ;小于90,则转LOP4
CMP AX,100 ;否则,继续与100进行比较
JB LOP5 ;小于100,则转LOP5
LOP1: MOV BX,[DI]
INC BX
MOV [DI],BX ;对小与60的数据计数,并把其放在RES的第一个字节中JMP LURY ;转到LURY
LOP2: MOV BX,[DI+2]
INC BX
MOV [DI+2],BX ;对60-69的数据计数,并把其放在RES的第二个字节中JMP LURY ;转到LURY
LOP3: MOV BX,[DI+4]
INC BX
MOV [DI+4],BX ;对70-79的数据计数,并把其放在RES的第三个字节中
JMP LURY ;转到LURY
LOP4: MOV BX,[DI+6]
INC BX
MOV [DI+6],BX ;对80-89的数据计数,并把其放在RES的第四个字节中
JMP LURY ;转到LURY
LOP5: MOV BX,[DI+8]
INC BX
MOV [DI+8],BX ;对90-99的数据计数,并把其放在RES的第五个字节中
JMP LURY ;转到LURY
OUTPUT: LEA DX,STR1 ;取字符串STR1的首址
MOV AH,9
INT 21H ;输出字符串STR1
CALL DATCH
LEA DX,STR2 ;取字符串STR2的首址
MOV AH,9
INT 21H ;输出字符串STR2
ADD DI,2
CALL DATCH
LEA DX,STR3 ;取字符串STR3的首址
MOV AH,9
INT 21H ;输出字符串STR3
ADD DI,2
CALL DATCH
LEA DX,STR4 ;取字符串STR4的首址
MOV AH,9
INT 21H ;输出字符串STR4
ADD DI,2
CALL DATCH
LEA DX,STR5 ;取字符串STR5的首址
MOV AH,9
INT 21H ;输出字符串STR5
ADD DI,2
CALL DATCH
MOV AH,1
INT 21H
MOV AH,4CH
INT 21H ;返回DOS
datch proc ;数值转换为ASCII码的子程序PUSH DX
PUSH CX
PUSH BX
PUSH AX
XOR DX,DX
MOV AX,[DI]
MOV CX,10
DIV CX
MOV BX,DX
MOV DL,AL
ADD DL,30H
MOV AH,2
INT 21H
MOV DL,BL
ADD DL,30H
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
MOV DL,0DH
MOV AH,2
INT 21H
POP AX
POP BX
POP CX
POP DX
ret
datch endp
begin endp
code ends
end begin
实验记录:
实验总结:
开始面对循环程序汇编感到很迷茫,在循环程序语言上出现了很多错误,导致运行不了,后来根据运行提示的错误,一步一步改正,慢慢步入正轨,通过这次实验,使我深入了解了“编程实现循环程序”这次
微机实验,提高了分析和解决问题的能力,明白了子程序的一些运用。

相关文档
最新文档