微机原理与汇编语言_实验3_循环程序设计实验汇总
微机原理及汇编语言程序设计实验指导书
微机原理及汇编语言程序设计实验指导书计算机实验中心目录实验一D E B U G的使用 (3)实验二数制转换程序 (8)实验三数组排序程序 (10)实验四数据的输入与输出程序 (11)实验五子程序设计 (12)实验六宏调用程序设计 (14)实验一 DEBUG的使用【实验目的】1.学习使用DEBUG调试程序的各种命令。
2.掌握8088/8086指令系统---数据传送指令、算术指令。
3.掌握用DEBUG调试程序的方法。
4.掌握8088/8086 CPU寄存器的用途和存储器组织及它们之间的关系。
5.掌握内存操作数及寻址方法。
6.掌握汇编语言伪操作:BYTE PTR,WORD PTR。
7.熟悉在PC机上建立、汇编、连接、调试和运行汇编语言程序的过程。
8.掌握数据传送、算术运算、BCD码调整和循环指令的用法,掌握字符显示的方法。
【实验性质】验证性实验(学时数:2H)【实验内容】一、DEBUG 命令的使用1.敲 DEBUG 进入 DEBUG 环境,显示提示符 '_ '。
2.用命令 D100 10F 观察内存中的16进制码及屏幕右边的ASCII字符。
3.用命令 E100 30 31 32 …… 3F 将30H~3FH写入地址为100H开始的内存单元中,再用D命令观察结果,看键入的16进制数是什么字符的ASCII码?4.用命令 F100 L0F 'A' 将'A'的ASCII码填入内存,用D命令查看结果。
5.用命令 F110 11F 41 将41H 填入内存,用D命令观察结果并比较。
6.用R 命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF和AF的内容。
7.用R命令将AX,BX内容改写为1234H及5678H。
8.用H命令检查下列各组16进制数加减结果并和你的手算结果比较:(1)34H,22H (2)56H,78H (3)A5,79H (4)1284H,5678H (5)A758,347FH二、8088/8086常用指令练习1.传送指令1)用A命令在内存100H处键入下列内容:MOV AX,1234MOV BX,5678XCHG AX,BXMOV AH,34MOV AL,56MOV CX,75ABXCHG AX,CX2)用U命令检查键入的程序,特别注意左边的机器码。
实验3 循环与子程序汇编语言程序设计实验
六、执行到 5!,r2=1!+2!+3!+4!+5!=153=0x99
汇编程序代码:
4、 选做:利用 1 题中找最大数的方法,对内存中 19、21、4、33、51、16、72、28、39,2 的 10 个数据进行选择法升序排序。
5、 选做:用递归调用方法求 n!,n=6。 一、调试状态
12
二、执行 STRAT,开始给定义的寄存器赋值,然后跳转到 LOOP 子程序执行
分析:寄存器 r5 的值是 0x78,即是:1*2*3*4*5=120 汇编程序代码
9
3、 编写子程序调用程序 p3xxxx3.s,求 1!+2!+3!…+5!;其中子程序完成求 n!任务, 主程序完成求阶乘和的任务。
一、开始调试,执行 STRAT,给寄存器赋值,然后跳转到 LOOp 子程序执行
二、开始执行,r0=r0+1=1+1=2,同时 r3=r0*r1=2*1=2,如下面的图中的寄存器显示
分析:上面的图显示,r0=1,r1=1 三、开始执行 1*2
分析:上面的图显示:r0 自加 1,r0=2,r1=1 四、下面的图显示,r1*r0=r3=1*2=3
五、把 1*2=2 的值赋给 R1,
13
六、r0=2+1=3
七、R1*R0=2*3=6,值送到寄存器 R3 存放,r3=6
八、r0 自加 1 成 4,R0=4,R2=6
3
五、
分析:上面的图显示,寄存器 r0 的值是 0x28,即是 2*16+8=40=19+21 六、
分析:上面的图显示,寄存器 r0 的值是 0x2c, 即是 2*16+12=44=19+21+4 七、
汇编语言、微机原理、接口技术-八个实验(全)
成绩:计算机原理实验室实验报告课程:汇编语言与微机原理姓名:周晗专业:计算机科学与技术学号:1120542387日期:2013-12-19太原工业学院计算机工程系实验一:输入输出实验实验环境PC机+Win 2003+emu8086+proteus仿真器实验日期2013.10.29 一.实验内容1.熟悉emu8086仿真系统2.实现控制台输入输出3.设计并单步调试实现一位十进制数的加法运算(屏幕效果为3+2=5,红色为输入其他为自动输出)扩展要求:1.实现两位十进制和的输出2.实现一位十进制四则运算3.实现多位数运算二.理论分析或算法分析基本要求:输入一位数保存在寄存器BL中,然后输出“+”,再输入被加数并加到BL。
将计算的结果输出。
扩展要求:实现两位十进制和的输出,不同于基本要求的是有了低位的进位。
对于低位的相加有进位,并且要给了高位。
首先必须把输入的字符数转换为数值型,才可能有进位。
然后进行加法的aaaBCD调整。
从键盘读取第一个数(1)从键盘键入一个数字(用DL保存“+”号),再键入第二个数字,(用DL存储等号)输出得数。
(2)从键盘读取第一个数的十位,输入被加数十位保存到BH,并且减去30H,第一个个位的数保存到BL且减去30H,从键盘读取第2个加数存储到CH中减去30H,第二个个位数存储到CL中,减去30H。
个位将AL,和CL用ADD相加,在传个AL。
十位上用ADC 将AL和CH相加。
再用aaaBCD调整三.实现方法(含实现思路、程序流程图、实验电路图和源程序列表等)1、基本要求MOV AH,1INT 21HMOV BH,AL;输出加号MOV DL,'+' MOV AH,2INT 21H;从键盘读第二个数MOV AH,1INT 21H;保存第二个数MOV BL,AL;输出等于号MOV DL,'=' MOV AH,2INT 21H ;两数相加ADD BL,BHSUB BL,30H;输出结果MOV DL,BLMOV AH,2INT 21H 2.扩展要求MOV AH,1INT 21H;保存第一个数的十位MOV BH,AL;从键盘读取第一个数的个位MOV AH,1INT 21H;保存第一个数的个位MOV BL,AL ;输出加号MOV DL,'+'MOV AH,2INT 21H ;从键盘读第二个数的十位MOV AH,1INT 21H;保存第二个数的十位MOV CH,AL ;从键盘读第二个数的个位MOV AH,1INT 21H;保存第二个数的个位MOV CL,AL;输出等于号MOV DL,'='MOV AH,2INT 21H两数相加;个位相加MOV AL,BLADD AL,CLAAAMOV BL,AL ;十位带CF加MOV AL,BHADC AL,CHAAAMOV BH,ALADD BL,30HADD BH,30H;输出结果的十位MOV DL,BHMOV AH,2INT 21H ;输出结果的个位MOV DL,BLMOV AH,2INT 21H四.实验结果分析(含执行结果验证、输出显示信息、图形、调试过程中所遇的问题及处理方法等)1.实现了一位十进制的加法2.实现两位十进制和的输出五.结论通过实验,初步了解emu8086仿真系统,能用汇编语言设计简单的程序我学会了简单的输入输出字符、对于的数据和计算的数据初步的理解。
汇编实验2-循环程序设计-实验报告
汇编实验2-循环程序设计-实验报告一、实验目的1、了解循环程序设计的方法2、理解汇编语言中循环指令的使用3、掌握汇编语言中常用的循环结构二、实验原理1、循环指令循环指令是计算机中常用的一种控制结构,其作用是重复执行一定的操作。
在汇编语言中,常用的循环指令有LOOP、LOOPE、LOOPNE等,具体功能如下:(1)LOOP:重复执行指定次数的操作;(2)LOOPE:执行操作直到CX寄存器为0或ZF寄存器为1;(3)LOOPNE:执行操作直到CX寄存器为0或ZF寄存器为0。
LOOP指令的语法格式如下:LOOP label其中,label表示循环的目标地址。
2、循环结构循环结构是计算机程序设计中常用的一种结构,其基本形式包括:while、do...while、for等。
在汇编语言中,常用的循环结构有以下两种:(1)无限循环结构:该结构适用于需要不停顿地进行某项操作的情况,底层逻辑基于测试指令;(2)计数器循环结构:该结构适用于需要循环指定次数的情况,底层逻辑基于循环指令。
三、实验内容1、使用循环指令实现计算1~10的和;2、使用循环结构实现计算1~10的和。
四、实验步骤1、使用循环指令实现计算1~10的和。
(1)将计数器初始化为10,即MOV CX,10;(2)将累加器初始化为0,即MOV AX,0;(3)将当前计数器值加到累加器中,即ADD AX,CX;(4)将计数器减1,即DEC CX;(5)判断计数器是否为0,若不为0,则执行第3步;若为0,则跳转到计算结果的部分。
2、使用循环结构实现计算1~10的和。
(1)将计数器初始化为10,即MOV CX,10;(2)将累加器初始化为0,即MOV AX,0;(3)将当前计数器值加到累加器中,即ADD AX,CX;(4)将计数器减1,即DEC CX;(5)判断计数器是否为0,若不为0,则执行第3步;若为0,则跳转到计算结果的部分。
五、实验结果(1)使用循环指令实现计算1~10的和MOV CX,10MOV AX,0LOOP label1ADD AX,CXDEC CXJNZ label1label1:MOV sum,AX(2)使用循环结构实现计算1~10的和MOV CX,10MOV AX,0label2:ADD AX,CXDEC CXJNZ label2MOV sum,AX六、实验总结本次实验实现了两种不同的循环方式,分别使用了循环指令和循环结构。
《微机原理与接口通信》之汇编语言程序设计实验指导
基础实验一、汇编过程与DEBUG调试实验一、实验目的:1.熟悉DEBUG常用命令。
2.熟悉汇编指令及其寻址方式和对标志位的影响。
3.学会用汇编语言设计、编写、调试和运行程序的方法。
二、实验内容:1.使用文本编辑程序建立名为B.ASM的源程序文件,并输入下面程序内容,然后存盘。
DA TA SEGMENTX DD 99AABBCCHY DD 55667788HZ DD ?DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART: MOV AX, DATAMOV DS, AXMOV DI, OFFSET ZMOV AX, WORD PTR XADD AX, WORD PTR YMOV [DI], AXMOV AX, WORD PTR X[2]ADC AX, WORD PTR Y[2]MOV [DI+2], AXEXIT: MOV AX, 4C00HINT 21HCODE ENDSEND START问:1)程序的功能是什么?2)数据标号X、Y、Z的地址(偏移量)分别是多少?3)程序的各条语句中源操作数和目的操作数分别是什么寻址方式?4)标号EXIT后面的2条指令有什么功能?5)在在标号地址EXIT处设置断点,在程序暂停时从相应内存单元检查Z的内容,看结果是否正确。
2. 编写程序,用8086指令实现双字操作数X的内容循环左移N位。
编程提示:1)如果要对双精度数(双字)DX:AX循环左移1位,可用如下指令段:SAL AX, 1 ;将AX内容算术左移1位,最低位补0,最高位移至进位位CF RCL DX, 1 ;将DX内容带进位循环左移1位,原CF内容移至DX最低位,;DX最高位移至CFADC AX, 0 ;CF内容即原DX最高位加至AX最低位2)如果要对双精度数(双字)DX:AX循环左移N位,则将上述程序段循环执行N次即可。
3. 编写程序,在屏幕上显示一段英文信息,如“Hello Kitty!”或者你喜欢的其他一段文字。
微机原理与汇编语言实验报告
微机原理与汇编语言实验报告学号:********班级:*****姓名:*****指导教师:*****一.实验目的1.通过上机实验进一步熟悉并掌握汇编语言的指令系统和寻址方式;2.熟悉汇编语言程序上机的流程,以及与实验有关的系统软件(如编辑程序、汇编程序、连接程序和调试程序等)3.学习汇编程序设计的基本方法和技能,熟练掌握用汇编语言设计、编写、调试和运行程序的方法4.能够独自编写,调试,并成功运行一个完整的程序。
二.实验内容与步骤1.掌握汇编语言程序上机过程首先,新建文本文档后将扩展名改为.ASM,这是汇编语言源程序的文件格式,以记事本形式打开后在其中键入所编写的程序。
第一次题目是在屏幕上显示一串字符串,在老师的指导下,编写的程序如下:data segmentnote db 'hello','$'data endscode segmentmain proc farassume cs:code,ds:data,es:datastart:push dssub ax,axpush axmov ax,datamov ds,axmov es,axmov ah,09hlea dx,noteint 21hmain endpcode endsend start之后,要进行编译和运行。
源程序经过翻译程序成为机器能够识别的目标程序,目标程序再经过连接程序连接后转换成在机器上可执行的程序。
基本流程图如下:在编译的过程中,程序查出的主要是语法上的错误,如果有错,则不能通过汇编,要纠错后重新汇编直到无错为止。
最后,生成的.EXE文件即为可执行文件,从磁盘调入内存运行,得到运行结果。
上述程序的运行结果为在屏幕上显示出“hello”。
2.编程完成任意两个两位数的加法运算编程任务的基本要求为:从键盘输入任意两个两位数相加,将结果显示在屏幕上。
刚开始拿到题目后,头脑里是比较混乱的。
经过与同学的探讨之后,我们大概确定出要完成整个功能,需经过以下过程:将输入的ASCII码与十进制数值进行转换,并保存在寄存器中;通过调用程序将两个数相加,并将结果保存;将结果显示在屏幕上。
“微机原理与汇编语言程序设计”实验内容及报告要求(2009年下期自动化07级)
实验内容及报告要求一、实验内容实验内容::实验一实验一 键盘键盘键盘、、显示程序设计实验显示程序设计实验((教材P30P30)) 提高部分:1、显示数据输入提示信息、键盘输入一个字符,屏幕显示字符的ASC Ⅱ码;2、显示字符串输入提示信息、键盘输入一个字符串,屏幕显示对应字符串 中各字符的ASC Ⅱ码。
实验二实验二数据传送数据传送数据传送、、数码转换程序设计实验数码转换程序设计实验((教材P33P33、、3535)) 提高部分:1、数据传送,完成20个数据的传送,并对附加段数据进行升序排列,并在 屏幕上显示排序后的数据,以及最大数据和最小数据。
2、数据转换,键盘输入2位(或以上)十进制数,分别转换成十六进制数、 BCD 码、七段共阳极码。
实验三实验三运算类程序设计实验运算类程序设计实验运算类程序设计实验((教材P39P39)) 提高部分:键盘输入5位被减数和减数,计算并以恒等式形式显示在屏幕上(允许被减 数<减数)。
实验四实验四子程序设计实验子程序设计实验子程序设计实验((教材P44P44)) 提高部分:1、实现子程序以外部文件独立保存,并完成整个程序功能。
2、在数据转换及显示程序中,键盘输入一组字符,并以十六进制数显示。
实验五实验五基本基本I/O 接口与地址译码电路设计实验接口与地址译码电路设计实验((教材P72P72、、7575)) 提高部分:1、在“基本I/O 接口电路设计实验”中,如何扩展16路输入、输出功能?2、在“地址译码电路设计实验”中,将Y6与CS_A 、Y7与CS_B ,改换成 Y0与CS_A 、Y1与CS_B 连接,修改程序并实现实验功能。
实验六实验六 8255 8255接口电路设计实验接口电路设计实验((教材P95P95)) 提高部分:1、开关量控制,实现流水灯的左循环、右循环、间隔闪烁功能。
2、标准键盘控制,实现流水灯的左循环、右循环、间隔闪烁功能。
实验七实验七 8253 8253定时器定时器//计数器设计实验计数器设计实验((教材P107P107)) 提高部分:1、完成基本功能基础上,利用LED 灯以二进制数显示中断次数(或定时时间到,完成LED 左移功能)。
微机原理实验三实验报告
实验3. 循环程序设计一、实验目的⒈掌握移位指令的使用方法。
⒉学会循环结构程序的编程方法。
⒊利用DEBUG调试程序查看循环程序循环过程中CS和IP的变化情况。
二、实验要求⒈编写程序并上机调试,记录运行结果。
⒉用DEBUG调试程序调试所编程序,查看并记录每条指令内存单元地址及执行结果(包括F标志寄存各位值。
)⒊注意观察并记录每条指令执行后CS和IP寄存器值变化情况,以加深对循环程序的概念的理解。
三、实验内容⒉编写统计15个学生数学学习成绩程序。
要求:分别统计出低于60分,60-69分,70-79分,80-89分,90-100分的人数,并存放到S5,S6,S7,S8,S9,S10对应内存单元中。
源程序代码;DATA SEGMENTDATA1 DB 55,60,65,88,67,70,75,80,77,85,90,66,95,53,100DATA2 DB 5 DUP(?)DATA ENDS;CODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV CX,15LEA SI,DATA1LEA DI,DATA2AGAIN:MOV AL,[SI]CMP AL,90JB NEXT1INC BYTE PTR[DI]JMP NEXT0NEXT1:CMP AL,80JB NEXT2INC BYTE PTR[DI+1]JMP NEXT0NEXT2:CMP AL,70JB NEXT3INC BYTE PTR[DI+2]JMP NEXT0NEXT3:CMP AL,60JB NEXT4INC BYTE PTR[DI+3]JMP NEXT0NEXT4:INC BYTE PTR[DI+4]NEXT0:INC SILOOP AGAINMOV AH,4CHINT 21HCODE ENDSEND START程序运行结果截图:四、实验总结本次实验掌握移位指令的使用方法。
微机原理与汇编语言_实验3_循环程序设计实验讲解
微机原理与汇编语言实验报告姓名x x x学号xxxxxx 专业班级计科x班课程名称微机原理与汇编语言实验日期2014.10.22实验名称循环程序设计实验成绩一、实验目的1、掌握循环程序的设计方法。
2、掌握比较指令、转移指令和循环指令的使用方法。
3、进一步掌握调试工具的使用方法。
二、实验内容1、实验原理(1)键盘输入的十进制数如368在计算机中是以33H,36H,38H形式存放的,如何将它们转换为一个二进制数101110000B,以便对累加循环的循环次数进行控制是本程序首先要解决的问题(2)累加结果为一个16位的二进制数,为了显示结果,必需把它们转换为十进制数2、实验步骤(1)流程图(2)实验源码.model small.stack ;定义堆栈段.data ;定义数据段inf1 db "Please input a number(1-627):$"inf2 db 0ah, 0dh, "1+2+......+$"ibuf db 7, 0, 6 dup(0)obuf db 6 dup(0).codestart: mov ax, @datamov ds, axmov dx, offset inf1;将屏幕输入的十进制数(存放于ibuf)转化为二进制数存储于ax 中mov ah, 09hint 21hmov dx, offset ibufmov ah, 0Ahint 21hmov cl, ibuf+1mov ch, 0mov si, offset ibuf+2mov ax, 0loop1: mov dx, 10mul dxand byte ptr [si], 0Fhadd al, [si] 从键盘输入一个十进制数,并将其转换为二进制数,存放在AX中开始结束素、、(CX)-1=0累加循环次数送CX(MOV CX,AX)AX清0(AX中存放累加和)BX送1(BX存放每次循环累加的数,每循环一次,BX值加1)ADD AX,BXINC BX累加和(在AX中)转换为十进制数并显示YNadc ah, 0inc siloop loop1mov cx, ax ;计算1+2+3+...+nmov ax, 0mov bx, 1loop2: add ax, bxinc bxloop loop2mov di, offset obuf+6 ;将ax中的二进制数转换为十进制数并以ascii的形式存于obufmov byte ptr [di], '$'mov bx, 10loop3: mov dx, 0div bxadd dl, 30hdec dimov [di], dlor ax, axjnz loop3dec dimov [di], '='mov dx, offset inf2 ;结果输出mov ah, 09hint 21hmov cl, ibuf+1 ;显示nmov ch, 0mov si, offset ibuf+2loop4: mov dl, [si]add dl, 30hinc simov ah, 02hint 21hloop loop4mov dx, dimov ah, 09hint 21hmov ax, 4c00hint 21hend start实验习题1源码:; multi-segment executable file template..model small ;定义程序的存储模式(small表示小型模式).stack ;定义堆栈段.data ;定义数据段inf1 db 0ah, 0dh, "1+2+......+$"obuf1 db 6 dup(0)obuf2 db 7 dup(0) ;除了六位数字外还要有一个=号.codestart: mov ax, @datamov ds, axmov dx, offset inf1 ;输出 1+2+......+mov ah, 09hint 21hmov ax, 0 ;计算1+2+3+...+nmov bx, 1loop1: add ax, bxinc bxcmp ax, 60000jbe loop1push ax ;将最终结果备份入栈push bx ;将n备份pop cxmov di, offset obuf1+5;将cx二进制数转换为十进制数并以ascii的形式存于obuf1mov byte ptr [di], '$'mov ax, cxmov bx, 10loop2: mov dx, 0div bxadd dl, 30hdec dimov [di], dlor ax, axjnz loop2mov dx, di ;输出nmov ah, 09hint 21hpop axmov di, offset obuf2+6;将ax中的二进制数转换为十进制数并以ascii的形式存于obuf2mov byte ptr [di], '$'mov bx, 10loop3: mov dx, 0div bxadd dl, 30hdec dimov [di], dlor ax, axjnz loop3dec dimov [di], '='mov dx, di ;=输出结果mov ah, 09hint 21hmov ax, 4c00hint 21hend start实验习题2源码:; multi-segment executable file template..model small ;定义程序的存储模式(small表示小型模式).stack ;定义堆栈段.data ;定义数据段inf1 db 'Please input six num:', 0ah, 0dh, '$'inf2 db 'sum:$'obuf0 db 0ah, 0dh, '$'ibuf db 5, 0, 4 dup(0)obuf db 6 dup(0).codestart: mov ax, @datamov ds, axmov dx, offset inf1 ;输出提示信息mov ah, 09hint 21hmov bx, 6 ;设置外层循环次数loop1: mov dx, offset ibufmov ah, 0Ahint 21hmov cl, ibuf+1 ;设置内层循环次数mov ch, 0mov si, offset ibuf+2mov ax, 0loop2: mov dx, 10 ;将屏幕输入的十进制数(存放于ibuf)转化为二进制数存储于ax中 mul dxand byte ptr[si], 0Fhadd al, [si]adc ah, 0inc siloop loop2push ax ;将结果入栈保存mov dx, offset obuf0 ;回车换行mov ah, 09hint 21hdec bxcmp bx, 0jnz loop1mov cx, 6mov ax, 0loop3: pop bxadd ax, bxloop loop3mov di, offset obuf+5;将ax中的二进制数转换为十进制数并以ascii的形式存于obuf mov byte ptr [di], '$'mov bx, 10loop4: mov dx, 0div bxadd dl, 30hdec dimov [di], dlor ax, axjnz loop4mov dx, offset inf2 ;输出提示信息mov ah, 09hint 21hmov dx, dimov ah, 09hint 21hmov ax, 4c00hint 21hend start实验习题3源码:; multi-segment executable file template..model small ;定义程序的存储模式(small表示小型模式) .stack ;定义堆栈段.data ;定义数据段inf db "Please input a num(0-65535):$"inf2 db 0ah, 0dh, "The num of 1:$"ibuf db 6, 0, 5 dup(0)obuf db 6 dup(0).codestart: mov ax, @datamov ds, axmov es, axmov ah, 09h ;输出提示信息Please input a num:mov dx, offset infint 21hmov ah, 0Ah ;接收一个无符号十进制整数(小于65536)mov dx, offset ibufint 21hmov ax, 0mov cl, ibuf+1;将屏幕输入的十进制数(存放于ibuf)转化为二进制数存储于ax中mov ch, 0mov si, offset ibuf+2loop1: mov dx, 10mul dxand byte ptr[si], 0Fhadd al, [si]adc ah, 0inc siloop loop1mov bx, 0loop2: shr ax, 1adc bx, 0cmp ax, 0jnz loop2mov ax, bxmov di, offset obuf+5;将ax中的二进制数转换为十进制数并以ascii的形式存于obufmov byte ptr [di], '$'mov bx, 10loop3: mov dx, 0div bxadd dl, 30hdec dimov [di], dlor ax, axjnz loop3mov ah, 09h ;输出提示信息The num of 1:mov dx, offset inf2int 21hmov ah, 09h ;将统计结果在屏幕上显示出来mov dx, diint 21hmov ax, 4c00hint 21hend start实验习题4源码:; multi-segment executable file template..model small ;定义程序的存储模式(small表示小型模式).stack ;定义堆栈段.data ;定义数据段N equ 5ibuf db 4, 0, 3 dup(0)inf1 db 'Please input N num(0-255):', 0ah, 0dh, '$'inf2 db 'Sort:', 0ah, 0dh, '$'buf db N dup(0)obuf2 db 4 dup(0)obuf db 0ah, 0dh, '$'.codestart: mov ax, @datamov ds, axmov dx, offset inf1 ;输出提示信息mov ah, 09hint 21hmov di, offset bufmov bx, N ;设置外层循环次数loop1: mov dx, offset ibufmov ah, 0Ahint 21hmov cl, ibuf+1 ;设置内层循环次数mov ch, 0mov si, offset ibuf+2mov ax, 0loop2: mov dx, 10 ;将屏幕输入的十进制数(存放于ibuf)转化为二进制数存储于ax中 mul dxand byte ptr[si], 0Fhadd al, [si]inc siloop loop2mov [di], alinc dimov dx, offset obuf ;回车换行mov ah, 09hint 21hdec bxcmp bx, 0jnz loop1mov bx, N-1 ;比较大小mov cx, bxmov dx, bxmov di, offset bufloop3: mov si, dimov al, [di]inc siloop4: cmp [si], aljbe loop5mov al, [si]mov ah, [di]mov [si], ahmov [di], alloop5: inc siloop loop4dec dxmov cx, dxinc didec bxcmp bx, 0jne loop3mov dx, offset inf2 ;输出提示信息mov ah, 09hint 21h;结果输出mov cx, Nmov si, offset bufloop6: mov di, offset obuf2+3;将buf中的二进制数转换为十进制数并以ascii的形式存于obuf2,并输出 mov byte ptr [di], '$'mov bx, 10mov al, [si]mov ah, 0loop7: mov dx, 0div bxadd dl, 30hdec dimov [di], dlor ax, axjnz loop7mov dx, dimov ah, 09hint 21hmov dx, offset obufmov ah, 09hint 21hinc siloop loop6mov ax, 4c00hint 21hend start3、实验结果(1)实验结果(2)实验习题1程序流程图:(3)实验习题2(4)实验习题3(5)实验习题4三、实验总结1)通过本次实验我掌握循环程序的设计方法,掌握比较指令、转移指令和循环指令的使用方法,进一步掌握了调试工具的使用方法。
汇编语言、微机原理、接口技术-实验三:循环程序实验
图一:直接选择排序
图二:冒泡排序
三.实现方法(含实现思路、程序流程图、实验电路图和源程序列表等
基本要求源代码:
冒泡排序关键代码:
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时直接退出循环。
五.结论\
完成了本次实验要求的实验内容。学会了实现内存数据访问,用两种方法实现对五个字从大到小排序
报告提交日期
汇编语言程序设计上机实验报告(实验三)-循环程序设计
汇编语言程序设计上机实验报告(实验三)一、实验题目、内容及要求:一、实验题目、内容及要求:题目:循环程序设计内容:编写一程序,要求从键盘接收一个4位十六进制数,在终端上显示与它等值的二进制数。
二进制数。
要求:实验前要作好充分准备,包括程序清单、调试步骤、调试方法,对程序结果的分析等。
本实验要求在EDIT 下编写完整的汇编语言程并生成可执行文件运行。
下编写完整的汇编语言程并生成可执行文件运行。
二、实验时间及地点二、实验时间及地点日期:日期: 2011/11/21 节次:节次: 7.8 地点:地点:电子实验楼二楼电子机房电子实验楼二楼电子机房 三、实验目的三、实验目的通过本实验掌握DOS 系统功能调用功能,掌握循环程序设计的方法;学会编写循环结构程序。
构程序。
简述在实验过程中遇到的问题和解决的方法:简述在实验过程中遇到的问题和解决的方法:1、问题:遇到死循环解决方法:程序显示disp 中发现执行int int 21h 21h 会修改al 的值,避免这种情况的方法就是使用堆栈段。
2、问题:调试中出现no data segment 解决方法:start 开始时没有将数据段的IP 地址赋给dx 。
data segment 3、问题:可执行,结果为乱码解决方法:数据划分比较的粗,没有系统的将数据系统划分。
系统划分:<30h other 30h-39h num 39h-41h other 41h-46h big zi mu 46h-61h other 61h-67h small zi mu >67h other 运行结果:(要求用“抓图软件”抓程序的运行结果)(要求用“抓图软件”抓程序的运行结果)结果分析及实验体会:结果分析及实验体会:1、结果0001001000110100是十六进制数1234转化而来。
十六进制数通过ASCII码对照转换为二进制数。
A~F----- -57hA~ f----- -57h0~9 ------ -37h2、学习应用了循环指令并了解了其特点:A、循环指令不影响标志位B、其功能为使寄存器CX的值减1,如果结果不等于0,则循环至标号,否则顺序执行。
最新微机原理实验之_分支程序、循环程序设计
实验三分支程序、循环程序设计实验一、实验目的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的值,观察在三种不同的数据块情况下程序的运行情况,并验证程序的功能。
汇编语言与微机原理实验报告
成绩:2计算机原理实验室实验报告课程:汇编语言与微机原理**:***专业:计算机科学与技术学号:*********日期:2013年12月太原工业学院计算机工程系实验一:输入输出实验3、思考内容(1)从键盘中输入和从从屏幕上输出的都是字符,和计算用的数据时间相差“0”即30H。
所以一个数从屏幕上输出时将+30H,输入时转换成数字-30H。
(2)单个字符,也就是CPU处理外设(键盘)的整个中断过程五.结论通过本次实验,完成了一位十进制数的加法运算,两位十进制数的和输出,一位十进制数的四则运算以及多位数运算的实验要求。
这次实验也让我熟悉了emu8086仿真系统,能够实现控制台的输入输出;也学会了如何去实现一位十进制数的加法运算还有两位十进制数的和输出以及一位十进制数的四则运算,知道了输入输出数据和计算用数据的区别,即)从键盘中输入和从从屏幕上输出的都是字符,和计算用的数据时间相差“0”即30H。
所以一个数从屏幕上输出时将+30H,输入时转换成数字-30H,还有单字符输入输出和串输入输出的不同。
实验二:分支程序实验2.扩展要求每次输出都换行实验三:循环程序实验lea si,datamov cx,time+1result:mov dl,[si]add dl,30hmov ah,2int 21hmov dl,' 'int 21hadd si,2loop resultjmp $time equ 4paixuqian dw 'paixuqian:','3','4','9','7','1','$'paixuhou dw 'paixuhou:','$'data dw 3,4,9,7,1四.实验结果分析(含执行结果验证、输出显示信息、图形、调试过程中所遇的问题及处理方法等)本次实验验证了实验基本要求,实现了直接选择排序和冒泡排序两种方法对五个字从大到小排序功能.1.直接选择排序结果:2.冒泡排序结果:3.思考内容:冒泡排序之所以能实现快速排序,是每一次排序都将最大或最小的放在最后或最前,并且有个来统计交换的次数,一旦交换的次数为0时直接退出循环。
微机原理实验--汇编语言部分
实验一 汇编语言程序上机过程练习
1、实验目的:掌握汇编语言程序的上机过程 2、实验内容:利用文本编辑软件(如记事本、edit 等)输入汇编语言源程序,利用masm对源程序进 行汇编,利用link对目标文件进行连接,利用 debug对可执行文件进行调试 3、实验步骤: 3、实验总结:(上机时遇到的问题及解决办法的调 试情况,观察到的现象及其分析,对程序设计技巧 的总结以及程序输出结果的分析,实验的心得体会 等。 )
实验四
DOS系统功能调用
1、实验目的:掌握DOS系统功能调用的 编程方法。 2、实验内容: 试编写一个汇编语言程序,要求对键盘 输入的小写字母用大写字母显示出来。 3、实验步骤: 4、实验总结:
参考主程序段
…… MOV INT SUB MOV MOV INT …… AH,1 21H AL,20H DL,AL AH,2 21H
预备知识二: Debug常用命令
6、退出DEBUG命令Q(Quit),其格式为: Q 它退出DEBUG,返回DOS。
CMOS密码清除
一、硬件法
打开机箱,找到主板上的电池,取下电池,此时CMOS将因断电而失 去内部储存的一切信息。 进入纯DOS后(注意:不要在Win2000/NT/XP环境下进入,因为 这不是真正的DOS),在DOS提示符后输入DEBUG,回车后再输入如 下命令: -o 70 16 -o 71 16 -q 此时,已退出到DOS提示符。重新启动计算机,你就会发现原来的 CMOS密码已经被清除(命令中的16可以用其它值)。
预备知识一:常用dos命令
DIR--显示指定路径上所有文件或目录的信息
它的格式为"DIR [盘符:][路径][文件名] [参 数]“ 参数: /P:分页显示,当屏幕无法将信息完成显示时, 可使用其进行分页显示; /S:显示当前目录及其子目录下所有的文件,通 过这个参数,我们可以进行某个文件或目录的查 找,比如我们可以在"C:>"后输入"DIR *.DAT /S ↙ "来查找C盘中所有后缀名为DAT的文件。 几种参数可以同时使用,例如"DIR *.COM /W/P/S ↙ "。
西安交大微机原理实验三循环程序的设计
实验三循环程序的设计一、实验目的1.掌握提示信息的使用方法和从键盘键入信息的用法2.掌握循环程序的设计方法二、实验内容编写程序,从键盘分别键入两个字符串,进行比较,若相同,则显示“MATC”H,否则,显示“NOMATC”H 。
三、实验原理强迫cpu 重复执行一指令序列的程序结构是循环程序。
循环程序结构分四部分:1、初始化部分2、循环处理部分3、循环控制部分4、结束部分。
四、程序代码CRLF MACROMOV AH,02HMOV DL,0DHINT 21HMOV AH,02HMOV DL,0AHINT 21HENDMDATA SEGMENTMESS1 DB'INPUT STRING1:',0DH,0AH,'$'MESS2 DB'INPUT STRING2:',0DH,0AH,'$'MESS3 DB'NO MATCH',0DH,0AH,'$'MESS4 DB'MATCH',0DH,0AH,'$'MAXLEN1 DB 81 ACTLEN1 DB ?STRING1 DB 81 DUP(?)MAXLEN2 DB 81ACTLEN2 DB ?STRING2 DB 81 DUP(?)DATA ENDSSTACK SEGMENT PARA STACK 'STACK'STA DB 50 DUP(?)TOP EQU LENGTH STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV SP,TOPMOV DX,OFFSET MESS1 MOV AH,09HINT 21HMOV AH,0AHMOV DX,OFFSET MAXLEN1 INT 21HCRLFMOV DX,OFFSET MESS2 MOV AH,09HINT 21HMOV AH,0AHMOV DX,OFFSET MAXLEN2 INT 21HCRLFMOV SI,OFFSET ACTLEN1 MOV BX,OFFSET ACTLEN2 MOV AL,[SI]CMP AL,[BX]JNE NOMA NOMATCH: MOV CX,[SI] AND CX,0FHNEXT:INC SIINC BXMOV AL,[SI]CMP AL,[BX]JNE NOMADEC CXCMP CX,0JNE NEXTMOV AH,09HMOV DX,OFFSET MESS4 INT 21HJMP DENDNOMA:MOV AH,09HMOV DX,OFFSET MESS3 INT 21HDEND:MOV AX,4C00HINT 21HEND START五、头验调试过程 1•调试字符串输入功能在edit 中输入代码,编译、链接后,用debug 的-u 命令反汇编生成的可执行文件 shiyan3.exa 首先调试字符串输入是否正确,设置断点如下所示:110778:0000 B06AG? MOU AX P G?6A U778:00G8 BED8 MOU DS, AX 077G :0GQ5 8EC0 ruu ES.AXGT?78:0OGV B88O07 MOU AX P 6?B00778: 0O0A BED0 rou SS,AX 0778:0OGC BC3Z0O MOU SF,G0QZ 0778:0OGF BAO0GG MOU DX.0000 Qf?78:001Z B409 MQU AH.09 0778:0614 CDZ1 IHT Z1 0778:0016 B4GA MOU AH (0A O7?a :O0ia BA35O0 MOU DX R6035 0778:001® CDZ1 IHT 21 O77O :0O1D B402 MOU AH 题 Q7?0: Q01T B20D MOU DLpOD -g43INPUT STHING1: xjtuINPUT 31H1INGZ : bjtuAX=0£GA BX=0OGG CX=0158 DX=O0GA SF=003ZBF=0O0G SI=0000 DI=0000DS=076A ES=G76A SS=O70e CS=Q776 IF=0GH3MU UP El PL HZ NA FO NC阴76:0643 EE3606MOUSI ,0036用-d 命令查看如下以上说明字符串输入部分工作正常。
微机原理与汇编语言实验
微机原理与汇编语言实验讲义目录第一章汇编语言编程环境熟悉 11.1汇编语言环境练习 (1)1.2汇编语言程序设计 (6)第二章超想-3000TB实验系统92.1概述 (9)2.2实验系统配置与运行 (10)2.3实验机模块原理 (10)第三章串行方式下的硬件实验以及调试软件143.1串行方式下的硬件实验 (14)3.2串口通信实验 (14)3.3并行接口 (18)3.4定时器/计数器与定时中断 (23)3.5中断控制器 (28)3.6模数、数模转换 (35)3.7综合应用实验 (37)第四章课程设计选题41选题一设计指针式的屏显电子钟 (41)选题二汉字菜单个去选唱程序 (41)选题三微机实验系统综合测试软件 (42)第一章 汇编语言编程环境熟悉1.1 汇编语言环境练习一、汇编程序功能:三、为了运行汇编语言程序在磁盘上要存在以下文件: 1. 编辑程序,如EDIT.EXE 。
2. 编译程序,如MASM.EXE 。
3. 连接程序,如LINK.EXE 。
4. 调试程序,如DEBUG .EXE 。
汇编程序编辑程序连接程序PROG .ASM PROG .OBJPROG .EXE二、汇编语言上机过程D:>EDIT ABC.asm D:>MASM ABC ;有语法错,回EDIT 下改该程序 D:>LINK ABC ;有错,回EDIT 下改程序 D:>ABC运行结果错,回EDIT 下改程序 或在DEBUG 下调试,找原因。
D:>DEBUG ABC.exe四、汇编过程中各个文件的作用1、ASM汇编语言源文件?用汇编语言编写的源程序。
2、MASM5.0汇编程序?将源文件转换成目标文件的程序(是一种工具)。
3、OBJ目标文件?二进制的目标文件。
4、LIST列表文件?同时列出源程序和机器语言程序清单,同时给出了符号表,便于调试,可有可无。
5、CRF交叉文件?给出了用户定义的所有符号,及其所在行号和引用行号。
微机原理与汇编语言程序设计汇编实验报告
(此文档为word格式,下载后您可任意编辑修改!) 昆明学院课程设计(大作业)目录1题目分析 (5)2基本理论 (5)3 总体设计 (6)3.1 本程序的功能结构图 (6)3.2字符输入及存储设计 (8)3.3加、减、乘、除法运算的判断设计 (8)3.4加、减、乘、除法运算的设计 (9)4实验器材 (10)5方法步骤 (11)6成效分析 (11)6.1运行界面分析 (11)6.2调试过程及分析 (13)7心得体会 (14)8参考文献 (14)9附录 (14)课程设计(大作业)报告一、题目分析本次设计的简单计算器,主要是为了解决数学中的加、减、乘、除四则运算的问题。
重点和难点主要包括以下几个方面:(1)利用BIOS调用中INT 16H调用中的子程序完成清屏、设置显示方式、设置窗口等操作。
(2)利用INT 21H DOS系统功能调用中的键盘输入接收十进制操作数和运算符由程序完成字符转换为二进制数,并存储起来。
(3)根据运算符完成运算,由程序在屏幕上显示运算结果。
1、十进制数转换为二进制数过程如下:(1)将BX清0.(2)从键盘接收一个按键的ASCII送AL中,并判断是否为0到9之间的字符,若不是转退出;否则将AL中内容减30H,转换为相应数字的二进制数,并扩展到AX中,然后将BX中内容乘以10后,再加上AX中的内容。
(3)转(2)继续执行因此程序退出后,BX中的内容即为所输入十进制数的二进制值。
例如:首先将BX清0后,先输入数字“5”,则(AL)=35H,属于0到9之间的数字,减30H后,(AL)=05H,扩展后,(AX)=0005H,BX乘以10后,加上AX中的内容,(BX)=0005H。
然后输入数字“8”,则(AL)=38H,属于0到9 之间的数字,减30H后,(AL)=38H,扩展后,(AX)=0008H,(BX)乘以10后,加上AX中的内容,(BX)=0037H,为十进制数“58”的二进制值。
微机原理与技术实验三:循环程序结构
实验三:循环程序设计一、实验目的:掌握循环程序结构,熟悉汇编上机环境。
二、实验内容:(1)不用串操作指令,编程实现测试一字符串中空格符的个数(空格数<100),并将个数存放到COUNT变量中。
(2)将COUNT的值显示在屏幕上(按十进制格式显示)。
三、实验步骤:1、在“轻松汇编”环境下编写、编译和生成程序;2、运行程序,观察显示结果是否正确。
四、源程序及参考流程图:DATA SEGMENTBUF DB '123 w q 1 $’COUNT DB 0DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART:补全程序MOV AH,4CHINT 21HCODE ENDSEND START五、实验小结说明:实验报告要包涵上述五项DA TA SEGMENTBUF DB '123 w q 1 $'COUNT DB 0DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA START: MOV AX,DATAMOV DS,AXLEA SI,BUFAGAIN: MOV AL,[SI]CMP AL,'$'JNZ A1JZ EXITA1: CMP AL,' 'JNZ A2INC COUNTJMP A2A2: INC SIJMP AGAINEXIT: MOV AL,COUNTCBWMOV BL,10DIV BLMOV BH,AHADD AL,'0'MOV DL,ALMOV AH,2INT 21HADD BH,'0'MOV DL,BHINT 21HMOV AH,4CHINT 21HCODE ENDSEND START。
微机原理与应用实验报告-汇编语言程序设计
实验报告册课程名称:微机原理指导老师:班级:姓名:学号:学期:20 19 —20 20 学年第学期实验目录实验一:汇编语言程序设计实验二:实验三:实验四:实验五:实验六:姓名:成绩:实验一汇编语言程序设计一、实验目的1、学习8088汇编语言程序的基本结构和程序设计的基本方法。
2、熟悉在PC机上建立、汇编、链接、调试和运行汇编语言程序的全过程。
3、掌握DEBUG基本指令及其使用方法。
二、实验内容编写程序,将80H-8FH共16个字节数据写入数据段1000H偏移地址开始的16个内存单元中。
三、实验步骤1、进入编程环境,编写、汇编、链接、运行汇编语言源程序。
2、利用DEBUG指令,对程序进行调试。
四、实验程序实验代码如下:;将80H-8FH共16个字节数据写入数据段1000H偏移地址开始的16个内存单元中。
DATAS SEGMENTDATA DB80H,81H,82H,83H,84H,85H,86H,87H,88H,89H,8AH,8BH,8CH,8DH,8EH,8FH;此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV ES,AXMOV SI,OFFSET DATAMOV DI,1000HMOV CX,16CLDREP MOVSB;此处输入代码段代码HLTMOV AH,4CHINT 21HCODES ENDSEND START五、实验结果将80H-8FH送入1000H-1016H内存段的结果:3.实验小结进一步巩固了数据的一般传送以及体会到了数据块传送的便利之处,进一熟悉了MASM软件的操作和DEBUG命令的使用。
微机循环程序设计实验报告
微机循环程序设计实验报告微机循环程序设计实验报告引言在当今数字化时代,计算机技术的发展已经成为各个领域的核心。
作为计算机科学的基础,循环程序设计在软件开发中扮演着重要的角色。
本实验旨在通过微机循环程序设计,探索程序的优化和性能提升。
实验目的1. 了解循环程序设计的基本概念和原理。
2. 熟悉微机循环程序设计的编写方法和技巧。
3. 掌握循环程序的性能优化和调试方法。
4. 分析循环程序设计在实际应用中的价值和局限性。
实验过程1. 实验环境搭建在开始实验前,我们需要搭建一个合适的实验环境。
选择一款适合的集成开发环境(IDE),并安装相应的编译器。
在本实验中,我们选择了Visual Studio作为开发环境,C语言作为编程语言。
2. 编写简单的循环程序在掌握基本的编程语法后,我们开始编写简单的循环程序。
通过使用for循环,我们可以实现对某个任务的重复执行。
这样的程序通常用于处理大量数据或者进行复杂的计算。
通过编写简单的循环程序,我们可以更好地理解循环程序设计的基本原理。
3. 优化循环程序性能在编写循环程序的过程中,我们需要考虑程序的性能。
通过合理地选择循环结构和优化算法,我们可以提高程序的执行效率。
例如,我们可以使用并行化技术来加速程序的运行,或者使用循环展开来减少循环的次数。
通过不断地优化,我们可以使程序更加高效。
4. 调试循环程序循环程序设计中常常会出现一些错误,例如死循环、数组越界等。
为了找出并解决这些错误,我们需要使用调试工具。
通过逐步执行程序,并观察变量的值和程序的执行流程,我们可以找到错误的原因并进行修复。
实验结果与分析通过实验,我们成功编写了多个循环程序,并对其进行了性能优化和调试。
在程序执行过程中,我们发现了一些问题,例如循环次数过多导致程序执行时间过长,或者循环条件设置不当导致程序无法正常结束。
通过分析这些问题,我们可以得出以下结论:1. 循环程序设计是一种高效的编程方法,可以大大提高程序的执行效率。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微机原理与汇编语言实验报告姓名x x x学号xxxxxx 专业班级计科x班课程名称微机原理与汇编语言实验日期2014.10.22实验名称循环程序设计实验成绩一、实验目的1、掌握循环程序的设计方法。
2、掌握比较指令、转移指令和循环指令的使用方法。
3、进一步掌握调试工具的使用方法。
二、实验内容1、实验原理(1)键盘输入的十进制数如368在计算机中是以33H,36H,38H形式存放的,如何将它们转换为一个二进制数101110000B,以便对累加循环的循环次数进行控制是本程序首先要解决的问题(2)累加结果为一个16位的二进制数,为了显示结果,必需把它们转换为十进制数2、实验步骤(1)流程图(2)实验源码.model small.stack ;定义堆栈段.data ;定义数据段inf1 db "Please input a number(1-627):$"inf2 db 0ah, 0dh, "1+2+......+$"ibuf db 7, 0, 6 dup(0)obuf db 6 dup(0).codestart: mov ax, @datamov ds, axmov dx, offset inf1;将屏幕输入的十进制数(存放于ibuf)转化为二进制数存储于ax 中mov ah, 09hint 21hmov dx, offset ibufmov ah, 0Ahint 21hmov cl, ibuf+1mov ch, 0mov si, offset ibuf+2mov ax, 0loop1: mov dx, 10mul dxand byte ptr [si], 0Fhadd al, [si] 从键盘输入一个十进制数,并将其转换为二进制数,存放在AX中开始结束素、、(CX)-1=0累加循环次数送CX(MOV CX,AX)AX清0(AX中存放累加和)BX送1(BX存放每次循环累加的数,每循环一次,BX值加1)ADD AX,BXINC BX累加和(在AX中)转换为十进制数并显示YNadc ah, 0inc siloop loop1mov cx, ax ;计算1+2+3+...+nmov ax, 0mov bx, 1loop2: add ax, bxinc bxloop loop2mov di, offset obuf+6 ;将ax中的二进制数转换为十进制数并以ascii的形式存于obufmov byte ptr [di], '$'mov bx, 10loop3: mov dx, 0div bxadd dl, 30hdec dimov [di], dlor ax, axjnz loop3dec dimov [di], '='mov dx, offset inf2 ;结果输出mov ah, 09hint 21hmov cl, ibuf+1 ;显示nmov ch, 0mov si, offset ibuf+2loop4: mov dl, [si]add dl, 30hinc simov ah, 02hint 21hloop loop4mov dx, dimov ah, 09hint 21hmov ax, 4c00hint 21hend start实验习题1源码:; multi-segment executable file template..model small ;定义程序的存储模式(small表示小型模式).stack ;定义堆栈段.data ;定义数据段inf1 db 0ah, 0dh, "1+2+......+$"obuf1 db 6 dup(0)obuf2 db 7 dup(0) ;除了六位数字外还要有一个=号.codestart: mov ax, @datamov ds, axmov dx, offset inf1 ;输出 1+2+......+mov ah, 09hint 21hmov ax, 0 ;计算1+2+3+...+nmov bx, 1loop1: add ax, bxinc bxcmp ax, 60000jbe loop1push ax ;将最终结果备份入栈push bx ;将n备份pop cxmov di, offset obuf1+5;将cx二进制数转换为十进制数并以ascii的形式存于obuf1mov byte ptr [di], '$'mov ax, cxmov bx, 10loop2: mov dx, 0div bxadd dl, 30hdec dimov [di], dlor ax, axjnz loop2mov dx, di ;输出nmov ah, 09hint 21hpop axmov di, offset obuf2+6;将ax中的二进制数转换为十进制数并以ascii的形式存于obuf2mov byte ptr [di], '$'mov bx, 10loop3: mov dx, 0div bxadd dl, 30hdec dimov [di], dlor ax, axjnz loop3dec dimov [di], '='mov dx, di ;=输出结果mov ah, 09hint 21hmov ax, 4c00hint 21hend start实验习题2源码:; multi-segment executable file template..model small ;定义程序的存储模式(small表示小型模式).stack ;定义堆栈段.data ;定义数据段inf1 db 'Please input six num:', 0ah, 0dh, '$'inf2 db 'sum:$'obuf0 db 0ah, 0dh, '$'ibuf db 5, 0, 4 dup(0)obuf db 6 dup(0).codestart: mov ax, @datamov ds, axmov dx, offset inf1 ;输出提示信息mov ah, 09hint 21hmov bx, 6 ;设置外层循环次数loop1: mov dx, offset ibufmov ah, 0Ahint 21hmov cl, ibuf+1 ;设置内层循环次数mov ch, 0mov si, offset ibuf+2mov ax, 0loop2: mov dx, 10 ;将屏幕输入的十进制数(存放于ibuf)转化为二进制数存储于ax中 mul dxand byte ptr[si], 0Fhadd al, [si]adc ah, 0inc siloop loop2push ax ;将结果入栈保存mov dx, offset obuf0 ;回车换行mov ah, 09hint 21hdec bxcmp bx, 0jnz loop1mov cx, 6mov ax, 0loop3: pop bxadd ax, bxloop loop3mov di, offset obuf+5;将ax中的二进制数转换为十进制数并以ascii的形式存于obuf mov byte ptr [di], '$'mov bx, 10loop4: mov dx, 0div bxadd dl, 30hdec dimov [di], dlor ax, axjnz loop4mov dx, offset inf2 ;输出提示信息mov ah, 09hint 21hmov dx, dimov ah, 09hint 21hmov ax, 4c00hint 21hend start实验习题3源码:; multi-segment executable file template..model small ;定义程序的存储模式(small表示小型模式) .stack ;定义堆栈段.data ;定义数据段inf db "Please input a num(0-65535):$"inf2 db 0ah, 0dh, "The num of 1:$"ibuf db 6, 0, 5 dup(0)obuf db 6 dup(0).codestart: mov ax, @datamov ds, axmov es, axmov ah, 09h ;输出提示信息Please input a num:mov dx, offset infint 21hmov ah, 0Ah ;接收一个无符号十进制整数(小于65536)mov dx, offset ibufint 21hmov ax, 0mov cl, ibuf+1;将屏幕输入的十进制数(存放于ibuf)转化为二进制数存储于ax中mov ch, 0mov si, offset ibuf+2loop1: mov dx, 10mul dxand byte ptr[si], 0Fhadd al, [si]adc ah, 0inc siloop loop1mov bx, 0loop2: shr ax, 1adc bx, 0cmp ax, 0jnz loop2mov ax, bxmov di, offset obuf+5;将ax中的二进制数转换为十进制数并以ascii的形式存于obufmov byte ptr [di], '$'mov bx, 10loop3: mov dx, 0div bxadd dl, 30hdec dimov [di], dlor ax, axjnz loop3mov ah, 09h ;输出提示信息The num of 1:mov dx, offset inf2int 21hmov ah, 09h ;将统计结果在屏幕上显示出来mov dx, diint 21hmov ax, 4c00hint 21hend start实验习题4源码:; multi-segment executable file template..model small ;定义程序的存储模式(small表示小型模式).stack ;定义堆栈段.data ;定义数据段N equ 5ibuf db 4, 0, 3 dup(0)inf1 db 'Please input N num(0-255):', 0ah, 0dh, '$'inf2 db 'Sort:', 0ah, 0dh, '$'buf db N dup(0)obuf2 db 4 dup(0)obuf db 0ah, 0dh, '$'.codestart: mov ax, @datamov ds, axmov dx, offset inf1 ;输出提示信息mov ah, 09hint 21hmov di, offset bufmov bx, N ;设置外层循环次数loop1: mov dx, offset ibufmov ah, 0Ahint 21hmov cl, ibuf+1 ;设置内层循环次数mov ch, 0mov si, offset ibuf+2mov ax, 0loop2: mov dx, 10 ;将屏幕输入的十进制数(存放于ibuf)转化为二进制数存储于ax中 mul dxand byte ptr[si], 0Fhadd al, [si]inc siloop loop2mov [di], alinc dimov dx, offset obuf ;回车换行mov ah, 09hint 21hdec bxcmp bx, 0jnz loop1mov bx, N-1 ;比较大小mov cx, bxmov dx, bxmov di, offset bufloop3: mov si, dimov al, [di]inc siloop4: cmp [si], aljbe loop5mov al, [si]mov ah, [di]mov [si], ahmov [di], alloop5: inc siloop loop4dec dxmov cx, dxinc didec bxcmp bx, 0jne loop3mov dx, offset inf2 ;输出提示信息mov ah, 09hint 21h;结果输出mov cx, Nmov si, offset bufloop6: mov di, offset obuf2+3;将buf中的二进制数转换为十进制数并以ascii的形式存于obuf2,并输出 mov byte ptr [di], '$'mov bx, 10mov al, [si]mov ah, 0loop7: mov dx, 0div bxadd dl, 30hdec dimov [di], dlor ax, axjnz loop7mov dx, dimov ah, 09hint 21hmov dx, offset obufmov ah, 09hint 21hinc siloop loop6mov ax, 4c00hint 21hend start3、实验结果(1)实验结果(2)实验习题1程序流程图:(3)实验习题2(4)实验习题3(5)实验习题4三、实验总结1)通过本次实验我掌握循环程序的设计方法,掌握比较指令、转移指令和循环指令的使用方法,进一步掌握了调试工具的使用方法。