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

微机原理实验

实验二编程实现循环程序

编程实现:自行定义某班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

实验记录:

实验总结:

开始面对循环程序汇编感到很迷茫,在循环程序语言上出现了很多错误,导致运行不了,后来根据运行提示的错误,一步一步改正,慢慢步入正轨,通过这次实验,使我深入了解了“编程实现循环程序”这次

微机实验,提高了分析和解决问题的能力,明白了子程序的一些运用。

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

微机原理实验 实验二编程实现循环程序 编程实现:自行定义某班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

微机原理-实验二-汇编程序1

微机原理实验报告 班级:XXXXX 姓名:XXXX 学号:20XXXX XXXXX大学 信息科学与技术学院 信息工程系

实验二汇编语言程序设计 一、实验目的: 1、熟悉MASM编译环境,了解程序的汇编方法; 2、熟悉常用汇编指令,学习汇编程序设计方法; 3、学习汇编语言的调试过程,通过调试过程认识CPU执行程序的方式。 二、实验内容: 1、将16进制数转换成ASCII码 2、求解:将程序数据段中0,1,2,...0Ah,0Bh,0Ch,0Dh,0Eh,0Fh的16个16进制数转换为对应的ASCII码,并存储在原码所在的相应地址中。 3、解答:取一个数,首先要判断该数是否大于等于10,若大于10则加上37H 转化为对应的ASCII码;若小于10则加上30H。 三、程序流程图和程序代码 1、流程图

2、代码与注释 data segment buf db 0,1,2,3,4,5,6,7,8,9,0Ah,0Bh,0Ch,0Dh,0Eh,0Fh data ends code segment assume cs:code,ds:data;设置代码段cs,数据段ds start:mov ax,data;将数据存到ax中 mov ds,ax;转存到ds中 mov cx,16;将16赋给cx lea si,buf;把buf的偏移地址赋给si L2:mov al,[si]; 将si中数据移到al cmp al,10; 将al中数据与10相比 jae L1;将16赋给cx sub al,7h;如果大于10加7H L1:add al,37h;反之加37 mov [si],al;把al转存到si inc si;si si自加 loop L2;L2循环 mov ah,4ch int 21h;回到dos系统 code ends end start 四、调试过程及遇到的问题 1、程序执行截图

编程实现循环程序

微机原理实验报告实验三、编程实现循环程序 电子信息工程(1)班 1、流程图: 2、程序如下: STACK SEGMENT STACK dw 32 DUP(?) STACK ENDS DA TA SEGMENT S1 DB 'please input a number:$' S2 DB 13,10,'Sum is:$'

BUF DB 10 DUP(?) DA TA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DA TA,SS:STACK START PROC FAR PUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV SI,OFFSET BUF ;入口参数:SI,BUF的偏移地址CALL NEXT1 ;子程序NEXT1 MOV AH,4CH INT 21H NEXT1 PROC PUSH AX PUSH BX PUSH CX PUSH DX MOV DX,OFFSET S1 MOV AH,9 INT 21H MOV AH,1 INT 21H SUB AL,30H MOV CX,10 ;循环次数 AGAIN: MOV [SI],AL INC AL INC SI ;根据输入的数字递增填充BUF LOOP AGAIN CALL NEXT2 ;调用子程序NEXT2 POP DX POP CX POP BX POP AX RET NEXT1 ENDP NEXT2 PROC PUSH AX PUSH BX PUSH CX PUSH DX

MOV DX,OFFSET S2 ;显示提示字符Sum is: MOV AH,9 INT 21H MOV SI,OFFSET BUF MOV CX,10 ;循环次数 MOV AL,0 SUM: ;实现累加,和置于AL中ADD AL,[SI] INC SI LOOP SUM 判断循环是否为0 MOV BL,AL CMP BL,100 ;判断和是否大于100 JNB N1 ;是则跳到N1输出百位 JMP N2 ;跳到N2输出十位和个位 N1: ;数字的ASC11转换为十进制CBW MOV CL,100 DIV CL MOV BL,AH ADD AL,30H MOV DL,AL MOV AH,2 INT 21H MOV AL,BL N2: XOR AH,AH CBW MOV CL,10 DIV CL MOV BL,AH CMP AH,10 ADD AL,30H MOV DL,AL MOV AH,2 INT 21H ADD BL,30H MOV DL,BL MOV AH,2 INT 21H POP DX POP CX

微机原理与应用 实验报告

《微机原理与应用》实验报告 姓名:郭爽 学号:68 年级:2014 专业:电子

2016年春季学期 实验一.熟悉单片机开发环境 1.功能要求 在 P1 端口接8 个LED,并编程依次循环点亮。要求用软件延时程序控制LED 的亮灭时间,并能精确地计算和用软件测量延时时间。 2.硬件原理

3.程序清单 ORG 0000H LJMP START ORG 0030H START: MOV R2,#8 MOV A,#01H LOOP1: MOV P1,A LCALL DELAY RL A DJNZ R2,LOOP1 MOV R2,#8 RR A LOOP2: MOV P1,A LCALL DELAY RR A DJNZ R2,LOOP2 LJMP START DELAY: MOV R5,#20

D1: MOV R6,#80 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET END 4.实验心得 首次接触开发板,通过实验1加强了对单片机的了解,学会使用仿真软件,学会搭线的各种技巧,并且掌握了LED亮灭的原理。 实验二.并行口输入输出实验——循环彩灯控制 1.功能要求

P1 口接8 个开关,P0 口接8 个灯,每个开关对应一个灯,实时读取开 关状态,开关闭合时,灯亮。开关断开时,灯灭。 用5 个开关K0~K4,控制P0 口所接8 个灯的循环,各开关的功能要求 如下: (1)K1~K2 分别选择灯的四种闪动方式; (2)K3 用于控制灯的循环方向(顺时针或逆时针); (3)K4 用于选择灯的两种循环速度; (4)K0 用于引发外部中断,在外部中断子程序中,读取通过K1-K4 所设定 的循环彩灯的工作方式,并按所设定的工作方式控制彩灯运行。当K0 没有引发中断时,保持上一次的循环方式。 2.硬件原理

微机原理实验报告

微机原理实验报告 一、顺序结构与简单程序设计 实验名称:顺序结构程序设计 实验内容:编程计算z=(x^2-3y)/2。设x,y为单字节正整数,结果z用两个字节来存放。实验目的:熟悉顺序结构程序调试方法。 程序代码: DATAS SEGMENT X DB 25 Y DB 32 Z DW? DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS START: MOV AX,DATAS MOV DS,AX MOV AL,X MUL AL MOV BL,Y ADD BL,BL ADD BL,Y SUB AX,BX SHR AX,1 MOV Z,AX

MOV AH,4CH INT 21H CODES ENDS END START 调试心得:顺序结构程序的调试相对简单,由于寄存器完全是按照程序的顺序结构来执行显示的,所以初次调试就成功完成。 二、条件结构与分支程序设计 实验名称:分支结构程序设计 实验内容:编程计算下列函数的值。 取值范围:-128~+127 实验目的:熟悉分支结构程序调试方法。 程序代码: DATAS SEGMENT X DB-3 Y DB? DATAS ENDS

CODES SEGMENT ASSUME CS:CODES,DS:DATAS MAIN PROC NEAR START: MOV AX,DATAS MOV DS,AX MOV AL,X CMP AL,0 JGE BIGER MOV AL,0FFH MOV Y,AL JMP NEXT BIGER: JE EQUL MOV AL,1 MOV Y,AL JMP NEXT EQUL: MOV Y,AL NEXT: RET MAIN ENDP CODES ENDS

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

实验三分支程序、循环程序设计实验 一、实验目的 1. 掌握分支程序的结构。 2. 掌握分支程序的设计、调试方法。 3. 加深对循环结构的理解。 4. 掌握循环结构程序设计的方法以及调试方法。 二、实验设备 PC机一台,TD-PITE实验装置一套。 三、实验内容: 设计一数据块间的搬移程序。设计思想:程序要求把内存中一数据区(称为源数据块) 传送到另一存储区(称为目的数据块)。源数据块和目的数据块在存储中可能有三种情况,如图 1所示。 图3-1源数据块与目的数据块在存储中的位置情况 对于两个数据块分离的情况,如图3-1 (a),数据的传送从数据块的首地址开始,或从数据 块的末地址开始均可。但是对于有重叠的情况,则要加以分析,否则重叠部分会因搬移而遭到破坏,可有如下结论: 当源数据块首地址v目的块首地址时,从数据块末地址开始传送数据,如图3-1 (b)所示。当源数据块首地址〉目的块首地址时,从数据块首地址开始传送数据,如图3-1 (c)所示。参考流程:如图3-2所示。

图3-2程序流程图实验程序 STACK SEGMENT STACK DW 64 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE START: MOV CX, 0010H MOV SI, 3100H MOV DI, 3200H CMP SI, DI JA A2 ADD SI, CX ADD DI, CX DEC SI DEC DI A1: MOV AL, [SI] MOV [DI], AL DEC SI DEC DI DEC CX JNE A1 JMP A3 A2: MOV AL, [SI] MOV [DI], AL INC SI INC DI DEC CX JNE A2 A3: JMP A3

微机循环程序设计实验报告

微机循环程序设计实验报告 微机循环程序设计实验报告 引言 在当今数字化时代,计算机技术的发展已经成为各个领域的核心。作为计算机 科学的基础,循环程序设计在软件开发中扮演着重要的角色。本实验旨在通过 微机循环程序设计,探索程序的优化和性能提升。 实验目的 1. 了解循环程序设计的基本概念和原理。 2. 熟悉微机循环程序设计的编写方法和技巧。 3. 掌握循环程序的性能优化和调试方法。 4. 分析循环程序设计在实际应用中的价值和局限性。 实验过程 1. 实验环境搭建 在开始实验前,我们需要搭建一个合适的实验环境。选择一款适合的集成开 发环境(IDE),并安装相应的编译器。在本实验中,我们选择了Visual Studio 作为开发环境,C语言作为编程语言。 2. 编写简单的循环程序 在掌握基本的编程语法后,我们开始编写简单的循环程序。通过使用for循环,我们可以实现对某个任务的重复执行。这样的程序通常用于处理大量数据或者 进行复杂的计算。通过编写简单的循环程序,我们可以更好地理解循环程序设 计的基本原理。 3. 优化循环程序性能

在编写循环程序的过程中,我们需要考虑程序的性能。通过合理地选择循环结构和优化算法,我们可以提高程序的执行效率。例如,我们可以使用并行化技术来加速程序的运行,或者使用循环展开来减少循环的次数。通过不断地优化,我们可以使程序更加高效。 4. 调试循环程序 循环程序设计中常常会出现一些错误,例如死循环、数组越界等。为了找出并解决这些错误,我们需要使用调试工具。通过逐步执行程序,并观察变量的值和程序的执行流程,我们可以找到错误的原因并进行修复。 实验结果与分析 通过实验,我们成功编写了多个循环程序,并对其进行了性能优化和调试。在程序执行过程中,我们发现了一些问题,例如循环次数过多导致程序执行时间过长,或者循环条件设置不当导致程序无法正常结束。通过分析这些问题,我们可以得出以下结论: 1. 循环程序设计是一种高效的编程方法,可以大大提高程序的执行效率。 2. 在编写循环程序时,我们需要仔细考虑循环结构和算法的选择,以确保程序的正确性和高效性。 3. 调试是循环程序设计过程中不可或缺的一部分,通过调试工具的使用,我们可以快速定位和解决问题。 结论 通过本次实验,我们深入了解了微机循环程序设计的原理和方法,并成功编写了多个循环程序。通过优化和调试,我们提高了程序的性能和稳定性。微机循环程序设计在实际应用中具有重要的价值,可以用于处理大量数据、进行复杂

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

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

微机原理软件实验报告

实验二分支,循环程序设计 一、预习题: 1.十进制数0 -- 9 所对应的ASCII 码是什么? 如何将十进制数0 -- 9 在屏幕上显示出来? 答:要屏显0-9的数码,可以调用02h中断,然后将要显示的数码的ASCII码存进DL里,然后执行INT 21H就可以打印字符。当然,若不只一个数,调用09h中断(显示字符串)更好,但要将DS:DXZ指向要显示的数字在内存中的首地址,并要求以$结束。 2.如何检验一个数为正,为负或为零? 你能举出多少种不同的方法? 答:CMP X,0 检验标志位CF CF=1,X为负数 CF=0接着检验ZF:ZF=1,X为零,ZF=0,X 为正数 二、实验目的: 1.开始独立进行汇编语言程序设计; 2.掌握基本分支,循环程序设计; 3.掌握最简单的DOS 功能调用. 三、实验内容: 1.安排一个数据区,内存有若干个正数,负数和零.每类数的个数都不超过9.

2.编写一个程序统计数据区中正数,负数和零的个数. 四、实验源代码 assume cs:code,ds:data data segment buff db 1,2,3,4,5,-1,-2,-3,0,0 ;安排的数据区 string db '>0:' plus db 0 ;用变量plus来存储正数的个数 db 0ah,0dh string1 db '=0:' zero db 0 ;用变量zero来存储零的个数 db 0ah,0dh string2 db '<0:' minus db 0 ;用变量minus来存储负数的个数 db '$' data ends code segment start:mov ax,data

微机原理 实验四 循环结构程序设计

实验4 循环结构程序设计 一、项目(实训)名称: 循环结构程序设计 二、项目(实训)学时数: 学时数:4 三、项目(实训)目标: 1)熟悉8086CPU的寻址方式和指令系统。 2)掌握汇编语言程序设计上机步骤。 3)用实例上机调试。 四、项目(实训)中的具体任务: 1)熟悉8086/8088 的指令系统循环结构程序。. 2)按汇编语言程序设计上机步骤上机。 3)初步学会编写和调试循环结构程序。 五、教师知识和能力要求: 要求教师熟悉微机的结构和工作原理,熟悉8086CPU的寻址方式和指令系统,掌握汇编语言程序设计上机步骤。 六、学生知识和能力准备: 认真阅读8086CPU的寻址方式和指令系统。 编写循环结构汇编语言程序。 做好实验工具软件和资料准备。

七、工具与设备: 八、辅助教学资料: 汇编语言程序设计韩海编 九、实施步骤与技术要点: 题目一:编写程序,在一行上依次显示26个大写英文字母。用循环语句LOOP实现。 1.画出流程图,编写源程序: 2.汇编程序产生目标文件: 3.链接程序产生可执行文件: 4.运行可执行文件,运行结果截图如下:

题目二:(1)编程以二进制形式显示BX的值(假设为无符号数)。如果(BX)=20,那么显示“0000000000010100B”。以循环结构(LOOP 语句)实现。 (2)设BX=20166,编程以十六进制形式显示BX的值(假设为无符号数)。即显示“4EC6H”,用LOOP语句实现。 1.画出流程图,编写源程序: 2.汇编程序产生目标文件: 3.链接程序产生可执行文件: 4.运行可执行文件,运行结果截图如下: 二、考核或评价标准: 1. 检查上机步骤及调试结果:(60分) 2.程序调试分析的正确性:(20分), 3.结合思考题答辩情况(20分),综合评定成绩。

(精)2017石油大学《微机原理及应用》实验报告

(精)2017石油大学《微机原理及应用》实验报告

中国石油大学(华东)现代远程教育 实验报告 课程名称:微机原理及应用 实验名称:循环程序设计 实验形式:在线模拟+现场实践 提交形式:在线提交实验报告 学生姓名:学号: 年级专业层次: 1606级机械设计制造及其自动化专升本 学习中心:青岛直属学习中心

提交时间: 2017 年 12 月 20 日 一、实验目的 1、掌握数组的处理方法、简单循环程序的设计 2、掌握代码段、数据段和附加段的查看方法 二、实验内容 现有X、Y二个数组 X=32、-43、76、95、-1 Y=-78、127、-128、-125、88 用汇编语言编程,计算两个数组之和,结果送另一数组,即S(i)=X(i)+Y (i)。 要求:观察不同数制的机器数表示方法; 观察数据段、代码段的位置和大小。

三、预习要求 1、根据实验内容写出完整的预习报告(画出程序流程图并编写出程序代码); 2、复习内存分段概念、数据类型伪指令语句中的表达式、无进位加法和带进位加法的实现、多位10进制数带进位加法的实现、简单循环的实现; 3、观察数据段和代码段的位置和大小。 四、编写完整的程序代码 DATA SEGMENT ;定义数据段 X DB 32,-43,76,95,-1 Y DB -78,127,-128,-125,88 S DB 5 DUP(?) DATA ENDS CODE SEGMENT ;定义代码段 ASSUME CS: CODE, DS:DATA START: MOV AX,DATA ;数据段初始化 MOV DA,AX MOV CL,5 MOV BX,0 NEXT MOV AL,X[BX] ADD AL Y[BX] MOV S[BX],AL INC BX DEC CL JNZ NEXT

实验二 结构化汇编程序设计(分支和循环程序)实验报告

沈阳工程学院 学生实验报告 实验室名称:微机原理实验室实验课程名称: 实验项目名称:结构化程序设计实验实验日期:20 年月日班级:姓名:学号: 指导教师:批阅教师:成绩: 一.实验目的 1.学习条件转移类指令以及分支程序设计方法。 2.学习循环控制类指令以及循环程序设计方法。 3.熟练掌握Wmd86调试软件的使用及程序运行、调试方法。 二.实验设备 PC机一台,TD-PITE微机原理实验教学系统一台。 三.实验内容 程序1:根据X的范围求Y的值,当X<5时,Y= —X;当X>=5且X<10时,Y=X+5;当X>=10时,Y=X+20。假设X、Y均为带符号数。请将程序代码补充完整。 DA TA SEGMENT X DB 17 Y DB ? ( ) CODE SEGMENT ASSUME CS:CODE,DS:DA TA START: MOV AX,DATA ( ) MOV AL,X ( ) JGE GE5 NEG AL ( ) GE5: CMP AL,10 JGE GE10 ( ) JMP EXIT GE10:ADD AL,20 EXIT:MOV Y,AL HLT ; (接右侧) CODE ENDS END START 程序2:有一组字节类型数据DATA,数据个数在COUNT中。编程求出DATA中正数、负数及零的个数,将结果分别保存在D1、D2、D3中。请将程序代码补充完整。 MYDATA SEGMENT DATA DB -1,15,-58,4,-7,0,0,9,-12,45,5 COUNT EQU $-DA TA D1 DB 0 ;存放正数个数 D2 DB 0 ;存放负数个数 D3 DB 0 ;存放0的个数 MYDATA ENDS MYCODE SEGMENT ASSUME CS:MYCODE,DS:MYDA TA START:MOV AX, MYDATA MOV DS, AX ( ) MOV CX, COUNT XOR BL, BL ;存放正数个数 XOR BH, BH ;存放负数个数 ( );存放0的个数NEXT: MOV AL, [SI] CMP AL, 0 ; (接下页)

西安交大微机原理实验三循环程序的设计

实验三循环程序的设计 一、实验目的 1.掌握提示信息的使用方法和从键盘键入信息的用法 2.掌握循环程序的设计方法 二、实验内容 编写程序,从键盘分别键入两个字符串,进行比较,若相同,则显示“MATC”H,否则,显示“NOMATC”H 。 三、实验原理 强迫cpu 重复执行一指令序列的程序结构是循环程序。 循环程序结构分四部分:1、初始化部分2、循环处理部分3、循环控制部分4、结束部分。 四、程序代码 CRLF MACRO MOV AH,02H MOV DL,0DH INT 21H MOV AH,02H MOV DL,0AH INT 21H ENDM DATA SEGMENT MESS1 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 81 ACTLEN2 DB ? STRING2 DB 81 DUP(?) DATA ENDS STACK SEGMENT PARA STACK 'STACK' STA DB 50 DUP(?) TOP EQU LENGTH STA STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX

MOV AX,STACK MOV SS,AX MOV SP,TOP MOV DX,OFFSET MESS1 MOV AH,09H INT 21H MOV AH,0AH MOV DX,OFFSET MAXLEN1 INT 21H CRLF MOV DX,OFFSET MESS2 MOV AH,09H INT 21H MOV AH,0AH MOV DX,OFFSET MAXLEN2 INT 21H CRLF MOV SI,OFFSET ACTLEN1 MOV BX,OFFSET ACTLEN2 MOV AL,[SI] CMP AL,[BX] JNE NOMA NOMATCH: MOV CX,[SI] AND CX,0FH NEXT:INC SI INC BX MOV AL,[SI] CMP AL,[BX] JNE NOMA DEC CX CMP CX,0 JNE NEXT MOV AH,09H MOV DX,OFFSET MESS4 INT 21H JMP DEND NOMA:MOV AH,09H MOV DX,OFFSET MESS3 INT 21H DEND:MOV AX,4C00H INT 21H

微机原理实验 循环程序结构和过程调用程序设计

微机原理实验 实验二循环程序结构和过程调用程序设计 一、实验目的 1. 掌握简单循环程序和过程调用的设计和调试方法; 2. 熟练掌握存储器的分段概念和段超越方法; 3. 掌握堆栈的概念和操作过程; 4. 掌握单字节和双字节在存储器中存放方式; 5. 掌握负数在内存中的表示方法; 6. 掌握数组的编程处理方法以及“冒泡”法排序的编程方法。 二、实验内容 1.现有两个数组 X 和 Y: X=32、-43、76、95、-1 Y=-78、127、-128、-125、88 用汇编语言编程计算两个数组之和,结果送至另一数组 S 中,即S(i)=X(i)+Y(i)。 1) 程序流程图: 2)源程序:

DATA SEGMENT X DB32,-43,76,95,-1 Y DB -78,127,-128,-125,88 S DB5DUP(0) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV BX,0 MOV CX,5 Li:MOV AL,X[BX] ADD AL,Y[BX] MOV S[BX],AL INC BX LOOP Li MOV AH,4CH INT21H CODE ENDS END START 3)运行结果(内存查看:DS) 4)观察并总结 ①不同数制的机器数表示方法; 最高位表示数的符号,其他位表示数值大小的二进制数,通常以补码表示,为了方便可转化为16进制形式。 ②负数在内存中的表示方法; 负数是符号位为1,在内存中以补码的形式储存。例如本例中的-1,补码为11111111B,即FFH。 ③源程序的数据段和代码段在内存中存放的位置和大小。 数据段存放于DS中,占用15个字节。代码段存放于CS中,占用30字节。

微机原理实验-GPIO 接口及其外部中断的应用(MSP430软件循环查询方法编程实现控制灯亮灭)

实验 GPIO 接口及其外部中断的应用 一、实验目的 1. 掌握MSP430 系列 CPU 芯片特点和超低功耗特性、模式及硬件编程实现方法; 2. 掌握 MSP430 系列 GPIO 接口具备的功能、控制寄存器及软件配置方法和基本操作; 3. 熟练掌握 GPIO 接口的查询操作方式和应用方法; 4. 熟练掌握 GPIO 接口按键消抖的方法; 5. 了解 MSP430 系列中断系统,熟练掌握 GPIO 接口外部中断的应用方法; 6. 熟练掌握CCS 环境中开发应用程序的流程,以及软硬件联合调试的过程和方法。 二、实验内容 1. ※●利用软件循环查询方法编程实现:扩展板上的按键S1 控制L1 亮灭,按键S2 控制L2 亮灭,要求按下并抬起后L1 或L2 改变亮灭状态。 (1) 源代码

(2)实验现象 当按下并抬起P2.1口的按键时,P1.0口的LED亮,再次按下并抬起P2.1的按键时,P1.0口LED灭。 当按下并抬起P1.1口的按键时,P4.7口的LED亮,再次按下并抬起P1.1的按键时,P4.7口LED灭。 2. ※●利用GPIO 接口外部中断方式,设置下降沿触发外部中断,使用变量NUM 记录中断次数,编程实现上题功能。要求:利用外部中断方式检测按键是否按下; (1)源程序

(2)实验现象 当按下并抬起P2.1口的按键时,P1.0口的LED亮,再次按下并抬起P2.1的按键时,P1.0口LED灭。 当按下并抬起P1.1口的按键时,P4.7口的LED亮,再次按下并抬起P1.1的按键时,P4.7口LED灭。 3. 在实验中可能会出现按一次按键却会出现LED 指示灯闪一次或者是多次的情况,这是为什么?写出如何处理按键产生的毛刺、抖动现象? 按键会出现高低电平的抖动,也称作毛刺,可以通过硬件消抖或者软件延时消抖。 4. 写出主程序中没有调用中断子程序,中断子程序却可以被执行的原因; 中断程序不同于子程序,不需要主函数main调用就能执行。 中断服务程序只需要满足一定条件即可执行,比如定时器/计数器(在写入定时器中断服务程序的前提下)只需要计数“计满”即可触发中断服务程序;外部中断(在写入外部中断的服务程序的前提下)只需要触发外部中断引脚即可自动执行,不需要主函数调用。 5. 查询和外部中断方式各在什么情况下使用更有效。 查询方式:主要用于CPU不太忙且传送速度不高的情况下。无条件传送方式作为查询方式的一个特例,主要用于对简单的I/O设备的控制或CPU明确知道外设所处状态的情况下。 中断方式:主要用于CPU的任务比较忙的情况下,尤其适合实时控制和紧急事件的处理。 6. 叙述MSP430F5529 的工作模式,以及如何在低功耗模式下转到活动模式?一般情况下进入低功耗模式前为什么要确保GIE 为置位状态? MSP430F5529单片机有活动模式(AM)和低功耗模式(LPM0,LPM1,LPM2,LPM3,LPM4,LPM4.5)。在空闲时,通过不同程度的休眠,降低系统功耗。在任何一种低功耗模式下,CPU都被关闭,将停止程序的执行,

微机原理与单片机实验报告

北京联合大学信息学院实验报告 课程名称:微型计算机原理学号: 姓名: 2012 年 6 月 9 日

目录 实验1 EMU8086模拟器的使用 (3) 实验2 数据传送指令的使用 (5) 实验3 多位十六进制加法运算实验 (8) 实验5 循环程序实验 (10) 实验6 由1 到100 求和实验 (12) 实验7 求表中正数_负数_0 的个数实验 (13) 实验8 数据排列实验(冒泡排序) (15) 实验9 系统功能调用(大小写转换) (17) 实验10 阶乘(递归运算) (19) 实验11 ProteusIO工程文件的建立 (20) 实验12 IO口读写实验 (245、373) (21) 实验13 8255 接口实验 (23) 实验14 声光报警 (24) 实验总结 (27)

实验1 EMU8086模拟器的使用 一实验要求 利用EMU8086模拟器环境,完成创建源程序文件,运行调试,实验结果的查看二实验目的: 熟悉EMU8086实验环境 三 EMU8086环境: 1 模拟器编辑窗口 2 模拟器调试窗口

四实验内容 实验内容1:新建文件。 运行 emu8086 1. 新建文件:单击“新建”按钮,选择COM模板,在模拟器编辑窗口中输入如下程序代码: MOV AX, 1020H MOV BX, 2030H MOV AX, BX ADD AX, BX MOV [BX], AX MOV [2032H], AX HLT 2. 编译:单击“编译”按钮,对程序段进行编译; 3. 保存:编译通过,单击“完成”按钮,将其以文件名“EXP1”保存在本地磁盘上。 4. 仿真:单击“仿真”按钮,打开模拟器调试窗口和源文件窗口。 5.在模拟器调试窗口中的寄存器组区,查看数据寄存器AX,BX,CX,DX;段寄存器CS,ES,SS,DS;指令指针寄存器IP;指针寄存器SP,BP;变址寄存器SI,DI;标志寄存器的值。 6.单击“单步前”按钮,单步执行程序,并观察每次单步执行后,相关寄存器值的变化。 7.单击“重载”按钮,将程序重载,并调整指令运行步进时延为 400毫秒,单击“全速”按钮,运行程序, 8.程序运行之后,在程序调试窗口中,选择[view]/[memory],查看模拟器环境中,内存单元0700:0100开始的连续10个单元的内容 9.将“存储器”中的地址改为0700:2030,查看开始的四个字节的内容,并思考其内容与程序的关联。 10.将“存储器”中地址改为1000:0100,并将从其开始的连续10个单元的内容改为55H。 实验内容2:运行范例 在模拟器编辑窗口中 1.点击典型范例 2.选择:hellow,word程序,编译,运行,观察结果。 修改程序(不要改原有DEMO程序),输出学号,姓名(汉语拼音或英文名) https://www.360docs.net/doc/0d19465366.html,pare numbers程序,编译,运行,观察结果。 修改程序(不要改原有DEMO程序),将比较对象改为7,编译,运行,观察结果。 4.欣赏其它DEMO范例

微机原理软件实验报告

信息与通信工程学院微机原理软件实验报告 班级: 姓名: 学号: 日期:2011年12月

实验一DEBUG的使用 (1) 一、实验目的 (1) 二、实验内容 (1) 三、预习思考 (3) 四、实验过程 (4) 五、实验总结 (9) 实验二分支、循环程序设计 (10) 一、实验目的 (10) 二、实验内容 (10) 三、预习思考 (10) 四、实验过程 (10) (一)、流程图 (11) (二)、源代码 (11) (三)、实验分析 (11) 五、实验总结 (14) 实验三代码转换程序设计 (15) 一、实验目的 (15) 二、实验内容 (15) 三、预习思考 (15) 四、实验过程 (16) (一)流程图 (16) (二)模块层次图 (16)

(三)源代码 (17) (四)实验分析 (21) 五、实验总结 (22) 实验四子程序设计 (23) 一、实验目的 (23) 二、实验内容 (23) 三、预习思考 (23) 四、实验过程 (24) (一)流程图 (24) (二)模块层次图 (25) (三)源代码 (25) (四)实验分析 (34) 五、实验总结 (35) 实验五中断程序设计 (37) 一、实验目的 (37) 二、实验内容 (37) 三、预习思考 (37) 四、实验过程 (38) (一)流程图 (38) (二)源代码 (39) (三)实验分析 (45) 五、实验总结 (46)

实验一 DEBUG 的使用 一、实验目的 1.掌握汇编程序的编辑、编译、连接和执行的全过程; 2.学习和掌握用DEBUG调试程序的方法。 二、实验内容 1.用编辑软件,输入以下汇编语言源程序: DAT SEGMENT A D B 20 B DB 15 Y DB 3 DUP(0) Z DB 0,0 DAT ENDS STA SEGMENT STACK DW 50 DUP(?) STA ENDS COD SEGMENT ASSUME CS:COD,DS:DAT STAR PROC FAR PUSH DS XOR AX,AX PUSH AX MOV AX,DAT MOV DS,AX MOV AX,STA MOV SS,AX MOV AL,A MOV Z,AL

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

微机原理软件实验报告

实验二分支、循环程序设计 一.实验目的 1.开始独立进行汇编语言程序设计。 2.掌握基本分支,循环程序设计。 3.掌握最简单的DOS 功能调用。 二.实验内容 1.安排一个数据区,内存有若干个正数,负数和零。每类数的个数都不超过9。 2.编写一个程序统计数据区中正数,负数和零的个数。 3.将统计结果在屏幕上显示。 三.流程图

四.源代码 DATA SEGMENT Z DW 0 ;数据中0的个数 A DW 0 ;数据中大于0的个数 B DW 0 ;数据中小于0的个数 NUM DW 9,8,0,-7,6,-5,-4,3,2,-1,0,-8,-1,9,0,0,1 ;设定的一组数据,其中4个0,7个正数,6个负数,符合题目要求 N DW ($-NUM)/2 ;该组数据的个数 TYPE0 DB 0DH, 0AH, 'Number of zeros : $' TYPE1 DB 0DH, 0AH, 'Number of greater than 0 : $' TYPE2 DB 0DH, 0AH, 'Number of less than 0 : $' LOCATE D W TYPE0, TYPE1, TYPE2 DATA ENDS STACK SEGMENT STACK DW 128 DUP(?) STACK ENDS CODE SEGMENT ASSUME DS:DATA, SS:STACK, CS:CODE START: MOV AX, DATA MOV DS, AX MOV AX, STACK MOV SS, AX ;初始化DS、SS指向STA MOV BX, OFFSET NUM ;将NUM中第一个数字的地址送入BX MOV CX, N ;将N中数字个数送入CX LOOP1: MOV AX, [BX] ;取出NUM中的第一个数字 CMP AX, 0 ;与零相比 JZ IFZ ;判断结果为是0,跳转到IFZ处继续执行 SAL AX, 1 JC IFL ;判断结果是小于0,跳转到IFL INC WORD PTR A ;否则,A自加,然后继续执行程序 JMP CONTINUE IFL: INC WORD PTR B ;B计数加1 JMP CONTINUE IFZ: INC Z ;Z计数加1 CONTINUE: ADD BX, 2 ;指针+2,继续送入下一数字 LOOP LOOP1 ;循环CX次判断 MOV CX, 3 ;共显示3个字符串 XOR BX, BX DISP: MOV DX, LOCATE[BX] MOV AH, 09H ;DOS 09号功能调用,显示字符串 INT 21H

相关文档
最新文档