微机原理实验程序设计集锦
微机原理与应用综合实验—循环程序设计
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
微机原理及实验指导
实验一、I/O程序设计一.实验内容:I/O程序设计(一)实验内容:1.编程由键盘输入任意一个字符,将该字符的ASCII码值显示在屏幕上。
2.从键盘输入两个1位十进制数,计算二者之和,并将结果显示在屏幕上。
3.编程由键盘输入任意一位数,将该数以二进制数形式显示在屏幕上,例:5=00000101B (二)实验步骤: 1. 画出实验流程图。
2. 运行Tddebug软件,选择Edit菜单编写实验程序 3. 使用Compile菜单中的Compile和Link对实验程序进行汇编、连接,生成执行文件。
4. 使用Rmrun菜单中的Run运行程序,观察运行结果。
5. 使用Rmrun菜单中的Debug调试程序。
单步执行指令,观察各寄存器及数据区的内容。
6. 更改数据区中的数据,考察程序的正确性。
二.分析设计思想。
设计思路:首先将该数以十六进制数形式分解,然后将每一位分别转换为ASCII码送屏幕显示。
其中0H~9H之间的数加30H,即可得0H~9H的ASCII码,而AH~FH的ASCII码,则需再加7H,参见表5-1。
参考程序流程如图2-1所示。
示例程序参见参考程序清单。
三.程序清单及流程DATA SEGMENTMES DB 'Show a as hex:',0AH,0DH,'$'SD DB 'a'DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART: MOV AX,DATAMOV DS,AXMOV DX,OFFSET MES ;显示提示信息MOV AH,09H INT 21HMOV SI,OFFSET SD 4MOV AL,DS:[SI]AND AL,0F0H ;取高4位MOV CL,4SHR AL,CLCMP AL,0AH ;是否是A以上的数JB C2ADD AL,07HC2: ADD AL,30HMOV DL,AL ;显示字符MOV AH,02HINT 21HMOV AL,DS:[SI]AND AL,0FH ;取低4位CMP AL,0AHJB C3ADD AL,07HC3: ADD AL,30HMOV DL,AL ;显示字符MOV AH,02HINT 21HMOV AH,4CH ;返回DOSINT 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个字节。 所以,数据段定义为:
微机原理汇编程序设计
微机原理课程设计设计一:从键盘输入十六进制数并显示出二进制值设计二:字符串匹配设计设计三:字符和数据显示的设计设计四:键盘输入小写字母转换成大写字母设计五:计算N!的设计2011-7-6设计一:从键盘输入十六进制数并显示出二进制值实验目的:掌握接收键盘数据的方法,并了解数据显示时须转换为ASCII码的原理。
实验内容:将键盘接收到的4位十六进制数据转换为等值的二进制数,再显示在屏幕终端上。
流程图:程序源代码:CRLF MACROMOV AH,02HMOV DL,0DHINT 21HMOV AH,02HMOV DL,0AHINT 21HENDMDA TA SEGMENTMARK DB ?MESS DB 'INPUT THE NUMBER! Press Enter to Transition,Press Space to Exit!',0DH,0AH,'Input:$'ERROR DB 0DH,0AH, 'Input Error!',0DH,0AH,'$'DA TA ENDSSTACK SEGMENTSTA DW 32 DUP(?)TOP DW ?STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV ES,AXMOV SP,TOPHEAD: CRLFMOV MARK,0MOV AH,09HLEA DX,MESSINT 21H ;显示提示输入的信息CALL GETNUM ;接收键入数值送DXCMP MARK,01HJE HEADMOV CX,0010H ;16位MOV BX,DXTTT: ROL BX,1 ;循环左移1位MOV DL,BLAND DL,01H ;屏蔽掉高7位ADD DL,30HMOV AH,02HINT 21H ;显示二进制位对应的ASCII字符LOOP TTTJMP HEADFINI: MOV AH,4CHINT 21H ;返回DOSGETNUM PROC NEAR ;子程序,接收键入数值送DX PUSH CXXOR DX,DXGGG: MOV AH,01HINT 21HCMP AL,0DH ;输入为回车,则进行转换JE PPPCMP AL,20H ;输入为空格,则退回DOSJE FINICMP AL,30HJB KKKSUB AL,30HCMP AL,0AHJB GETSCMP AL,11HJB KKKSUB AL,07HCMP AL,0FHJBE GETSCMP AL,2AHJB KKKCMP AL,2FHJA KKKSUB AL,20HGETS: MOV CL,04SHL DX,CLXOR AH,AHADD DX,AXJMP GGGKKK: MOV AH,09HMOV DX,OFFSET ERRORINT 21HMOV MARK,01HPPP: PUSH DXCRLFPOP DXPOP CXRETGETNUM ENDPCODE ENDSEND START运行结果设计二:字符串匹配设计实验内容:编写程序实现两个字符串比较。
最新微机原理实验之_分支程序、循环程序设计
实验三分支程序、循环程序设计实验一、实验目的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的值,观察在三种不同的数据块情况下程序的运行情况,并验证程序的功能。
微机原理实验(含解答程序)
微机原理实验(含解答程序)-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN微机原理实验课题(共16个内容,附解答程序)(汇编程序可以使用MASM FOR WINDOWS)1.将偏移地址为2000h开始的100个单元依次设置为0~99。
2.将两个64位的二进制数相加,记录相加的和以及各个状态标志的值。
3. 编写程序,在屏幕上分行显示自己的姓名、学号。
4. 编写程序,通过键盘输入0——9之间的一个数字,利用查表法计算其平方。
在DEBUG下查看执行结果。
5. 用分支结构设计程序实现符号函数100010xy xx>⎧⎪==⎨⎪-<⎩,要求x和y存放在内存单元中,并将判断的结果在屏幕上显示输出。
6. 在键盘上输入一个字符,判断是否为小写字母,若不是,显示错误信息,若是,则将其转换为大写字母并显示。
7. 在键盘上输入一个字符,判断它是一个数字、大写字母还是小写字母,若为数字,则显示digital,若为字母,显示letter,否则,显示other。
8. 将字节型变量x的低四位(一位十六进制数)以十六进制数的形式显示。
9. 编制程序计算S=1+2·3+3·4+4·5+……+N(N+1)+……直到N (N+1)大于200为止,并将结果由屏幕上显示出来。
10. 将字形变量x以二进制数的形式在屏幕上显示输出。
11. 将字形变量x以十六进制数的形式在屏幕上显示输出。
12. 将内存单元缓冲区中的符号数(20个)按从小到大的顺序排列,并以十六进制数的形式显示。
13. 编制程序计算S=1+2+3+……+N,并将结果由屏幕上显示出来。
(要求:在屏幕上显示提示信息,提示输入N,N用十六进制表示,且N小于0FH,用子程序实现(段内),将输入的结果用十六进制数输出显示,显示结果的程序用子程序是实现(段间))。
14.要求在键盘上输入一个小于四位的十进制数,将其转换为二进制数存放,并讲转换后的结果以十六进制数的形式在屏幕上显示出来。
微机原理实验程序设计集锦.
实验一(1)1.将给定的一个二进制数,转换成二-十进制(BCD)码:要求将AX拆为三个BCD码,并存入result开始的三个单元。
data segment result db 3 dup(? data ends code segment assume cs:code,ds:data start:mov ax,data mov ds,ax mov ax,345 mov cl,100 div cl mov result,al mov al,ah mov ah,0 mov cl,10 div cl movresult+1,al mov result+2,ah jmp $ code ends end start (2)2.将给定的一个BCD数,将其转换成ASCII值:将AX拆为两个ASCII码,并存入result开始的两个单元data segment result db 2 dup(? ASCIIab: db"0123456789ABCDEF" data ends code segment assume cs:code,ds:data start:mov ax,data mov ds,ax mov ax,23h mov bl,al shr bl,4 mov bh,0 mov ah,byte ptr ASCIIab[bx] mov result,ah or al,00h mov bl,al mov ah,byte ptr ASCIIab[bx] mov result+1,ah jmp $ code ends end start 实验二(1)742451.利用板上的集成电路插座,扩展一片74LS245,来读入开关状态。
data segment result db 3 dup(? data ends code segment assume cs:code start:mov dx,200h in al,dx not al mov dx,208h out dx,al jmp start code ends end start (2)74273。
(完整word版)微机原理完整实验报告+程序
实验题目8253定时/计数器实验 一、 实验目的与要求: 1. 学会8253芯片和微机接口原理和方法。
2. 掌握8253定时器/计数器的工作方式和编程原理。
二、 实验内容: 1、实验原理 本实验原理图如图 1所示,8253A 的A0、A1接系统地址总线 A0、A1,故8253A 本实验通道2 有四个端口地址,如端口地址表 1所示。
8253A 的片选地址为 48H~ 4FH 。
因此, 仪中的8253A 四个端口地址为 48H 、49H 、4AH 、4BH ,分别对应通道 0、通道1、 和控制字。
采用8253A 通道0,工作在方式3(方波发生器方式),输入时钟CLK0为 输出OUTO 要求为1KHZ 的方波,并要求用接在 GATE0引脚上的导线是接地("0" 甩空("1"电平)来观察GATE 对计数器的控制作用,用示波器观察输出波形。
2、实验线路连接 (1) 8253A 芯片的CLK0引出插孔连分频输出插孔 (2) 8253A 的 GATE0 接+5V 。
实验步骤 (1) 按图1连好实验线路(2) 运行实验程序 1. 按“调试”按钮2. 选“窗口” “进入示波器窗口” ,然后最小化3. 按“运行按钮”4.将模拟示波器窗口打开,选择“串行口 2”,再按 Ctrl + F2按钮即可看到波形 显示“ 8253-1 ”用示波器测量8253A 的OUT2输出插孔,方波输出,幅值0〜4V 三、实验代码: 1MHZ ,电平)或 3、 CODE SEGMENT ASSUME CS:CODE TCONTRO EQU 004BH TCON2 EQU 004AH CONT PORT EQU 00DFH DATA PORT EQU 00DEH DATA1 EQU 0500H START: JMP TCONT TCONT: CALL FORMATCALL LEDDIS P MOV DX,TCONTRO1MHZ 。
微机原理实验三子程序设计实验
实验三 子程序设计实验一、实验目的1.学习子程序的定义和调用方法。
2.掌握子程序的程序设计、编制及调用。
二、实验设备TDN86/88教学实验系统一台三、实验内容及步骤1.求无符号字节序列中的最大值和最小值设有一字节序列,其存储首址为3000H ,字节数为08H 。
利用子程序的方法编程求出该序列中的最大值和最小值。
实验程序及流程如下:主程序STACK1 SEGMENT STACKDW 64 DUP(?)STACK1 ENDS CODE SEGMENTASSUME CS:CODESTART: MOV SI,3000HMOV CX,0008H CALL branchA1: JMP A1 branch: JCXZ A4PUSH SI PUSH CX PUSH BX子程序实验步骤(1)输入源程序,进行编译、链接和加载。
(2)在调试区键入E0000:3000↙,输入8个字节的数据:D9、07、8B、C5、EB、04、9D、F9。
(3)运行程序,查看结果,在调试区键入R AX↙,显示结果应为AX=F9 04,AH中为最大值,AL中为最小值。
2.数组求和设有一字节序列(存储地址和字节数可自定义),编写程序,求出该序列的和,求和工MOV BH,[SI]MOV BL,BHA1: LODSBCMP AL,BHJBE A2MOV BH,ALJMP A3A2: CMP AL,BLJAE A3MOV BL,ALA3: LOOP A1MOV AX,BXPOP BXPOP CXPOP SIA4: RETCODE ENDSEND START作由子程序来实现。
程序:STACK1 SEGMENT STACK DW 64 DUP(?)STACK1 ENDSCODE SEGMENT ASSUME CS:CODE START: MOV SI,3000H MOV CX,0008HXOR AX,AXCALL branchA5: JMP A5branch: JCXZ A4PUSH SIPUSH CXA1:ADD AL,[SI]INC SIA3: LOOP A1POP CXPOP SIA4: RETCODEENDSEND START8个01,总和为08。
微机原理十进制减法实验程序
微机原理十进制减法实验程序一、十进制数相减程序设计实验DATA SEGMENTDATA1 DB 33H,39H,31H,37H,38H ;第一个数据(作为被减数)DATA2 DB 36H,35H,30H,38H,32H ;第二个数据(作为减数)MES1 DB '-','$'MES2 DB '=','$'DATA ENDSSTACK SEGMENT ;堆栈段STA DB 20 DUP(?)TOP EQU LENGTH STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATASTART: MOV AX,DATAMOV DS,AXMOV ES,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXMOV SI,OFFSET DATA1MOV BX,05CALL DISPL ;显示被减数MOV AH,09HLEA DX,MES1INT 21HMOV SI,OFFSET DATA2MOV BX,05 ;显示减数CALL DISPLMOV AH,09HLEA DX,MES2INT 21HMOV SI,OFFSET DATA1MOV DI,OFFSET DATA2CALL SUBA ;减法运算MOV SI,OFFSET DATA1MOV BX,05 ;显示结果CALL DISPLMOV DL,0DHMOV AH,02HINT 21HMOV DL,0AHMOV AH,02HINT 21HINT 21HMOV AX,4C00HINT 21HDISPL PROC NEAR ;显示子功能DSI: MOV AH,02MOV DL,[SI+BX-1] ;显示字符串中一字符INT 21HDEC BX ;修改偏移量JNZ DSIRETDISPL ENDPSUBA PROC NEARMOV DX,SIMOV BP,DIMOV BX,05SU1: SUB BYTE PTR[SI+BX-1],30HSUB BYTE PTR[DI+BX-1],30HDEC BX ;将ASCII 码表示的数字串 JNZ SU1 ;转化为十六进制的数字串 MOV SI,DXMOV DI,BPMOV CX,05 ;包括进位,共5位CLC ;清进单位SU2: MOV AL,[SI]MOV BL,[DI]SBB AL,BL ;带进位相减AAS ;非组合BCD码的减法调整 MOV [SI],AL ;结果送被减数区INC SIINC DI ;指向下一位LOOP SU2 ;循环MOV SI,DXMOV DI,BPMOV BX,05SU3: ADD BYTE PTR [SI+BX-1],30HADD BYTE PTR [DI+BX-1],30HDEC BX ;十六进制的数字串转化ASCII码表示的数字串 JNZ SU3 RETSUBA ENDPCODE ENDSEND START二、十进制数排序程序设计实验;;;;;功能:冒泡排序服务程序;;;;;;DATA SEGMENTWORD DB 'Input numbers:',0DH,0AH,'$'BUF DB 100 DUP('$')DATA1 DB 0DH,0AH,'The result is:',0DH,0AH,'$' COUNT DB 0 DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:;;;;;;;;;;;;;;初始化;;;;;;;;;;;;;MOV AX,DATAMOV DS,AXLEA DX,WORDMOV AH,09HINT 21HLEA DX,BUFMOV AH,0AH ;输入字符到缓冲区INT 21H ;输入数据(0~99),每个数据空格隔开;;;;;;功能:计算键入数字个数;;;;;;;;;;;;;H1: MOV AL,DI[BUF+2]CMP AL,' ' ;是否为空格JNZ H2INC [COUNT] ;有数字,数量+1JMP H3H2: CMP AL,0DH ;是否为CRJZ H4H3: INC DIJMP H1H4: INC [COUNT];存放需要比较的个数;;;;;;;功能:冒泡排序服务程序;;;;;;;;;;;;; MOV CX,0MOV CL,BYTE PTR [COUNT];循环次数L1: PUSH CXMOV CL,BYTE PTR [COUNT]MOV DI,0;取首位数据L4: CALL COUNT1;调用判断数据位数子程序CMP BL,DL;比较位数的大小JA L5;前一个数比后一个数大的情况JNE L6CMP BL,1JNZ L7CALL XCH3;同为一位数的比较JMP L5L7: CALL XCH2;同为两位数的比较JMP L5L6: CALL XCH1;前一个数比后一个数位数少的情况L5: LOOP L4POP CXLOOP L1;;;;;;;;显示排序结果;;;;;;;;;;DISPLAY:LEA DX,[DATA1]MOV AH,09HINT 21H;显示提示信息LEA DX,[BUF+2]MOV AH,09HINT 21H;显示结果MOV AH,4CHINT 21H;返回结束;;;;;;;;判断数据位数;;;;;;;;;;COUNT1:MOV DX,0MOV BX,0J1: MOV AL,DI[BUF+2]CMP AL,' 'JZ J2CMP AL,0DHJZ J3INC BLINC DIJMP J1J2: MOV AL,DI[BUF+3]CMP AL,' 'JZ J3CMP AL,0DHJZ J3INC DLINC DIJMP J2J3: SUB DI,DXINC DIRET;;;前一个数比后一个数位数少的情况;;XCH1:MOV AL,DI[BUF] ;第一个数装入ALMOV BX,WORD PTR DI[BUF+2] ;第二个数装入BX MOV WORD PTR DI[BUF],BXMOV BL,20HMOV DI[BUF+2],BLMOV DI[BUF+3],ALINC DIRET;;;;;;;;;;同为两位数比较;;;;;;;;;XCH2:MOV BX,WORD PTR DI[BUF-1] ;第一个数装入BX MOVDX,WORD PTR DI[BUF+2] ;第二个数装入DX CMP BX,DX JAE L9 ;>=不交换MOV WORD PTR DI[BUF-1],DXMOV WORD PTR DI[BUF+2],BXL9: RET;;;;;;;;;;同为一位数的比较;;;;;;;;XCH3:MOV DL,DI[BUF] ;第一个数装入DLMOV DH,DI[BUF+2];第二个数装入DHCMP DL,DHJAE L10 ;>=不交换MOV DI[BUF],DHMOV DI[BUF+2],DLL10: RETCODE ENDSEND START三、8255输入输出实验;//***************************************************** ;文件名: 8255IO for 8088;功能: 8255输入、输出实验;接线: 用导线连接8255模块的CS_8255到CPU模块的200H;; 8255模块的JD3C到八位逻辑电平输出模块的JD1E。
微机原理程序设计实验
微机原理汇编语言上机实验注意:红色斜体部分是对该处的说明或提示,应该按具体内容书写即可实验一顺序程序设计实验目的:熟悉汇编语言程序设计软件masm的使用,掌握顺序程序的编写和运行方法。
实验内容:编写顺序结构的汇编语言程序,并进行编译、链接生成可执行程序,进行调用。
源程序代码如下:(见课本P143页,例4.5的代码,注意变量x、y、z在定义时初值设为6、7、8)…程序的编译、链接和运行:(根据文件《汇编程序调试方法》自己总结书写,把编译、链接和运行的命令写清楚即可,如编辑命令是:EDIT 4-5.asm编译命令是:MASM 4-5.asm链接命令是:LINK 4-5.obj运行命令是:4-5.exe)实验二分支程序设计实验目的:熟悉汇编语言程序设计软件masm的使用,掌握分支程序的编写、运行和调试方法。
实验内容:编写分支结构的汇编语言程序,能对程序进行编译、链接和调用,并能对程序进行调试。
源程序代码如下:(见课本P146页,例4.7的代码)…程序的编译、链接和运行:(根据文件《汇编程序调试方法》自己总结书写,把编译、链接和运行的命令写出来,并写出程序调试的方法和调试命令的用法)编译、链接和运行命令如上个实验所示,调试命令为DEBUG 4-7.exe-R——查看寄存器-U——反汇编-P——分步执行程序-D——查看数据段内容最好能写出具体用法实验三循环程序设计实验目的:熟悉汇编语言程序设计软件masm的使用,掌握循环程序的编写、运行和调试方法。
实验内容:编写循环结构的汇编语言程序,能对程序进行编译、链接和调用,并能对程序进行调试。
源程序代码如下:(见课本P149页,例4.9的代码)…程序的编译、链接和运行:(根据文件《汇编程序调试方法》自己总结书写,把编译、链接和运行的命令写出来,并写出程序调试的方法和调试命令的用法)编译、链接和运行命令如上个实验所示,调试命令为DEBUG 4-9.exe-R——查看寄存器-U——反汇编-P——分步执行程序-D——查看数据段内容最好能写出具体用法。
微机原理实验8237,8251,8253,8255,8259程序精华版
8237实验程序.MODEL TINYDMAaddr EQU 0E000H ;8237基地址.STACK 100.CODESTAR: MOV AX,0MOV DS,AXmov si,3000hmov al,0ffhmov cx,0800hSTAR3: mov [si],alinc sidec alloop STAR3mov al,04hmov dx,DMAaddr+8out dx,al ;禁止DMA操作mov al,00mov dx,DMAaddr+0dhout dx,al ;复位mov dx,DMAaddr+0chout dx,al ;清除先/后寄存器; mov dx,3000h ;源启始地址3000H mov dx,DMAaddr+00hout dx,almov al,30hout dx,almov al,00mov dx,DMAaddr+0chout dx,al ;清除先/后寄存器; mov dx,6000h ;目的启始地址6000Hmov dx,DMAaddr+02hout dx,almov al,60hout dx,almov al,00mov dx,DMAaddr+0chout dx,al ;清除先/后寄存器mov dx,DMAaddr+03hmov ax,7ffh ;长度0800Hout dx,almov al,ahout dx,almov dx,DMAaddr+0bhmov al,88hout dx,al ;通道0方式字mov al,85hout dx,al ;通道1方式字mov dx,DMAaddr+8mov al,41hout dx,al ;允许8237工作、存贮器方式传送star1: mov dx,DMAaddr+0fhmov al,0chout dx,al ;允许通道0、通道1mov dx,DMAaddr+09hmov al,04hout dx,al ;允许DMA操作mov dx,DMAaddr+08hNOPNOPstar2: in al,dxTEST AL,03Hjz star2 ;等待DMA结束mov dx,DMAaddr+0dhin al,dx ;读暂存寄存器mov dx,DMAaddr+0chout dx,almov dx,DMAaddr+3 ;清除先/后寄存器IN AL,DXMOV AH,ALIN AL,DXCMP AX,0FFFFHJNZ star1mov dx,DMAaddr+09hmov al,00hout dx,al ;清除DMA请求mov dx,DMAaddr+08hmov al,04hout dx,al ;禁止DMA操作mov dx,DMAaddr+0dhin al,dx ;读暂存寄存器mov si,3000hmov bx,6000hmov cx,0800hSTAR5: mov al,[si]cmp al,ds:[bx]jne falseinc siinc bxloop STAR5true: jmp $false: jmp $END STAR////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 8251实验程序.MODEL TINY;使用8253的计数器0,外接2Mhz,经26分频后,送给8251,产生4800bpsCTL_ADDR EQU 0FF01H ;控制字或状态字DA TA_ADDR EQU 0FF00H ;读写数据W_8253_T0 EQU 0BF00H ;计数器0地址W_8253_C EQU 0BF03H ;控制字.STACK 100.DATAReceive_Buffer DB 10 DUP(0) ;接受缓冲器Send_Buffer EQU Receive_Buffer ;发送缓冲器.CODESTART: MOV AX,@DA TAMOV DS,AXMOV ES,AXNOPCALL INIT_8253CALL INIT_8251START1: MOV CX,10CALL Receive_GroupMOV CX,10CALL Send_GroupJMP START1INIT_8253 PROC NEARMOV DX,W_8253_CMOV AL,37H ;定时器0,方式3OUT DX,ALMOV DX,W_8253_T0MOV AL,26H ;BCD码26(2000000/26)=16*4800OUT DX,ALMOV AL,0OUT DX,ALRETINIT_8253 ENDPINIT_8251 PROC NEARCALL RESET_8251MOV DX,CTL_ADDR;?MOV AL,7EH;? ;波特率系数为16,8个数据位OUT DX,AL;? ;一个停止位,偶校验CALL DLTIME ;延时MOV AL,15H;? ;允许接收和发送发送数据,清错误标志OUT DX,AL;?CALL DLTIMERETINIT_8251 ENDPReset_8251 PROC NEARMOV DX,CTL_ADDRMOV AL,0OUT DX,AL ;向控制口写入"0"CALL DLTIME ;延时,等待写操作完成OUT DX,AL ;向控制口写入"0"CALL DLTIME ;延时OUT DX,AL ;向控制口写入"0"CALL DLTIME ;延时MOV AL,40H ;向控制口写入复位字40HOUT DX,ALCALL DLTIMERETReset_8251 ENDP;接受一组数据,CX--接受数目Receive_Group PROC NEARLEA D I,Receive_BufferReceive_Group1: CALL Receive_ByteSTOSBLOOP Receive_Group1RETReceive_Group ENDP;接受一个字节Receive_Byte PROC NEARMOV DX,CTL_ADDRReceive_Byte1:IN AL,DX;? ;读入状态TEST AL,2;?JZ Receive_Byte1;? ;有数据吗?MOV DX,DATA_ADDR;?IN AL,DX;?RETReceive_Byte ENDP;发送一组数据,CX--发送数目Send_Group PROC NEARLEA S I,Send_BufferSend_Group1:LODSB ;?CALL Sendbyte;?LOOP Send_Group1;?RETSend_Group ENDP;发送一个字节Sendbyte PROC NEARPUSH AXMOV DX,CTL_ADDR ;读入状态Sendbyte1: IN AL,DX;?TEST AL,1;?JZ Sendbyte1;? ;允许数据发送吗?POP AX;? ;发送MOV AX,DA TA_ADDR;?OUT DX,AL;?RETSendbyte ENDP;延时DLTIME PROC NEARMOV CX,10LOOP $RETDLTIME ENDPEND START////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 8253实验程序.MODEL TINYCOM_ADDR EQU 0B003HT0_ADDR EQU 0B000HT1_ADDR EQU 0B001H.STACK 100.CODESTART: MOV DX,COM_ADDRMOV AL,35HOUT DX,AL ;计数器T0设置在模式2状态,BCD码计数MOV DX,T0_ADDRMOV AL,00HOUT DX,ALMOV AL,10HOUT DX,ALMOV DX,COM_ADDRMOV AL,77HOUT DX,ALMOV DX,T1_ADDRMOV AL,00HOUT DX,ALMOV AL,10HOUT DX,ALJMP $ ;OUT1输出频率为1S的方波END START////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 8255实验程序.MODEL TINYCOM_ADD EQU 0F003HPA_ADD EQU 0F000HPB_ADD EQU 0F001HPC_ADD EQU 0F002H.STACK 100.DATALED_Data DB 01111101B ;东西绿灯,南北红灯DB 11111101B ;东西绿灯闪烁,南北红灯DB 10111101B ;东西黄灯亮,南北红灯DB 11010111B ;东西红灯,南北绿灯DB 11011111B ;东西红灯,南北绿灯闪烁DB 11011011B ;东西红灯,南北黄灯亮.CODESTART: MOV AX,@DA TAMOV DS,AXNOPMOV DX,COM_ADDMOV AL,80H ;PA、PB、PC为基本输出模式OUT DX,ALMOV DX,PA_ADD ;灯全熄灭MOV AL,0FFHOUT DX,ALLEA B X,LED_DataSTART1: MOV AL,0XLATOUT DX,AL ;东西绿灯,南北红灯CALL DL5SMOV CX,6START2: MOV AL,1XLATOUT DX,AL ;东西绿灯闪烁,南北红灯CALL DL500msMOV AL,0XLATOUT DX,ALCALL DL500msLOOP START2MOV AL,2 ;东西黄灯亮,南北红灯XLATOUT DX,ALCALL DL3SMOV AL,3 ;东西红灯,南北绿灯XLATOUT DX,ALCALL DL5SMOV CX,6START3: MOV AL,4 ;东西红灯,南北绿灯闪烁XLATOUT DX,ALCALL DL500msMOV AL,3XLATOUT DX,ALCALL DL500msLOOP START3MOV AL,5 ;东西红灯,南北黄灯亮XLATOUT DX,ALCALL DL3SJMP START1DL500ms PROC NEARPUSH CXMOV CX,60000DL500ms1: LOOP DL500ms1POP CXRETDL500ms ENDPDL3S PROC NEARPUSH CXMOV CX,6DL3S1: CALL DL500msLOOP DL3S1POP CXRETENDPDL5S PROC NEARPUSH CXMOV CX,10DL5S1: CALL DL500msLOOP DL5S1POP CXRETENDPEND START////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 8259实验程序.MODEL TINYEXTRN Display8:NEARIO8259_0 EQU 0F000HIO8259_1 EQU 0F001H.STACK 100.DATABUFFER DB 8 DUP(?)Counter DB ?ReDisplayFlagDB 0.CODESTART: MOV AX,@DA TAMOV DS,AXMOV ES,AXNOPCALL Init8259CALL WriIntverMOV Counter,0 ;中断次数MOV ReDisplayFlag,1 ;需要显示STI ;开中断START1: CMP ReDisplayFlag,0JZ START1CALL LedDisplayMOV ReDisplayFlag,0JMP START1Init8259 PROC NEARMOV DX,IO8259_0MOV AL,13HOUT DX,ALMOV DX,IO8259_1MOV AL,08HOUT DX,ALMOV AL,09HOUT DX,ALMOV AL,0FEHOUT DX,ALRETInit8259 ENDPWriIntver PROC NEARPUSH ESMOV AX,0MOV ES,AXMOV DI,20HLEA A X,INT_0STOSWMOV AX,CSSTOSWPOP ESRETWriIntver ENDPLedDisplay PROC NEARMOV AL,CounterMOV AH,ALAND AL,0FHMOV Buffer,ALAND AH,0F0HROR AH,4MOV Buffer + 1,AHMOV Buffer + 2,10H ;高六位不需要显示MOV Buffer + 3,10HMOV Buffer + 4,10HMOV Buffer + 5,10HMOV Buffer + 6,10HMOV Buffer + 7,10HLEA S I,BufferCALL Display8RETLedDisplay ENDPINT_0: PUSH DXPUSH AXMOV AL,CounterADD AL,1DAAMOV Counter,ALMOV ReDisplayFlag,1MOV DX,IO8259_0MOV AL,20HOUT DX,ALPOP AXPOP DXIRETEND START。
微机原理实验程序 中国石油大学(华东)
实验3 循环程序设计实验内容:1.数组X,Y,Z,。
X=32,-43,76,95,-1;Y=-78,127,-128,-125,88。
计算两数之和,送入数组S。
DATA SEGMENTX DB 32,-43,76,95,-1Y DB -78,127,-128,-125,88S DB 5 DUP(0)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX ,DATAMOV DS,AXMOV CX,5MOV SI,0FOR:MOV AL,X[SI]ADD AL,Y[SI]MOV S[SI],ALINC SILOOP FORCODE ENDSEND START2.两个多位十进制数,X=1357902468,Y=5790123467。
计算两数之和(BCD码)。
DATA SEGMENTX DB 68H,24H,90H,57H,13HY DB 67H,34H,12H,90H,57HS DB 5 DUP(0)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX ,DATAMOV DS,AXMOV CX,5MOV SI,0CLCFOR:MOV AL,X[SI]ADD AL,Y[SI]DAAMOV S[SI],ALINC SILOOP FORCODE ENDSEND START实验4 子程序调用变成设计实验内容:用子程序调用方法,现有数组X=32,-43,76,95,-1,-78,127,-128,-125,88 编程按递增顺序排序输出。
DATA SEGMENTX DB 32,-43,76,95,-1,-78,127,-128,-125,88ENDS SEGMENTCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX ,DATAMOV DS,AXCALL SUB1MOV AH,4CHINT 21HSUB1 PROC NEARMOV CX,9LP1:MOV BX,0MOV DX,CXLP2;MOV AL,X[BX]CMP AL,X[BX+1]JLE NEXTXCHG AL,X[BX+1]NEXT:INC BXDEC DXJNE LP2LOOP LP1RETSUB1 ENDPCODE ENDSEND START实验5 DOS功能调用实验内容:1.从键盘连续输入五个单个字符,然后再反向输出这5个字符。
微机原理实验程序
第四章 软件实验部分实验一 两个多位十进制数相减实验一、实验要求:将两个多位十进制数相减,要求被减数,减数均以ASCII 码形式按顺序存放在以DA T AI和DA T A2为首的5个内存单元中(低位在前),结果送回DA T AI 处。
处。
二、实验目的:1.学习数据传送和算术运算指令的用法。
.学习数据传送和算术运算指令的用法。
2.熟悉在PC 机上建立、汇编、链接、调试和运行汇编语言程序的过程。
机上建立、汇编、链接、调试和运行汇编语言程序的过程。
三、实验步骤:连好实验箱后接通电源,连好实验箱后接通电源,打开上位机软件打开上位机软件88TE 进入软件调试界面:进入软件调试界面:点击点击点击“文件“文件\打开”打开”文文件路径为C :\88TE\cai\asm\Ruanjian\Rjexp1.asm 。
具体操作如图所示:文件。
点击编译连接生成可执行的exe文件。
通过单步运行调试程序,打开寄存器查看其变量变化情况。
通过单步运行调试程序,打开寄存器查看其变量变化情况。
四、实验程序框图:五、实验程序:文件路径为C :\88TE\cai\asm\Ruanjian\Rjexp1.asm DA DATA SEGMENT TA SEGMENT DA DATA1 TA1 DB 33H,39H,31H,37H,38H ;第一个数据(作为被减数)第一个数据(作为被减数) DA DATA2 TA2 DB 36H,35H,30H,38H,32H ;第二个数据(作为减数)第二个数据(作为减数) MES1 DB '-','$' MES2 DB '=','$' DA DATA ENDS TA ENDS STACK SEGMENT ;堆栈段堆栈段 STA DB 20 DUP(?) TOP EQU LENGTH STA STACK ENDS CODE SEGMENT TA,SS:STACK,ES:DA ASSUME CS:CODE,DS:DA TA,SS:STACK,ES:DAT T A START: MOV AX,DA TA MOV DS,AX MOV ES,AX MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP ,AX MOV SI,OFFSET DATA1 MOV BX,05 CALL DISPL ;显示被减数显示被减数 MOV AH,09H LEA DX,MES1 INT 21H MOV SI,OFFSET DA T A2 MOV BX,05 ;显示减数显示减数 CALL DISPL MOV AH,09H LEA DX,MES2 INT 21H MOV SI,OFFSET DATA1 MOV DI,OFFSET DA T A2 CALL SUBA ;减法运算减法运算 MOV SI,OFFSET DA T A1 MOV BX,05 ;显示结果显示结果 CALL DISPL MOV DL,0DH MOV AH,02H INT 21H MOV DL,0AH MOV AH,02H 显示减数和被减数被减数和减数转换成十六进制数设 置 计 数 值 消除最低进位数 开 始制进位减 结果送被减数区调整偏移量 计数值-1=10 结果转换成ASCII 码字符串显示结果 结果INT 21H INT 21H MOV AX,4C00H INT 21H DISPL PROC NEAR ;显示子功能显示子功能DSI: MOV AH,02 MOV DL,[SI+BX-1] ;显示字符串中一字符显示字符串中一字符INT 21H DEC BX ;修改偏移量修改偏移量JNZ DSI RET DISPL ENDP SUBA PROC NEAR MOV DX,SI MOV BP,DI MOV BX,05 SU1: SUB BYTE PTR[SI+BX-1],30H SUB BYTE PTR[DI+BX-1],30H DEC BX ;将ASCII 码表示的数字串码表示的数字串 JNZ SU1 ;转化为十六进制的数字串转化为十六进制的数字串 MOV SI,DX MOV DI,BP MOV CX,05 ;包括进位,共5位CLC ;清进单位清进单位SU2: MOV AL,[SI] MOV BL,[DI] SBB AL,BL ;带进位相减带进位相减AAS ;非组合BCD码的减法调整码的减法调整 MOV [SI],AL ;结果送被减数区结果送被减数区 INC SI INC DI ;指向下一位指向下一位LOOP SU2 ;循环循环MOV SI,DX MOV DI,BP MOV BX,05 SU3: ADD BYTE PTR [SI+BX-1],30H ADD BYTE PTR [DI+BX-1],30H DEC BX ;十六进制的数字串转化ASCII码表示的数字串码表示的数字串 JNZ SU3 RET SUBA ENDP CODE ENDS END ST ART实验二 两个数相乘的实验一、实验要求:实现十进制数的乘法,实现十进制数的乘法,被乘数和乘数均以被乘数和乘数均以ASCII 码形式存放在内存中,码形式存放在内存中,算式结果在屏幕上显算式结果在屏幕上显示出来。
微机原理实例程序
《微机原理》学习实例程序〔非原创,为收集的,都通过了实物测试〕2011-7,RTX数字录音机一、实验目的1、了解数字录音技术的基本原理。
2、进一步掌握A/D转换器与D/A转换器的使用方法。
二、实验内容1、按图41连接电路,将声传感器接J2,把代表语音的电信号送给ADC0809通道2(IN2);D/A转换器的输出端通过K8跳线接喇叭。
2、编程,以每秒钟5000次的速率采集IN2输入的语音数据并存入内存,共采集60000个数据(录12秒),然后再以同样的速率将数据送DAC0832使喇叭发声(放音)。
三、实验提示1、将8253设置成方式0,计数200个,(定时0.2ms),利用PA0查询OUT0电平,若高电平表示定时时间到。
2、ADC0809通道2(IN2)的口地址为298Hdata segmentioport equ 01400h-0280hluport equ ioport+29ah ;录音口地址fangport equ ioport+290h ;放音口地址io8253a equ ioport+283hio8253b equ ioport+280hio8255c equ ioport+28bhio8255d equ ioport+288hdata_qu db 60000 dup(?) ;录音数据存放数据区news_1 db 'Press any key to record:',24h ;录音提示news_2 db 0dh,0ah,' Playing:',24h ;放音提示data endscode segmentassume cs:code,ds:data,es:databegin: mov ax,data ;初始化mov ds,axmov es,axmov dx,offset news_1 ;显示录音提示mov ah,9int 21htest_1: mov ah,1 ;等待键盘输入int 16hjz test_1 ;若不是则循环等待call lu ;调用录音子程序mov dx,offset news_2 ;显示放音提示mov ah,9int 21hfy: call fang ;调用放音子程序mov ax,0c07hint 21hcmp al,20hjz fymov ah,4ch ;返回DOSint 21hlu proc near ;录音子程序mov di,offset data_qu ;置数据区首地址为DImov cx,60000 ;录60000个数据cldxunhuan: mov dx,luport ;启动A/Dout dx,alcall delay ;延时in al,dx ;从A/D读数据到ALstosb ;存入数据区,使DI加1loop xunhuan ;循环ret ;子程序返回lu endpfang proc near ;放音子程序mov cx,60000 ;放60000个数据mov si,offset data_qu ;置数据区首地址为SIcldfang_yin: mov dx,fangportlodsb ;从数据区取出数据sub al,30hout dx,al ;放音call delay ;延时loop fang_yin ;循环ret ;子程序返回fang endpdelay proc n ear ;延时子程序push dxmov al,10h ;设8253通道0工作方式0mov dx,io8253aout dx,almov al,200 ;写入计数器初值200mov dx,io8253bout dx,almov dx,io8255c ;设8255的A口为输入mov al,9bhout dx,almov dx,io8255d ;从8255的A口输入delay1: in al,dxand al,1 ;判断PA0是否为1jz delay1 ;若PA0不为1,转de_laypop dxret ;子程序返回delay endpcode endsend begin数模转换器正弦波一、实验目的了解数/模转换器的基本原理,掌握DAC0832芯片的使用方法。
【微机原理】汇编程序设计实验一
微机原理及应用实验
实验一算术运算及分支程序设计
一、实验目的
1、熟悉汇编程序调试过程
2、掌握算术运算指令运用
3、掌握分支程序的编程和调试方法
二、实验设备
80X86微型计算机
三、实验内容
1、编程并调试显示“Hello Word!”字符串的汇编程序
2、A、B、C、D、W是互不相等的在数据段中定义的16位有符号数,并假设加减运算不产生溢出。
编写一个完整段定义的汇编语言程序,计算W=(A+B)×
1
(C—D)。
3、设X、Y为在数据段中定义的有符号字变量。
编写一个完整段定义的汇编语言程序(包含必要的伪指令,给出必要的注释)完成以下操作:若0<X且Y<1000,则AX=2000,BX=0;否则AX=0,BX=2000。
2。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
jmp $
code ends
end start
(2)2.将给定的一个BCD数,将其转换成ASCII值:
将AX拆为两个ASCII码,并存入result开始的两个单元
data segment
result db 2 dup(?)
begin:out dx,al
delay:loop delay
mov cx,20000
rol al,01
jmp begin
code ends
end start
实验三8253
(1)1.利用8088/8086外接8253可编程定时器/计数器,可以实现对外部事件进行计数:
ror al,1;
call delay
jmp begin
delay proc near
push cx;
mov cx,0;
loop $;
pop cx;
ret
delay endp;
code ends;
end start;
实验六0809
code segment
assume cs:code
out dx,al;数据输出
delay proc near
push cx
mov cx,100
loop $
pop cx
ret
delay endp
code ends
end start
(2)code segment
实验一
(1)1.将给定的一个二进制数,转换成二-十进制(BCD)码:
要求将AX拆为三个BCD码,并存入result开始的三个单元。
data segment
result ent
assume cs:code,ds:data
start:mov ax,data
(2)74273。用74LS273作为输出口,控制八个LED灯循环左移点亮。
data segment
result db 3 dup(?)
data ends
code segment
assume cs:code
start:mov dx,200h
mov cx,20000
mov al,0FEh
mov dx,8003h
out dx,al
mov al,5
mov dx,8000h
out dx,al
mov al,0
out dx,al
code ends
end start
(2)应用8253定时器来实现小灯每一秒钟输出状态发生一次反转。
delay proc near
push cx
mov cx,100
loop $
pop cx
cx
ret
delay endp
code ends
end start
(1)code segment
assume cs:code
in al,8000h
mov bl,al
in al,8000h
mov bh,al
jmp again
code ends
end start
code segment
assume cs:code
start:proc near
mov al,00110000B
ASCIIab:
db"0123456789ABCDEF"
data ends
code segment
assume cs:code,ds:data
start:mov ax,data
mov ds,ax
mov ax,23h
mov bl,al
mov [bx],ax;送IP
mov ax,seg 中断向量程序名
mov [bx+2],ax;送CS
data segment
second db 0;秒从0开始
minute db 0;分从0开始
hour db 0;时从0开始
LEDBUF db 6 dup(?)
start:mov al,10000000B;A口输出,方式0
mov dx,9003H
out dx,al;初始化
;mov al,0
;mov dx,8000H
;out dx,al;启动
;call delay
next: mov al,00H
要求计数5个外部脉冲后,小灯亮。
code segment
assume cs:code
start:mov al,00010000B
out 8000h,al
mov al,5
out 8000h,al
again:mov al,00000000B
out 8000h,al
(2)2.利用8255PA口输出控制8个小灯循环右移点亮。
code segment
assume cs:code;
start:call delay
mov dx,8003h;
mov al,80h;
out dx,al;
mov al,01h;;
begin:mov dx,8000h;
out dx,al;
mov al,ICW4
out dx,al;写入4号命令字
mov al,OCW1
out dx,al;送OCW1
mov ax,0;设置中断向量表
mov ds,ax
mov bx,4*ICW2
mov ax,offset 中断向量程序名
mov dx,8000H
next:out dx,al;cs=0
inc al
call delay
jmp next
mov dx,8000H
in al,dx;数据读入
mov dx,9000H
out dx,al;数据输出
c1 equ 08003h
c2 equ 08000h
c3 equ 08001h
c4 equ 08002h
code segment
assume cs:code
start:proc near
mov al,36h
mov dx,c1
out dx,al
assume cs:code
start:mov al,10000000B;A口输出,方式0
mov dx,9003H
out dx,al;初始化
next: mov al,0
mov dx,8000H
out dx,al;启动
call delay
mov dx,c3
out dx,al
mov al,ah
out dx,al
jmp $
code ends
end start
实验四8255
(1)利用8255可编程并行口芯片,实现输入/输出实验,实验中用PB口输入开关状态, 用8255PA口作输出,控制小灯亮灭反映开关状态。
mov dx,8000H
out dx,al;启动
call delay
INC al
;call delay
jmp next
mov dx,8000H
in al,dx;数据读入
mov dx,9000H
code segment
assume cs:code
start:mov al,83h
mov dx,8003h
out dx,al
begin:mov dx,8001h
in al,dx
mov dx,8000h
out dx,al
jmp begin
code ends
end start
mov dx,8000H
in al,dx;数据读入
mov dx,9000H
out dx,al;数据输出
jmp next
delay proc near
push cx
mov cx,100
loop $
pop cx
outbit equ 8002h
outseg equ 8004h
mov dx,CS8259A
mov al,ICW1;数据放到al
out dx,al;送数据
mov dx,CS8259B
mov al,ICW2
out dx,al;送2号命令字
start:mov al,10100000B;A口输出,方式1
mov dx,9003H
out dx,al;初始化
mov al,0
mov dx,8000H
out dx,al;启动
call delay
mov al,0
mov ds,ax
mov ax,345
mov cl,100
div cl
mov result,al
mov al,ah
mov ah,0
mov cl,10
div cl
mov result+1,al
mov ax,1000
mov dx,c2
out dx,al
mov al,ah
out dx,al
mov al,76h
mov dx,c2
out dx,al
mov ax,2000
LEDMAP db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h