微机原理程序
微机原理及程序设计

微机原理及程序设计微机原理及程序设计是一门结合了计算机硬件基础和软件编程技能的课程,它对于理解现代计算机系统的工作方式至关重要。
本课程旨在教授学生微机的基本组成原理、指令系统、存储结构以及程序设计的基本方法。
微机原理概述微机,即微型计算机,是一种体积小、价格低廉、功能相对单一的计算机系统。
它们广泛应用于个人计算、嵌入式系统、工业控制等领域。
1. 微机的基本组成:微机主要由中央处理器(CPU)、存储器、输入输出设备(I/O)等部分组成。
2. 中央处理器:CPU是微机的核心,负责执行程序指令。
它包括算术逻辑单元(ALU)、控制单元(CU)和寄存器组。
3. 存储器:存储器用于存储程序和数据。
主要分为随机存取存储器(RAM)和只读存储器(ROM)。
4. 输入输出设备:包括键盘、鼠标、显示器、打印机等,用于与用户进行交互。
指令系统与寻址方式1. 指令系统:是CPU可以执行的所有指令的集合。
指令系统的设计直接影响到微机的性能和功能。
2. 寻址方式:是CPU访问存储器中数据的方法。
常见的寻址方式包括直接寻址、间接寻址、基址寻址等。
存储结构1. 存储器的层次结构:通常包括高速缓存(Cache)、主存和辅助存储器。
2. 存储管理:涉及虚拟存储技术、内存分配和回收等。
程序设计基础1. 程序设计语言:包括汇编语言、高级语言等。
汇编语言与机器指令直接对应,而高级语言则更为抽象,易于编写和理解。
2. 程序结构:程序通常由数据定义、指令序列和控制结构组成。
3. 算法与数据结构:算法是解决问题的步骤,而数据结构是组织数据的方式。
程序设计方法1. 模块化设计:将程序分解为多个模块,每个模块完成特定的功能,易于管理和维护。
2. 面向对象编程:以对象和类为基础,强调数据和功能的封装、继承和多态性。
3. 程序调试:使用调试工具来查找和修复程序中的错误。
微机接口技术1. 总线接口:连接微机内部各部件的通信线路。
2. 外设接口:如串行接口、并行接口、USB接口等,用于连接外部设备。
微机原理-常用指令用法

微机原理-常⽤指令⽤法序号指令功能和特点例程1 例程2 例程3 1 MOV 参与传送的操作数有:通⽤寄存器,段寄存器,存储单元,⽴即数四类。
有有互相之间只要不违背以下原则即可进⾏传送:1.源,⽬的操作数长度⼀致2.源,⽬的操作数不能同为存储单元3.CS不能作为⽬的操作数4.段寄存器只能通过通⽤寄存器或存储单元进⾏赋值。
5.⽴即数不能作为⽬的操作数。
2 PUSH ⼀定是字操作(不能PUSH字节)有PUSH AX,PUSH DS,PUSH [0000H] ;【POP对等】SP <‐ SP‐2,字存⼊SP指向的地址(⾼位在⾼地址)操作数可以为通⽤寄存器,段寄存器或存储单元,CS可PUSH不可POP3 POP 与PUSH对等4 XCHG Xchg dst,src可在通⽤寄存器间,通⽤寄存器和存储单元间进⾏。
不能⽤段寄存器和⽴即数。
XCHG [1200H],DXXCHG AL,CL5 XLAT 直接写出XLAT就⾏,在调⽤该指令前,需将BX初始化为数据表的⾸地址,AL初始化为希望取得的数据在数据表中的序号。
在调⽤该指令后,AL中的内容被赋值为DS:[BX][AL]的内容。
6 LEA LEA BX,1000H[SI],执⾏后BX = SI+1000H有LEA BX,TABLEMOV BX,OFFSET TABLE,以上两条等价7 LDS 指针送寄存器和DS指令LDS dst,src将SRC指定的连续4个存储单元的内容传送到DS和DST指向的寄存器,⾼字送到DS,低字送到DST假设DS=3200H,(33550H)=3A78H,(33552H)=1998HLDS SI,[1550H]后,SI = 3A78H,DS = 1998H8 LES 类同LDS,不同的是DS改成了ES9 SAHF 将AH的内容送标志寄存器的低8位10 LAHF 把标志寄存器的低8位送⼊AH11 PUSHF 将16位标志寄存器内容压⼊堆栈12 POPF 从堆栈弹出字数据送⼈标志寄存器13 ADD Dst可以为存储单元或通⽤寄存器有 Src可为存储单元,通⽤寄存器或⽴即数,不能同时为存储单元Add ax,1234hAdd [1234h],ax14 ADC Adc dst,srcDst = dst+src+cf15 INC Inc dstDst为通⽤寄存器或存储单元影响OF,SF,ZF,AF,PF,但不影响CF。
微机原理与接口技术-六章-程序设计

汇编语言程序设计步骤:
开始
处理
处理
结束
处理
Y
N
6.2 简单程序(1)
例:将内存单元10050H的内容拆成两段,每段4位,分别存 入10051H(低4位)和10052H(高4位)单元。即 10051H和10052H单元的高4位都为0。
⑥静态检查程序是否有错
6.3 分支程序(1)
N 条件满足? 语句系列1 语句系列2 N
例:编一个程序。从外设71H取一个数M,判断其值是否在10和 20之间,即10≤M<20。如果M≥20,则送0FFH给外设73H; 如果M<10,则送00H给外设73H;如果10≤M<20, 则送88H给外设73H。
子程序中对堆栈的压入和弹出操作要成对使用,保持堆栈的平衡。
子程序要利用过程定义伪指令声明。
一、子程序编写注意事项
二、举例
例:
code segment main proc far ...... call subr1 ...... ret main endp subr1 proc near ...... ret subr1 endp code ends
DP5 PROC NEAR MOV AL,CL SAL AL,1 SAL AL,1 ADD AL,CL MOV CL,AL RET DP5 ENDP MY ENDS END START AL=? BL=? CL=?
汇编语言中,子程序要用一对过程伪指令PROC和ENDP声明,格式如下: 过程名 PROC [NEAR/FAR] …… ;过程体 …… 过程名 ENDP NEAR属性(段内近调用) FAR属性(段间远调用)
提供必要的子程序说明信息。
处理好子程序与主程序间的参数传递问题。
微机原理简单程序设计实验流程图

微机原理简单程序设计实验流程图下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor. I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!1. 实验目的:了解微机原理和程序设计的基本概念。
掌握使用汇编语言或高级语言进行程序设计的方法。
微机原理五类常用程序

五类常用程序:传输数据求最大最小值统计正负数排序加法程序存储器清零或置FF1.1将1000H-1063H中的各字节内容清0(或置FFH)1.2传输数据块将1000H-1063H中的字节内容传递到4000H-4063H2.找最大值最小值从2500H-2563H中存放着数据,把其中的最大值找出来,地址存放在3000H中3.统计负数正数从2100H 开始存放100个无符号数,统计有多少个正数,多少个负数。
负数个数存入2200H4.1求1AH+02H+31H+14H+2FH+06H=???数据1AH、0FH 、24H、4EH、18H、2DH放在[3000H]- [3005H]处4.2求十进制计算25 74 89 67+ 49 78 64 95数据25 74 89 67放在[2400]- [2403]数据49 78 64 95放在[2500]- [2503]4.3将BLOCK单元开始的10个单元数相加,结果存放入BLOCK单元。
若相加过程中发生溢出,停止运算,并在DL中设置溢出标志FF.5.冒泡排序方法5.1字节型变量V AR1、V AR2和V AR3存放有3个无符号数,将其中的内容按从大到小重新排列。
解:经重新排列后,V AR1的值最大,V AR3的值最小。
由于变量中存放的数据为无符号数,因此应该采用JA、JAE、JB、JBE等指令。
编程思路:通过在三个数中找出最大值,将它与V AR1单元进行交换;然后对剩余的两个数进行比较,将较大值存放在V AR2中。
汇编语言程序如下:5.2存放在2040H-2045H中的字节数据由大到小排列1.1将1000H-1063H中的各字节内容清0(或置FFH)MOV SI, 1000HMOV CX, 0064HXOR AL,ALL1: MOV [SI], ALINC SIDEC CXJNZ L1HLT1.2传输数据块将1000H-1063H中的字节数据内容传递到4000H-4063HMOV SI, 1000HMOV DI, 4000HMOV CX, 0064HL1: MOV AL, [SI]MOV [DI], ALINC SIINC DIDEC CXJNZ L1HLT2. 从2100H 开始存放100个无符号数,求最大值并存入单元2200HMOV SI, 2100HMOV CX, 0064HXOR AL,ALL1: CMP AL, [SI]JNC L2MOV AL , [SI]L2: INC SIDEC CXJNZ L1MOV [2200], ALHLT如果求最小值XOR AL,AL 改为MOV AL,0FFHJNC L2 改为JC L2或者MOV [SI], ALINC SI相应MOV CX, 0063H3.统计负数正数从2100H 开始存放100个无符号数,统计有多少个正数,多少个负数。
微机原理乐曲程序两只老虎1

STACK SEGMENTDW 100 DUP(?)STACK ENDSDATA SEGMENTMUSIC DW 2 DUP(262,294,330,262) ; 频率表DW 2 DUP(330,349,392)DW 2 DUP(392,440,392,349,330,262)dw 2 dup(294,196,262),0 ;0表示结束TIME DW 10 DUP(250*50),500*50,250*50,250*50,500*50 ;节拍表DW 2 DUP(120*50,120*50,120*50,120*50,250*50,250*50)DW 2 DUP(250*50,250*50,500*50)N EQU 32 ;32个音符DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV CX,2 ;CX控制演奏几遍LP3: PUSH CX ;压栈保护CX中的LP0: LEA SI,MUSICLEA BP,TIMEMOV CX,N ;32个节拍频率MOV AX,0 ;后面要用到除法,先扩展AXLP1: MOV DI,[SI]CMP DI,0 ;与结束符号比较JE LP6 ;如果结束,就跳转到LP6,关闭扬声器,返回DOSMOV BX,DS:[BP] ;未结束就把节拍放到BX中,BP与ES默合,所以要有段前缀说明MOV AL,0B6H ;设置工作方式为:计数器2控制扬声器,读写,方波,二进制OUT 43H,ALMOV DX,12H ;用时钟频率除以频率表中的值算出计数值,以产生新的声音频率MOV AX,34DCH ;AX放低字,DX放高字,商在AX中DIV DIOUT 42H,AL ;除下来的计数值先输出AL,再输出AH,因8253的数据总线是8位的,所以要用两条输出指令来写MOV AL,AHOUT 42H,ALIN AL,61H ;打开扬声器MOV AH,ALOR AL,3 ;使PB0=1,PB1=1,0000 0011,GATA2获得高电平,OUT2接通扬声器,允许输出到达扬声器OUT 61H,ALPUSH CX ;因下面要用到延时CX付值,把CX=32-1压栈WAYT: MOV CX,33144 ; 延时,根据书P391如果CX=33144可以产生0.5秒的时间延时DELAY: LOOP DELAYDEC BX ;BX的数为该节拍的时间,即BX*0.5JNZ WAYTADD SI,2ADD BP,2POP CX ;把CX=32-1出栈,循环回LP1,取第二,三......单元的频率和节拍LOOP LP1POP CXLOOP LP3lp6:IN AL,61H ;关闭扬声器AND AL,0FCH ;1111 1100,使PB0=0,PB1=0OUT 61H,ALMOV AH,4CHINT 21HCODE ENDSEND START。
微机原理微型计算机的程序设计

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个字节。 所以,数据段定义为:
微机原理第五章 程序设计-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
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
可编程计数器/定时器8253基本工作方式实验参考实验程序CODE SEGMENT ;H8253.ASMASSUME CS:CODEORG 1290HSTART: JMP TCONTTCONTRO EQU 0043HTCON0 EQU 0040HTCONT: MOV DX,TCONTROMOV A L,36HOUT DX,A LMOV DX,TCON0MOV A L,00HOUT DX,A LMOV A L,04HL: OUT DX,A LJMP $CODE ENDS思考:看下面程序8253的通道0的计数值为多少?out0的输出周期为多少?为什么二极管亮灭不明显。
若是在标号L对应的语句后再加入MOV DX,TCONTROMOV A L,36HOUT DX,A LMOV DX,TCON0MOV A L,00HOUT DX,A LMOV A L,02HOUT DX,A LEND STA RT提示:T提供8MHZ始终脉冲,74LS393分别提供T0-T7八个分频输出插孔,依次为:交通灯试验:所有实验中低电平有效。
IN为实验仪输入端,OUT为实验仪输出端。
连线:PA0~PA2→OUT0~OUT2。
实验程序清单CODE SEGMENT ;代码段定义ASSUME CS:CODE;指定代码段寻址使用CS寄存器PCTL EQU 0FF2BH;定义8255各寄存器地址(控制口地址)XPA EQU 0FF28H;8255A口地址RL EQU PA0;红灯GL EQU PA1;绿灯YL EQU PA2;黄灯ORG 2000H ;定义起始地址START: MOV DX,PCTL;写8255控制字MOV A L,80HOUT DX,AL;定义8255 A口为输出MOV DX,XPAMOV A L,0FFHOUT DX,AL ;8255 A口初始化,所有灯熄灭MOV A L,03HOUT DX,AL ;低电平有效,所有黄灯亮(PA2=0)CALL DLY;调用延时子程序MOV A L,06H ;PA0=0,有效OUT DX,AL ;横向绿灯亮可以通行,纵向红灯亮禁止通行CALL DLY;延时MOV A L,03H ;PA2=0;有效OUT DX,AL ;所有黄灯亮CALL DLY;延时MOV A L,05H ;PA1=0;有效OUT DX,AL ;横向红灯亮禁止通行,纵向绿灯亮可以通行CALL DLY;延时JMP START ;程序循环执行DLY: MOV CX,0010H;延时子程序DLY1: PUSH CXMOV CX,0FFFFHDISP1: LOOP DISP01POP CXLOOP DLY1RETCODE ENDSEND STARTLED数码管显示控制实验实验程序清单CODE SEGMENTASSUME CS:CODEXPCTL EQU 0FF2BH ;定义8255各寄存器地址(控制口地址)XPA EQU 0FF28H ;8255 A口XPB EQU 0FF29H ; 8255 B口XPC EQU 0FF2AH ; 8255 C口ORG 3000HSTART: MOV DX,XPCTL ;PB-->DAN,PA-->W EIMOV A L,80H ;PA、PB为输出OUT DX,A LMOV A L,0FFH ;8255 PB口初始化,各位置1MOV DX,XPBOUT DX,A LMOV A L,0FFH ;8255 PA口初始化,各位置1MOV DX,XPAOUT DX,A LMOV A L,01H ;PB口输出字段码MOV DX,XPBOUT DX,A LMOV A L,07FHCON: MOV DX,XPA ;PA口输出字位码OUT DX,A LCALL DELY ;延时ROL AL,1 ;依次选择字位,实现数字的移动效果JMP CONDELY: MOV CX,0001H;延时子程序DLY1: PUSH CXMOV CX,0FFFFHDISP1: LOOP DISP1POP CXLOOP DLY1RETCODE ENDSEND STA RTD/A转换实验实验程序CODE SEGMENT ;H0832-1.ASMASSUME CS:CODEDAPORT EQU 8000hORG 10D0hSTART:MOV A L,0FFH ;数据255,L : MOV DX,8000hOUT DX,A L ;数据送入DA C0832进行数模转换。
输出高电平电压CALL DELA Y ;调用延迟程序NOT A L ;原数据取反,由255变成0,若是在送给DA C0832进行数模转换。
输出低电平电压JMP L ;循环DELA Y:PUSH CXMOV CX,8000HDELA Y0:DEC CXJNZ DELA Y0POP CXRETCODE ENDSEND STA RT简单I/O口扩展实验实验源程序:CODE SEGMENT ;IO.ASMASSUME CS:CODEORG 19D0HSTART: MOV DX,8000HIN A L,DXMOV DX,9000HOUT DX,ALJMP STARTCODE ENDSEND START可编程并行接口8255A实验code segementassume cs:codeorg 1000hstart0:jmp starttab db 0c0h,0fchstart:mov cx,10;lea bx,tab;mov al,[bx]mov dx,0ff22hout dx, almov al,111mov dx,0ff21hout dx,alcall delayinc bx;loop ldelay:pushcxmov cx,0f000hdelay0:pushfpopfloop delay0pop cxretcode endsend start0mov al,11111100bmov dx,0ff22hout dx,almov al,11111110bmov dx,0ff21hout dx,almov cx,00a0hloop $;l:loop lmov al,11111111bmov dx,0ff21hout dx,almov al,10010010bmov dx,0ff22hout dx,al流水灯实验code segmentassume cs:codeorg 1000hstart0: jmp starttab db 0c0h,0f9h,0a4h,0b0h,99h ,92h,82h,0f8h,80h,90hstart:mov cx,10lea bx,tabl: mov al,[bx]mov dx,0ff22hout dx,almov al,11111110bmov dx,0ff21hout dx,alcall delayinc bxloop ldelay: push cxmov cx,0f000hdelay0:pushfpopfloop delay0pop cxretcode endsend start0实验ycode segmentassume cs:codeorg 1850hstart:MOV AL,90HMOV DX,0FF2BHOUT DX,ALL:MOV DX,0FF28HIN AL,DXMOV DX,0FF29HOUT DX,ALjump lcode endsend start简单IO扩展实验(第一次实验)ASSUME CS:CODECODE SEGMENTORG 1200Hstart:mov al,11111110bL:mov dx,9000hout dx,alCALL DELAY1ROL AL,1JMP LDELAY1:MOV cx,176hlp1:pushfPOPFPUSHFPOPFpushfPOPFPUSHFPOPFpushfPOPFPUSHFPOPFpushfPOPFPUSHFPOPFpushfPOPFloop LP1RETcode endsend startCODE segmentassume cs:codeTAB DB 0C0H,0F9H,0A4H,0B0H start:LEA BX,TABMOV AL,10010000BOUT 93H,ALIN AL,90HXLA TOUT 91H,ALcode endsend startCODE SEGMENT ;H8253.ASM ASSUME CS:CODEORG 1290HSTART:TCONTRO EQU 0043H TCON0 EQU 0040H TCON EQU 0041HMOV DX,TCONTROMOV AL,00110111BOUT DX,ALMOV DX,TCON0MOV AL,00HOUT DX,ALMOV AL,00HOUT DX,ALMOV DX,TCONTROMOV AL,01110111BOUT DX,ALMOV DX,TCONMOV AL,05HOUT DX,ALMOV DX,TCONMOV AL,00HOUT DX,ALCODE ENDSEND START。