微机原理:顺序、分支、循环、子程序设计

合集下载

微机原理与接口技术-第4-1章

微机原理与接口技术-第4-1章

例4-3 用键盘最多输入10个字符,并存 入内存变量Buff中,若按“Enter”键,则 表示输入结束。
用BIOS层功能调用实现 层功能调用实现 的源程序: 的源程序: .MODEL SMALL CR EQU 0DH .STACK 200H .DATA Buff DB 10 DUP(?) .CODE .STARTUP MOV CX, 0AH LEA BX, Buff
Windows层功能模块的调用
Win32 API使用堆栈来传递参数 API函数调用 C语言的消息框函数的声明: int MessageBox( HWND hWnd, // handle to owner window LPCTSTR lpText, // text in message box LPCTSTR lpCaption, // message box title UINT uType // message box style );//参数 最后还有一句说明: Library: Use User32.lib.//说明这个函数的位置
API 函数的返回值
有的API 函数有返回值,如MessageBox 定义 函数有返回值, 有的 的返回值是int类型的数,返回值的类型对汇编 的返回值是 类型的数, 类型的数 程序来说也只有dword 一种类型,它永远放在 一种类型, 程序来说也只有 eax 中。如果要返回的内容不是一个 如果要返回的内容不是一个eax所能 所能 容纳的, 容纳的,Win32 API 采用的方法一般是返回一 个指针, 个指针,或者在调用参数中提供一个缓冲区地 干脆把数据直接返回到缓冲区中去。 址,干脆把数据直接返回到缓冲区中去。
.REPEAT MOV AH, 0H INT 16H .BREAK .IF AL==CR MOV [BX],AL INC BX .UNTILCXZ .EXIT 0 END

汇编语言程序设计方法

汇编语言程序设计方法

C 名字前加 下划线
从右到左 调用程序

SYSCALL
从右到左 被调用程序

STDCALL 名字前加
下划线 (注)
被调用程序

PASCAL 名字变大写
BASIC 名字大写
FORTRAN 名字大写
从左到右 被调用程序

从左到右 被调用程序

从左到右 被调用程序

12
PROTO是过程声明伪指令,用于事先声明过程的结构。它的格 式如下:
结束处理部分
AGAIN: ADD AX,CX
;从20,19,……2,1倒序累加到AX
LOOP AGAIN ;每循环一遍,CX自动减1
MOV SUM,AX ;将累加和送入SUM单元
.EXIT 0
END
初始化部分
循环结束? 是 否
工作部分 修改部分 结束处理部分
7
二、用MASM 6.x循环控制伪指令实现循环结构
.CODE
.STARTUP
MOV AL, B
IMUL AL
MOV BX,AX MOV AL,A
;BX中为B的平方
IMUL C
MOV CX,4
IMUL CX
;AX中为4AC
.IF SWORD PTR BX>=AX ;比较B的平方和4AC的大小
MOV SIGN,1
;条件成立,SIGN得到1
.ELSE
MOV SIGN,0
.IF 条件表达式 ;条件为真(非0),执行分支体
分支体
[.ELSEIF 条件表达式
分支体
;前面IF条件为假,并且当前ELSEIF条件为真执行分支体
[.ELSE
;前面IF条件为假执行分支体

微机原理微型计算机的程序设计

微机原理微型计算机的程序设计
W1
2024/9/30
43
例6.2
将内存(10050)单元旳内容拆成两段,每段4位,并将它 们分别 存入内存(10051)和(10052)单元。即(10050) 单 元 中 旳 低 4 位 放 入 ( 10051 ) 单 元 中 旳 低 4 位 , 而 (10050)单元中旳高4位放入(10052)单元中旳低4位。
INT 21H
2024/9/30
42
作业8.17 编写求输入算式’加数1+加数2’旳和并送显。
(加数及其和均为4位(即指压缩)BCD数,P262)
分析:要求先有屏幕显示输出‘加数1+加 数2:’,然后从键盘输入两个4个字节旳 BCD数,加完后送显。
用到旳变量:W1和W2因为从键盘输入,均 不拟定是几位十进制,故需拟定其最大位 数不超出要用
2024/9/30
12
MOV AX, W1
;AX=0809H,W2为0607H
ADD AL, BYTE PTR W2 ;AL=10H, CF=0,AF=1
AAA ; 属于第一种情况,故
; AL为(AL+06H)&0FH=10H+06H )&0FH
;
=16H&0FH=06H=AL;
;AH加1且CF置CF=1,所以AH=08H+1=09H,则AX=0906H
2024/9/30
34
2024/9/30
35
2024/9/30
36
2024/9/30
37
2024/9/30
38
作业8.4 编写求两个4位非压缩BCD数之和,
将和送显示屏显示旳程序。(P261)
分析:两加数各要4个字节单元,可觉得DD 类型;考虑到进位,和要5个字节单元,另 外,输出到显示器旳结束符号’$’需要一 个单元存放,故共需6个字节。 所以,数据段定义为:

030731004《微机原理与汇编语言》教学大纲

030731004《微机原理与汇编语言》教学大纲

《微机原理与汇编语言》课程教学大纲课程代码:030731004课程英文名称:Computer Principles and Assembly Language课程总学时: 56 讲课: 44 实验:12适用专业:电子信息科学与技术大纲编写(修订)时间:2010一、大纲使用说明(一)、课程地位及教学目标本课程是电子信息科学与技术专业的必修的专业基础课,主要任务是使学生掌握8088/8086系列汇编程序设计和PC机硬件原理知识,并具有一定的应用能力。

(二)、知识,能力及技能方面的基本要求通过本课程学习,要求学生从理论上和实践上掌握计算机的基本组成、工作原理、硬件的连接等内容,会编写较简单的汇编语言程序,并能利用PC总线进行I/O扩展及编程,建立微机系统的整体概念,使学生具有应用微机系统软硬件开发的初步能力,为后续课程单片机、数字系统设计、ARM等打下理论基础。

(三)、实施说明由于本课程是主要专业基础课,对先修课基础要求较高,在讲授具体内容时,应注重基础原理内容和实际应用介绍,使学生在掌握基本原理的基础上,具有一定解决实际问题的能力。

要提高学生的基本素质和应用能力,必须改变传统的教学手段。

要利用多媒体授课;增加自学讨论部分,使学生从被动吸收知识的状态下,转化到主动索取知识的状态中来。

同时,应不断增加新知识。

总学时:56学时;讲课:44学时;实验:12学时。

(四)、对习题,实验,实践环节的要求本大纲立足于实施素质教育为目标培养的。

习题从教材中选取,按时交作业,编程习题尽量上机验证。

实验强调应用性,学生应独立完成,实验前预习实验内容。

(五)、对先修课程的要求1.计算机导论课程中的计算机数的编码,二、十六进制,BCD,ASCII码;2.数字电子技术课程中的逻辑电路基础。

(六)、考核方式及成绩评定方式1.考核方式:考试。

2.考试方法:闭卷。

3.课程总成绩:最终理论考试与平时考核(包括实验、期中考试、作业、出勤、提问等)的总和。

微机原理课程设计

微机原理课程设计

微机原理 课程设计一、课程目标知识目标:1. 让学生理解微机的基本原理和结构,掌握微处理器的工作机制。

2. 使学生掌握汇编语言的基本指令,能够阅读和编写简单的汇编程序。

3. 帮助学生了解微机系统中内存、I/O设备的基本原理及其与CPU的交互方式。

技能目标:1. 培养学生运用汇编语言进行程序设计的能力,能够实现基本的输入输出、逻辑判断和循环等操作。

2. 培养学生分析和解决微机系统常见问题的能力,如调试程序、处理硬件故障等。

3. 提高学生动手实践能力,通过课程设计项目,使学生能够独立完成一个简单的微机系统设计与实现。

情感态度价值观目标:1. 培养学生对微机原理及计算机科学的兴趣,激发他们探索精神和技术创新意识。

2. 培养学生团队协作精神,学会与他人共同分析问题、解决问题,提高沟通能力。

3. 引导学生认识到微机技术在国家经济发展和国防建设中的重要作用,增强学生的社会责任感和使命感。

课程性质:本课程为理论与实践相结合的课程,注重培养学生的实际操作能力和实际应用能力。

学生特点:学生已具备一定的电子技术和计算机基础知识,对微机原理有一定了解,但缺乏实践经验。

教学要求:教师需结合课程性质、学生特点,采用案例教学、项目驱动等教学方法,引导学生主动学习,提高学生的实践能力和综合素质。

在教学过程中,注重分解课程目标,确保学生能够达到预定的学习成果。

二、教学内容1. 微机原理概述:介绍微机的发展历程、基本结构及工作原理,重点讲解CPU、内存、I/O设备等核心组件的作用和相互关系。

相关教材章节:第一章 微机原理概述2. 汇编语言基础:讲解汇编语言的基本概念、语法和指令系统,使学生掌握汇编程序的编写和调试方法。

相关教材章节:第二章 汇编语言基础3. 微机系统编程:学习微机系统中的程序设计方法,包括顺序程序设计、分支程序设计、循环程序设计等。

相关教材章节:第三章 微机系统编程4. 内存与I/O设备:介绍内存管理、I/O设备控制原理,分析微机系统中内存、I/O设备的访问方法。

微机原理第五章 程序设计-dsh

微机原理第五章 程序设计-dsh

INT
COSEG
21H
ENDS END START
第三节 分支程序
计算机可根据不同条件进行逻辑判断,从而选择不同 的程序流向。程序的流向是由 CS和 IP决定的,当程序 的转移仅在同一段内进行时,只需修改偏移地址 IP的 值;如果程序的转移是在不同的段之间进行,则段基 址 CS和偏移地址 IP均需要修改。 转移指令分为无条件转移指令和条件转移指令。 在进行分支程序设计时,首先要根据处理的问题用比 较、测试的方式,或者用算术运算、逻辑运算使标志 寄存器产生相应的标志位,根据转移条件选择转移指 令。
INC INC DEC JNZ
BX BX CX LOP ; ;控制部分
修改部分
MOV YY,AX MOV AH,4CH INT CODE ENDS 21H
END
START
一.循环的基本结构
1.先执行,后判断结构
流程图如右:
入口
初始化部分
循环体
修改部分
N
循环 结束? Y 出口
例2. 编程统计数据块中正数的个数,
Y
RS END (DX)
DATA
SEGMENT
D1
COUNT RS DATA CODE
DB,-1,-3,5,7,-9,·,-6 · ·
EQU DW ENDS SEGMENT ASSUME CS:CODE,DS:DATA $-D1 ?
START:
MOV
AX,DATA
MOV
MOV MOV MOV
DS,AX
JMP JUS2
BIGD: JG JUS1 ;x>0转移 ;x=0
MOV AL, 0
JMP
JUS1: JUS2:
JUS2

微机原理与应用ch04-汇编语言

微机原理与应用ch04-汇编语言

汇编语言程序到机器语言程序的转换过程称为汇编。 1.手工汇编:人工查指令表汇编。用于设计短小程 序或调试程序的场合。 2.机器汇编:用汇编程序进行汇编。
2007-11-27 张臣 15
《微机原理与应用》课件
2. 汇编语言的汇编
2007-11-27
张臣
16
《微机原理与应用》课件
(1)人工编译
人工查指令 机器码表 汇编语言 源程序
2007-11-27
张臣
20
《微机原理与应用》课件
源程序的汇编结果实例
2007-11-27
张臣
21
《微机原理与应用》课件
练习
设(59H)=50H; MOV A, 59H MOV R0, A MOV A, #0 MOV @R0, A MOV A, #25H MOV 51H, A MOV 52H, #70H A= ; (50H)= (51H)= (52H)=
2007-11-27 张臣 32
《微机原理与应用》课件
(2) 子程序结构
MAIN : LCALL SUB …… SUB: PUSH PSW ;现场保护 PUSH Acc 子程序处理程序段 POP Acc ;现场恢复 POP PSW RET
2007-11-27
; 主程序
1、子程序应取名,即子程 序的入口应加标号,以 便主程序调用时使用 2、注意使用堆栈保护现场 (PUSH)和恢复现场 (POP) 3、子程序的设计中要考虑 参数的传递,即要满足 入口条件和出口状态。 4、子程序的结尾必须是子 程序的返回指令RET。
2007-11-27 张臣 7
《微机原理与应用》课件
2. 汇编语言的指令格式
[标号: ] 操作码 [操作数] [; 注释]

实验报告

实验报告

南通大学计算机科学与技术学院微机原理实验报告书班级:智控151学号:***********名:***南通大学计算机类课程实验报告南通大学计算机科学与技术学院微机原理实验报告书班级:智控151学号:1512042022姓名:王建棋南通大学计算机类课程实验报告六、实验结果<一><二>七、实验存在问题和解决办法程序一:检查发现第16行的“ADD AL,20H”将数字0写成了大写字母O,排除错误后可正常运行。

字符串后忘了加$,导致转换为小写字母后出现如下乱码:字符串后加结束符$后乱码消除。

程序二:分析表明第28行“CMP BL,0FFH”中FFH前要加0八、实验心得和建议南通大学计算机科学与技术学院微机原理实验报告书班级:智控151学号:1512042022姓名:王建棋南通大学计算机类课程实验报告ADD AL,30HMOV DL,ALMOV AH,2INT 21HMOV AX,4C00HINT 21HCODE ENDSEND START(如不够,请另附纸)六、实验结果七、实验存在问题和解决办法分析表明错误原因如下:(1)O写成0;(2)相对寻址只限于用SI、DI、BX、BP,而程序中却用了其它寄存器。

修改后仍有错误如下:错误原因:使用“INC BYTE PTR[BX+2]”忘了加BYTE PTR修改后仍得不到正确结果,错误如下:错误原因:“CMP [DI],'0'”应改成“CMP BYTE PTR[DI],'0'”错误全部修改后得到所要的结果八、实验心得和建议南通大学计算机科学与技术学院微机原理实验报告书班级:智控151学号:1512042022姓名:王建棋南通大学计算机类课程实验报告MOV AX,4C00HINT 21HCODE ENDSEND START(如不够,请另附纸)六、实验结果七、实验存在问题和解决办法出错原因:(1)DEC,DW 是保留字;(2)“MOV CL,10000”中10000超过范围CL的最大范围。

微机原理与应用第六章

微机原理与应用第六章

数组字<AX? N 内容交换 修改数组指针 N 到100字?
YRT: MOV MOV MOV MOV MOV NEXT1: CMP
AX,2000H DS,AX BX,0042H AX,0 CX,100 AX,[BX]
循环次数已知 (计数控制)
JA
MOV NEXT: INC
NEXT
MAX PROC NEAR PUSHF PUSH AX PUSH CX PUSH SI
STAR:MOV BX,2000H MOV AL,5 MOV AH,0 [BX+AL] XLAT HLT ADD BX,AX
MOV AL,[BX] 执行后:AL=19H
复习换码指令
…… 64H 51H 40H 31H 24H 19H 10H 09H 04H 01H 00H
⑴ 段内直接调用与返回
格式:CALL 过程名 功能:调用当前段内的子程序 操作:SP←SP-2,[SP]←IP,IP←IP+disp 格式:RET 操作:IP ←[SP],SP← SP+2 16位通用寄存器或 ⑵ 段内间接调用与返回 字存储器 格式:CALL OPRD 操作:SP←SP-2,[SP]←IP,IP←(OPRD) 格式: RET 操作:IP ←[SP],SP← SP+2
子 程 序 段
子 程 序 段
subr1 proc near ...... ret subr1 endp main endp code ends
主 程 序 段
code ends
例:
MY SEGMENT ASSUME CS:MY MAIN PROC FAR START: PUSH DS SUB AX,AX PUSH AX MOV CL,04 CALL DP5 MOV BL,CL CALL DP5 ADD AL,BL RET MAIN ENDP DP5 PROC MOV SAL SAL ADD MOV NEAR AL,CL AL,1 AL,1 AL,CL CL,AL

微机原理与接口技术实验教案

微机原理与接口技术实验教案

微机原理与接口技术实验讲义物理与电子工程学院罗长更显示程序实验 (3)数据传送实验 (4)运算类程序实验 (6)分支程序设计实验 (14)循环程序设计实验 (16)综合程序设计实验 (18)SHR AL,4图1CMP AL,0AH ;是否是A以上的数JB C2ADD AL,07HC2: ADD AL,30HMOV DL,AL ;显示字符MOV AH,02HINT 21HMOV AL,DS:[DI]AND AL,0FH ;取低4位CMP AL,0AHJB C3ADD AL,07HC3: ADD AL,30HMOV DL,AL ;显示字符MOV AH,02HINT 21HMOV AX,4C00H ;返回DOSINT 21HCODE E NDSEND START数据传送实验END START将程序主体部分的寄存器间接寻址方式改为相对寻址方式,则如下所示:MOV BX,0MOV CX,LENNEXT: MOV AL,MSR[BX]MOV ES:MSD[BX],ALINC BXLOOP NEXT运算类程序实验实验目的(1) 掌握运算类指令编程及调试方法。

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

实验内容及说明80x86指令系统提供了实现加、减、乘、除运算的基本指令,可对表1所示的数据类型进行算术运算。

表11.二进制双精度加法运算本实验要求计算X+Y=Z,将结果Z输出到屏幕,其中X=001565A0H,Y=0021B79EH。

实验利用累加器AX,先求低十六位和,并存入低址存储单元,后求高16位和,再存入高址存储单元。

由于低位和可能向高位有进位,因而高位字相加语句需用ADC指令,则低位相加有进位时,CF=1,高位字相加时,同时加上CF中的1。

在80386以上微机中可以直接使用32位寄存器和32位加法指令完成本实验的功能。

2.十进制数的BCD码减法运算本实验要求计算X-Y=Z,其中,X、Y、Z为BCD码,其中X=0400H,Y=0102H。

5.2微机原理英文版

5.2微机原理英文版

Y Y
N
查找完? Y
END
存数字、字母个数的值,计算其它字符个数且存储
DATA SEGMENT BUF DB N DB 01H,38H,47H,60H,…76H NUM DB 3 DUP(?) DATA ENDS CODE SEGMENT MAIN PROC FAR ASSUME CS:CODE,DS:DATA
START: PUSH DS SUB AX , AX PUSH AX
MOV MOV MOV MOV MOV LP: MOV CMP JL CMP AX , DATA DS , AX CH , N ;数组个数N CH BX , 1 DX , 0 ;DH计数字的个数,DL计 字母的个数 AH,BUF [BX] AH,30H NEXT ;小于‘0’转 AH,39H
MOV AX,ADATA MOV DS,AX MOV MOV DEC L1: MOV BX,0 CX,BUF[BX] ;设计数器CX,内循环次数 CX DX,CX ;设计数器DX,外循环次数
L2:ADD BX,2 MOV AX,BUF[BX] ;取BUF[I]与BUF[I+2] CMP AX,BUF[BX+2];若BUF[I]<=BUF[I+2]转 JBE CONTI XCHG AX,BUF[BX+2] ;否则两数交换 MOV BUF[BX],AX
DATA SEGMENT BASE DB 'PLEASE INPUT A NUMBER (0-7):$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV DX,OFFSET BASE MOV AH,9 INT 21H MOV AH,1 INT 21H

第3章 微机原理 汇编 朱定华

第3章   微机原理 汇编 朱定华
ADD AL,AH ;AL=0EH,AH=08H MOV AH,0
19
3.1.2 BCD数调整指令
注: 同DAA,AAA的操作数也隐含为AL,且要紧跟加法指 令 AAA调整后的存放规律可理解为调整后的个位数送 AL,十位数(即进位)加到AH中.故执行该指令前AH 应依据前后关系决定是否清0 如:将两个BCD数的ASCII码相加,得到和的ASCII码: MOV AL,35H ; ’5’ ADD AL,39H ; ’9’,AL=6EH MOV AH,0 AAA ;AX=0104H OR AX,3030H ; AX=3134H 即’14’ 20
3.1.2 BCD数调整指令
3.非压缩BCD数乘除法调整指令AAM和AAD
(1)乘法调整 格式: AAM
功能:将AL中小于64H的二进制数变换为非压缩 BCD数送AX 调整规则: AL / 0AH
如:
→ AH(十位),
AL MOD 0AH → AL(个位) MOV AL,63H AAM ;AX=0909H 24
14
3.1.2 BCD数调整指令
1.BCD数加法调整指令DAA和AAA
(1)压缩BCD数加法调整 格式: DAA 功能:将AL中的和调整为正确的压缩BCD数 调整规则: (AL&0FH)>9或AF=1,则AL加6;
(AL&0F0H)>90H或CF=1,则AL加60H.
15
3.1.2 BCD数调整指令
MOV AX,1972H ADD AL,AH DAA MOV AX,0102H ADD AL,AH AAA MOV AX,0609H ADD AL,AH MOV AH,0 AAA
;AL=8BH, ;AL=91H,
AH=19H AH=19H

微机原理与接口技术第4章

微机原理与接口技术第4章

4.2.3 汇编语言的伪指令语句 (段定义伪指令)
注意事项
组合类型指定段与段之间的连接和定位
NONE: PUBLIC: COMMON: STACK: AT表达式: MEMORY:
类别型也是分类名,必须用单引号括起来,可以选 择不超过40个字符的名称。
4.2.3 汇编语言的伪指令语句 (段指定伪指令)
4.3.1 DOS和BIOS中断调用
常用的DOS调用
返回DOS(功能调用号:4CH) 键盘I/O(功能调用号:l、6、7、8、A、B、 C) 显示器I/O(功能调用号:2、6、9)
4.3.1 DOS和BIOS中断调用
BIOS中断调用
MOV AH,功能调用号 ;设置规定的入口参数 INT N
4.3.1 DOS和BIOS中断调用
4.2.1 汇编语言语句的种类极其 格式
标识符: 组成规则:
字符个数:1~31。 第一个字符必须是字母。 从第二个字符开始,可以是字母,问号“?”, “@”,数字,或下划线“_”中的一个。 不能使用系统专用的保留字。
4.2.2 汇编语言的数据
常量 变量 标号 表达式与运算符
4.2.2 汇编语言的数据(常量)
功能号 0 2 功能 设置显示方式 设置光标位置 入口参数 AL中的数表示显示方式 DH—光标行号,DL—光标列号, BH—光标页号 BH—光标页号 CX为光标类 型 DX为行列号 出口参数
3
读光标当前位置 在当前光标位置 上显示输入的字 符 设置彩色调色板 在指定位置上显 示点 在当前页上写字 符
4.2.2 汇编语言的数据(标号)
距离属性的用法
隐含方式: 使用标号后,默认为NEAR
例如:SUB1: MOV AX 30H

微机原理实验指导书 (1)

微机原理实验指导书 (1)

实验一系统操作及程序调试举例1.实验目的学习并掌握实验系统的基本操作,为以后的实验打下基础。

2.实验设备DICE-8086B实验系统一台3.实验准备工作系统一经连好,检查无误后,就可以通电运行。

系统提供两种启动方式,即:系统自动完成后,显示器上会显示“>”提示符,等待键入操作命令。

4.实验内容及步骤(1)系统操作练习(一)要求:从3500内存单元开始建立0~15共16个数据。

程序流程图如下:实验步骤①输入与修改:在“﹥”提示符下键入A2000,此时显示器上将会显示程序的段地址CS和偏移地址IP(=2000H),接着就可以在光标处输入程序。

注:在输入过程中,若发现本行有错误,则可以按“ ”键删除并重新输入;若回车后系统提示“ERROR!”,则要在原地址指针处重新正确输入。

输入程序后可通过反汇编查看程序。

(U操作)②程序运行:在DICE-8086B实验系统上,程序的运行方式有单步、连续和断点运行几种方式。

可参考(T操作,G操作,GB操作等)③内存单元的修改与显示:用(D操作)可显示内存单元的内容,用(E操作)可修改内存单元的内容。

(分别参考前)。

④运行程序观察从3500H单元开始连续存放的16个数据为多少?任意修改AX的值,再运行程序,显示运行结果是否正确?流程图及参考程序如下:地址机器码助记符注释2000 BF 3500 MOV DI,3500 ;设数据区首址2003 B9 0010 MOV CX,0010 ;字节数送CX2006 B8 0000 MOV AX,00002009 9E SAHF200A 88 05 MOV B[DI],AL ;写入一字节200C 47 INC DI ;修改地址指针200D 40 INC AX ;修改数据200E 27 DAA ;十进制调整200F E2 F9 LOOP 200A ;未填完转移2011 CD 00 INT(2)系统操作练习(二)要求:将内存3500单元开始的0~15共16个数传递到3600单元开始的数据区中。

微机原理课程大纲

微机原理课程大纲

《微机原理》课程教学大纲一、课程名称(中英文)中文名称:微机原理英文名称:Principle of Microcomputer二、课程编码及性质课程编码:0800305课程性质:专业核心课,必修课三、学时与学分总学时:32学分:2.0四、先修课程电路理论、模拟电子技术、数字电子技术、C语言及其编程五、授课对象本课程面向材料成型及控制工程专业学生与电子封装技术专业学生开设,也可以供材料科学与工程专业选修。

六、课程教学目的(对学生知识、能力、素质培养的贡献和作用)《微机原理》是材料加工工程专业学生必修专业课程之一,其教学的主要目的包括:1、通过一门理论性、实践性和实用性很强的职业技能课程,增强学生的分析问题能力、编写程序能力与动手能力。

2、深入了解单片微型计算机的原理与结构,为今后成型设备开发打下牢固的理论基础。

3、系统掌握单片机的指令系统、接口技术和一般应用开发方法,为今后设计实际的单片机应用系统打下牢固的理论基础。

4、了解微型计算机技术的发展前沿,掌握其发展特点与动向,具备研发单片机的基础与能力。

七、教学重点与难点:教学重点:1)当今计算机技术飞速发展,本课程以介绍单片微型计算机中最典型的8051为主体、以讲述单片机结构与应用为重点;2)在全面了解与掌握单片微型计算机种类及结构特点的基础上,重点学习汇编语言开发单片微型计算机技术;3)课程将重点或详细介绍新颖的流行的微型控制器及其开发方法,为同学提供更多的实践机会;4)重点学习的章节内容包括:第2章“单片机的结构和原理”(4学时)、第3章“单片机的指令系统”(4学时)、第4章“汇编语言程序设计基础”(8 学时)、第6章“单片机的定时/计数器”(8学时)。

教学难点:1)单片机原理与接口技术课程是实践性极强的课程之一,本课程将密切结合学生的生产实习、课程设置、实验课等实践环节,培养学生对单片微型计算机的认识及设计能力,提高授课质量与效果。

2)通过本课程学习,要求掌握单片微型计算机中的工作原理、结构特点、应用范围、控制方法等,具备合理开发单片微型计算机实践的能力。

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

[公司名称]实验二顺序、分支、循环、子程序设计微机原理上机实验[作者姓名][日期]预习报告零、相关知识1,LEA指令和MOV指令的区别一、顺序结构计算m*n-w,最终结果保存在AX其中m=12, n=12, w=4最终结果为AX=008CH=140Dname "sequence strcture"org 100hMOV AX, 1000HMOV DS, AXMOV SI, 1000HMOV [SI], 12MOV [SI+1], 12MOV [SI+2], 4MOV AL, [SI]MOV BL, [SI+1]MUL BLMOV BX, 0MOV BL, [SI+2]SUB AX, BXHLT二、分支结构在DS数据段偏移地址为DATA开始的顺序80个单元中,存放着某班80个同学的微机原理考试成绩。

现欲编程序统计>=90、89~70、69~60和<60分的人数,并将统计的结果存放在当前数据段偏移地址为BUFFER的顺序单元中name “branch structure”START:MOV DX, 0000HMOV BX, 0000HMOV CX, 80LEA SI, DATALEA DI, BUFFERGOON:MOV AL, [SI]CMP AL, 90JC NEXT3INC DHJMP STORNEXT3:CMP AL, 70JC NEXT5INC DLJMP STORNEXT5:CMP AL, 60JC NEXT7INC BHJMP STORNEXT7:INC BLSTOR:INC SILOOP GOONMOV [DI], DHMOV [DI+1], DLMOV [DI+2], BHMOV [DI+3], BLHLT三、循环结构在DS所决定的数据段,从偏移地址BUFFER开始顺序存放100个无符号16位数。

现欲编程序将这100个数按大小顺序排序(以下程序使用的是快速排序算法,也可以使用冒泡排序,嵌套两层循环)name “circle structure”LEA DI, BUFFERMOV BL, 99NEXT0:MOV SI, DIMOV CL, BLNEXT3:MOV AX, [SI]ADD, SI, 2CMP AX, [SI]JNC NEXT 5MOV DX, [SI]MOV [SI-2], DXMOV [SI], AXNEXT5:DEC CLJNZ NEXT3DEC BLJNZ NEXT0HLT四、子程序编写程序,完成将一组BCD数转换成16位二进制数。

(BCD数转换成16位二进制数用子程序实现)下面提供三种方案,分别用寄存器、储存器和堆栈传递参数①使用寄存器传递参数name "text subprogram using register"STACK SEGMENT STACKDB 256 DUP(?)STACK ENDSDATA SEGMENTBCD1 DB 07H, 06H, 07H, 02H, 03HLENG1 DB 5RESULT DW ?DATA ENDSCODEM SEGMENTASSUME CS:CODEM, DS:DATA, SS:STACKSTART:MOV AX, DATAMOV DS, AXLEA SI, BCD1MOV CX, LENG1CALL FAR PTR BCD-16BMOV RESULT, DXMOV AH, 4CHINT 21HCODEM ENDSCODES SEGMENTASSUME CS:CODES;the part of subprogramBCD-16B PROC FARPUSH BXPUSH AXADD SI, CXMOV DX, 0BCDL:DEC SIPUSH CXMOV AL, [SI]AND AL, 0FHCBWMOV BX, AXMOV AX, DXMOV CX, 10MUL CXMOV DX, AXADD DX, BXPOP CXLOOP BCDLPOP AXPOP BXRETBCD-16B ENDPCODES ENDSEND START②使用储存器传递参数name "text subprogram using store" STACK SEGMENT STACKDB 256 DUP(?)STACK ENDSDATA SEGMENTBCD1 DB 07H, 06H, 07H, 02H, 03HADSEG DW ?ADOFST DW ?LENG1 DW ?RESULT DW ?DATA ENDSCODEM SEGMENTASSUME CS:CODEM, DS:DATA, SS:STACK START:MOV AX, DATAMOV DS, AX;entrance parameterMOV AX, SEG BCD1MOV ADSEG, AXMOV AX, OFFSET BCD1MOV ADOFST, AXMOV LENG1, 5CALL FAR PTR BCD-16BMOV AH, 4CHINT 21HCODEM ENDSCODES SEGMENTASSUME CS:CODES;the part of subprogramBCD-16B PROC FARPUSH BXPUSH AXPUSH SIPUSH DSMOV DS, ADSEGMOV SI, ADOFSTMOV CX, LENG1XOR DX, DXADD SI, CXBCDL:DEC SIPUSH CXMOV AL, [SI]AND AL, 0FHCBWMOV BX, AXMOV AX, DXMOV CX, 10MUL CXMOV DX, AXADD DX, BXPOP CXLOOP BCDLPOP AXPOP BXPOP DSPOP SIRETBCD-16B ENDPCODES ENDSEND START③使用堆栈传递参数name "text subprogram using stack"STACK SEGMENT STACKDB 256 DUP(?)STACK ENDSDATA SEGMENTBCD1 DB 07H, 06H, 07H, 02H, 03HLENG1 DW ?RESULT DW ?DATA ENDSCODEM SEGMENTASSUME CS:CODEM, DS:DATA, SS:STACK START:MOV AX, DATAMOV DS, AX;pushPUSH DSLEA SI, BCD1PUSH SIMOV CX, LENG1PUSH CXCALL FAR PTR BCD-16BPOP DXMOV RESULT, DXMOV AH, 4CHINT 21HCODEM ENDSCODES SEGMENTASSUME CS:CODES;the part of subprogramBCD-16B PROC FARPUSH BPMOV BP, SPPUSH DSPUSH SIPUSH CXPUSH BXPUSH AXMOV CX, [BP]+6MOV SI, [BP]+8MOV DS, [BP]+10ADD SI, CXMOV DX, 0BCDL:DEC SIPUSH CXMOV AL, [SI]AND AL, 0FHCBWMOV BX, AXMOV AX, DXMOV CX, 10MUL CXMOV DX, AXADD DX, BXPOP CXLOOP BCDLPOP AXPOP BXPOP CXPOP DSPOP SIPOP BPRET ABCD-16B ENDP CODES ENDSEND START正式实验报告一、实验要求1.教材P74例1。

m=6,n=4,w=7。

结果Q也放在内存中。

2.教材P75例3。

3.从键盘上输入1个数,判断其奇偶性,如果是奇数,屏幕上显示”It is odd”,否则显示”It is even”。

4.从键盘上输入N个字符(N<16),求这N个字符中’A’的个数,并将’A’的个数显示在屏幕上。

5. 已知BUF1中有N1个按从小到大的顺序排列的互不相等的无符号数,BUF2中有N2个从小到大的顺序排列的互不相等的无符号数。

编写程序将BUF1和BUF2中的数合并到BUF3中,使在BUF3中存放的数互不相等且按从小到大的顺序排列。

6. 需要预习报告。

二、实验目的学习顺序、分支、循环结构以及子程序的编程设计。

三、实验过程(调试分析)3.1 textbook page74-1最后的计算结果应该为AX=6*4-7=17D=11Horg 100hMOV AX, 1000HMOV DS, AXMOV SI, 1000HMOV [SI], 6MOV [SI+1], 4MOV [SI+2], 7MOV AL, [SI]MOV BL, [SI+1]MUL BL; 6*4-->ALMOV BX, 0MOV BL, [SI+2]SUB AX, BXHLT3.2 textbook page75-3用"0","1","C","D","E","O","P","Q","R","S","$"的ASCII值代表10位学生的分数,分别为48/49/67/68/69/79/80/81/82/83分name "textbook page75-3"data segmentSCORES DB "0","1","C","D","E","O","P","Q","R","S","$";48/49/67/68/69/79/80/81/82/83endscode segmentstart:ASSUME DS:DATA, CS:CODEMOV AX, DATAMOV DS, AXMOV CX, 10MOV SI, OFFSET SCORES;<--> MOV SI, OFFSET SCORES MOV DI, 0000HGOON:MOV AL, [SI]CMP AL, 90JC NEXT3INC DHJMP STORNEXT3:CMP AL, 70JC NEXT5INC DLJMP STORNEXT5:CMP AL, 60JC NEXT7INC BHJMP STORNEXT7:INC BLSTOR:INC SILOOP GOONMOV [DI], DHMOV [DI+1], DLMOV [DI+2], BHMOV [DI+3], BLendsend start由结果可知:DH=0,DL=5,BH=3,BL=2说明90以上0人,89~70有5人,69~60有3人,小于60有2人3.3 experiment 2-3name "experiment 2-3"data segmentHEX1 DB 0AH,0DH,"It is even$"HEX2 DB 0AH,0DH,"It is odd$";0AH,0DH换行+回车endscode segmentstart:ASSUME DS:DATAMOV AX, DATAMOV DS, AX;read from the keyboardMOV CX, 16DO:MOV AH, 01HINT 21HCMP AL, 13JZ NEXT0MOV BL, ALLOOP DONEXT0:SUB BL, 48MOV AL, BLMOV BL, 2DIV BLCMP AH, 1JNZ NEXT1JZ NEXT2NEXT1:LEA DX, HEX1MOV AH, 09HINT 21HHLTNEXT2:LEA DX, HEX2MOV AH, 09HINT 21H endsend start若输入的为偶数若输入的为奇数3.4 experiment 2-4 name "experiment 2-4" data segmentHEX DB 16 DUP(0) endscode segmentstart:ASSUME DS:DATAMOV AX, DATAMOV DS, AXMOV CX, 16;read from keyboard read:CMP CX, 1JZ STOPMOV AH, 01HINT 21HCMP AL, 65JZ countCMP AL, 13JZ STOPLOOP read;count 'A' characterscount:INC BLLOOP readSTOP:MOV AH, 02HMOV DL, 0AHINT 21H; 打印换行MOV DL, 0DHINT 21H;打印回车ADD BL, 48MOV DL, BLINT 21Hendsend start3.5 experiment 2-5①冒泡排序,没有在BUF3中除去重复的字符此题设两个字符串为BUF1 = ”ACEGIK”BUF2 = ”BDFJLHMN”name "experiment 2-5";此程序不需要压入堆栈保护的数据data segmentBUF1 DB "ACEGIK$"BUF2 DB "BDFJLHMN$"BUF3 DB 14 DUP(0)endsstack segmentDB 256 DUP(0)endscode segmentstart:ASSUME DS:DATA, CS:CODEL, SS:STACKMOV AX, DATAMOV DS, AXLEA BX, BUF1LEA SI, BUF2LEA DI, BUF3CALL removeCALL reorder;段内转移,若段间转移,测试一下格式;print on the screenLEA DX, BUF3MOV AH, 09HINT 21HHLTremove proc nearMOV CX, 6DO1:MOV AX, [BX]MOV [DI], AXINC BXINC DILOOP DO1MOV CX, 8DO2:MOV AX, [SI]MOV [DI], AXINC SIINC DILOOP DO2RETremove endpreorder proc nearMOV CX, 13;注意是13,思考清楚JUDGE1:LEA DI, BUF3PUSH CXMOV CX, 13JUDGE2:MOV AL, [DI]MOV BL, [DI+1]CMP AL, BLJC NEXT1MOV [DI+1], ALMOV [DI], BLNEXT1:INC DILOOP JUDGE2POP CXLOOP JUDGE1RETreorder endpend start②采用串的合并的算法,可以除去BUF3中重复的字符name "experiment 2-5plus"data segmentBUF1 DB "ACEGIK$"BUF2 DB "BCFHILMN$"BUF3 DB 14 DUP(0)endsstack segmentDB 256 DUP(0)endscode segmentstart:ASSUME DS:DATA, CS:CODEL, SS:STACKMOV AX, DATAMOV DS, AXLEA BX, BUF1LEA SI, BUF2LEA DI, BUF3NEXT0:MOV AX, [BX]MOV DX, [SI]CMP AL, DL; 写成CMP AX, DX会出错JC NEXT1JZ NEXT1_5JA NEXT2NEXT1:MOV [DI], AXINC DIINC BXJMP NEXT3NEXT1_5:MOV [DI], AXINC BXINC SIINC DIJMP NEXT3NEXT2:MOV [DI], DXINC DIINC SIJMP NEXT3NEXT3:CMP [BX+1], 36JZ NEXT5CMP [SI+1], 36JZ NEXT6LOOP NEXT0NEXT5:INC SICMP [SI], 36JZ PRINTMOV DX, [SI]MOV [DI], DXINC DILOOP NEXT5NEXT6:INC BXCMP [BX], 36JZ PRINTMOV AX, [BX]MOV [DI], AXINC DILOOP NEXT6。

相关文档
最新文档