微机原理实验 源程序
- 格式:doc
- 大小:2.40 MB
- 文档页数:45
实验一汇编语言的编译、链接和调试一、实验目的1、学会使用masm对汇编源程序进行编译、链接、调试、运行。
2、掌握汇编语言的程序格式。
3、巩固所学的汇编语言指令。
二、实验环境1、硬件:PC 微机2、软件:宏汇编MASM 软件三、实验原理1、汇编语言程序的上机与处理过程2、汇编语言的程序格式(1)汇编程序一般由若干段组成,每个段都有一个名字,以SEGMENT作为段的开始,以ENDS作为段的结束,这两者前要冠以相同的名字作为段名。
(2)代码段和堆栈段必不可少,数据段和附加段可根据需要设置。
堆栈段的SEGMENT之后有关键字STACK。
代码段中有伪指令ASSUME告诉汇编程序,在各种指令执行时所要访问的各段寄存器将分别对应哪一段。
(3)源程序的每一段是由若干行汇编语句组成,每一行只有一条语句,且不能超过128个字符,但一条语句允许有后续行,最后均以回车结束。
(4)整个源程序必须以END语句结束,它通知汇编程序停止汇编。
四、实验内容进入DOS环境中相应的目录下。
如汇编软件的文件来为:D:\MASM,则对应的操作为(1)选择windows的“开始”→“程序”→“附件”→“命令提示符”(2)在DOS命令提示符下输入如下命令(其中带下划线部分为输入内容)。
C:\Documents and Settings\new>D:D:\>CD MASMD:\MASM>EDIT TEXT.ASM进入编辑程序,在其环境下输入编好的源程序,然后在盘上生成一个扩展名为.asm的文件。
程序示例DATA SEGMENTDA1 DB 10H,20H,30H,40HDA2 DB 0F0H,0B0H,0A0H,90HDA3 DB 00H,00H,00H,00HDATA ENDSSTACK1 SEGMENT PARA STACKDB 10 DUP(?)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1START: MOV AX,DATAMOV DS,AXMOV AL,[DA1]ADD AL,[DA2]MOV [DA3],ALMOV AL,[DA1+1]ADC AL,[DA2+1]MOV [DA3+1],ALMOV AL,[DA1+2]ADC AL,[DA2+2]MOV [DA3+2],ALMOV AL,[DA1+3]ADC AL,[DA2+3]MOV [DA3+3],ALCODE ENDSEND START3. 用宏汇编程序MASM,将扩展名为.ASM的源程序汇编成目标程序,即生成盘上扩展名为.OBJ的文件。
实验一 DOS命令与汇编源程序输入、汇编、连接、运行一、实验目的掌握在计算机上运行汇编语言程序的整个操作过程。
学会将自己编制的汇编语言源程序用EDIT编辑程序输入计算机并存盘;学会用MASM 宏汇编程序对汇编语言源程序进行汇编形成二进制目标文件;学会用LINK连接程序对二进制目标文件连接形成可执行文件;学会运行经汇编和连接后形成的可执行文件;学会用DEBUG调试程序运行和调试可执行文件。
二、实验设备1、PC系列不低于80286档次的微型机;2、DOS3.3以上版本的操作系统;3、EDIT,MASM,LINK,DEBUG执行程序。
三、实验步骤1、用EDIT编辑汇编源程序(1)MS-DOS Editor的启动与退出Editor是在DOS系统提示符下启动,其命令格式为:C:EDIT [Path] [filename]在编辑完成后,选择屏幕菜单的File命令(按“ALT+F”键)中的Exit项即可退出Editor。
(2)建立文本文件在MS-DOS Editor的屏幕菜单栏中File命令就是对文本文件的建立、存储和打印的操作。
A.建立文件(New)打开屏幕菜单栏中File下拉菜单,选择New项。
B.编辑文件将写好的汇编语言源程序输入到编辑文本区。
输入时,一行结束后按回车键(Enter)换行。
C.保存文件(Save)打开屏幕菜单栏中File下拉菜单,选择Save项在弹出的对话框中键入文件名。
如果要把文件保存到非默认路径下,则在键入文件名的同时键入路径。
D.打开文件(Open)打开屏幕菜单栏中File下拉菜单,选择Open项。
该窗口中有三个区可以选择要打开的文件:文件名区:可以直接键入要打开的文件名;文件表区:文件表中列出要打开的所有文件名,供用户选择;目录/磁盘区:键入的文件名是哪个磁盘目录中的,在该区中选择。
在Open对话框中用“Tab”或“Shift+Tab”键选择各区。
选完后按“OK”确定。
2.MASM宏汇编程序的使用方法(1)命令格式和功能命令格式:MASM文件名功能:对汇编语言源程序进行汇编形成二进制目标文件(2)操作过程在DOS下,将目录切换到汇编语言所在目录下,然后调入MASM宏汇编程序。
实验一上机练习实验目的:1、掌握用编辑软件编辑程序文本的方法。
在DOS环境下,熟练掌握用MASM5.0宏汇编程序对ASM文件进行编译、连接等操作步骤。
2、熟悉用DEBUG调试程序。
实验要求:选取教科书中一典型例题,用编辑软件在PC机中形成ASM文件,然后编译、连接,生成目标文件和可执行文件。
再用DEBUG程序进行调试。
实验步骤:实验程序如下:data segmentary1 db 12,34,45,56,67,78,89,90,18cont1 equ $-ary1 ;ary1的长度sum1 dw ?ary2 db 13h,24h,57h,68h,9ah,0bch,0cdh,0deh,80h,50hcont2 equ $-ary2sum2 dw ?data endscode segmentassume cs:code, ds:datastart: mov ax,datamov ds,axlea si,ary1mov cx,cont1 ;设定循环次数为ary1的个数call sumlea si,ary2mov cx,cont2call summov ah,4ch ;结束程序功能调用4CHint 21hsum proc ;求和程序段,求该段所有数之和xor ax,ax ;ax清零为下面加法准备next1: add al,[si]adc ah,0inc siloop next1mov [si],axret ;返回调用程序sum endp ;程序段结束code endsend start点击“运行”点击“编译成目标文件”,编译成功后,再“运行”=〉“生成可执行文件”,然后运行,即可。
运行成功以后,可进行调试。
点击工具栏的调试按钮,出现调试框。
其命令如下:输入a,进行逐行汇编,输入c,比较两内存块,输入d,内存信息以16进制显示;输入e,修改内存指定的字节;输入f,可以预置一段内存;输入g,执行程序;输入h,制算术运算;输入i,从指定端口地址输入;输入l,读盘;输入m,内存块传送;输入n,置文件名;输入o,从指定端口地址输出;输入q,结束DEBUG调试;输入r,显示和修改寄存器;输入s,查找字节串;输入t,跟踪执行;输入u,反汇编;输入w,存盘操作。
软件实验报告软件实验一一、实验目的1.熟悉软件实验的基本步骤和汇编程序的调试方法;2.了解内存块的移动方法;3.了解将十六进制数转换成ASCII值的方法。
二、实验原理用MOV和MOVX指令可以进行数据的赋值和移动,用循环可以完成大量数据的复制。
三、实验内容及步骤1、软件设置为模拟调试状态,在所建的Project文件中添加例程1的源程序进行编译,编译无误后,可以选择单步或跟踪执行方式或全速运行程序。
打开CPU窗口,观察CPU窗口各寄存器的变化。
打开View菜单中的Memory Window,可以观察内部RAM、外部RAM的数据和程序存储器中的程序。
在Address窗口输入X:8000H后回车,观察8000H-800FF起始的256个字节单元的内容。
2、新建一个Project文件,添加例程2的源程序进行编译,编译无误后,可以选择单步或跟踪执行方式或全速运行程序。
打开View菜单中的Memory Window,在Address 窗口的Memory#1输入X:3000H后回车,点击运行按钮后, 在Memory#2输入X:4000H后回车,观察外部RAM3000H和4000H中的内容。
3、添加将片内30H-3FH单元的内容复制片外片外1030H~103FH中的源程序,编译运行,观察比较30-3FH单元中的内容和片外1030H-103FH中的内容。
4、添加将30H、31H单元中的十六进制数,转换成ASCII码,存放到40H开始的4个单元中的源程序,编译运行,观察结果。
5、添加求内部RAM 30H—37H单元中8个无符号数的算术和的源程序,8个无符号数设定为25H,36H,4AH,65H,7FH,82H,9BH,1DH,观察39H,38H中的数字是否分别为02H,C3H。
四、实验结果1.步骤1的结果为8000H-80FFH的内容都为1.2.步骤2的结果为3000H起始的256个字节存储块与4000H起始的256个字节存储块各单元内数据对应相同。
《微机原理》上机实验第一次实验内容一、8086宏汇编系统盘构成1. masm.exe 宏汇编系统程序把汇编语言源程序(.asm)汇编成目标文件(.obj)2. link.exe 连接程序把目标文件(.obj)连接生成执行文件(.exe)3. cref.exe 索引程序4.Lib.exe 库管理程序5. 汇编源程序编辑工具。
二、8086宏汇编上机实验步骤第一步:编辑源程序(程序名.asm)Edit 程序名.asm(Alt+F 选择存盘)第二步:对源程序(.asm)进行汇编masm 程序名(提示两个0 ,表示源程序,程序名.asm编辑正确,否则需进入第一步,修改源程序)第三步:对目标文(.obj)件进行连接Link 程序名第四步:运行执行文件,查看结果程序名三、实验实例1、利用8086宏汇编语言,编程在屏幕上显示“Hello!”程序清单:Data segmentA db ‘Hello!$’Data endsCode segmentAssume cs:code,ds:dataStart:mov ax,dataMov ds,axLea dx, aMov ah,9Int 21hMov ah,4chInt 21hCode endsEnd start三、DEBUG上机1. DEBUG常用命令如何启动DEBUG?在DOS提示符下,输入命令DEBUG 回车出现_ 提示符,所有的DEBUG命令在_提示符下进行。
(1)汇编命令格式:A [地址](2)退出DEBUG命令格式:Q(3)文件命名格式:N 文件名(4)显示寄存器内容格式:R [寄存器名](5)写盘命令格式:W(6)运行命令格式:G(7)单步执行命令格式:T(8)反汇编命令格式:U实验二:利用DEBUG编程计算5+3,并显示结果。
程序指令清单Mov al, 5 Add al, 3 Mov dl, al Or dl,30 Mov ah,2 Int 21 Mov ah,4c Int 21《微机原理》实验3一、实验目的:通过本节课实验,使学生掌握DOS中断调用的格式以及DOS常用中断调用;掌握宏指令的定义及调用格式;掌握8086模块程序的定义及调用格式、对段间模块程序调用进行汇编的命令格式;掌握程序正常结束返回DOS的两种方法。
第四章 软件实验部分实验一 两个多位十进制数相减实验一、实验要求:将两个多位十进制数相减,要求被减数,减数均以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 码形式存放在内存中,码形式存放在内存中,算式结果在屏幕上显算式结果在屏幕上显示出来。
实验一显示程序[实验目的]1.掌握汇编语言程序上机的实验过程2.掌握显示程序的基本设计方法。
[实验原理]汇编语言上机过程1、建立汇编源程序(建立文件名.asm)(1)通过MD-DOS自带的EDIT.EXE文本编辑器进行输入和其它的文本编辑器进行录入、编辑,如可用c语言和pascal语言的文本编辑器来编辑,最后将文件存为filename.asm的形式即可。
2、编译目标文件(即:编译为.obj .lst .crf文件)将正确的源代码编译为机器语言、程序清单及交叉引用表的目标文件。
如果此时程序有语句错误,系统将报错,并指出在第几行,什么类型的错误,可根据提示去逐一修改。
3、连接为可执行文件(即:连接为.exe 或.com文件)在DOS提示符下: LINK filename 回车4、运行编译好的可执行文件当4通过后,会产生一个可执行文件,这时只需运行这个程序,看它是否按你所想象那样得出结果。
在试运行期间,要尽量试一些临界状态,看程序是否运行稳定、结果是否正确,进行5。
5、用调试工具调试,重新修改(逻辑错误)用DOS中自带的调试程序DEBUG.EXE来进行程序调试、检查错误。
6.有关显示DOS基本命令1)单个字符显示命令将要显示的字符的ASCII码送给DL寄存器中断功能号2送AH寄存器,中断类型21H.如显示“3” MOV DL,33H 或 MOV DL, ‘3’如显示‘A’ MOV AH,‘A’MOV AH,2 MOV AH,2 MOV AH,2INT 21H INT 21H INT 21H 2)字符串显示命令将要显示的字符串所在存储区的首地址送给DX寄存器中断功能号9送AH寄存器,中断类型21H.如显示字符串“HELLO”存储区定义为 T DB“HELLO”,10,13,24H LEA DX,TMOV AH,9[实验方法及步骤] INT 21H1、编写实验程序。
2、编译。
3、运行(单步,跟踪),检查结果。
信息与通信工程学院微机原理软件实验报告班级:姓名:学号:日期: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 SEGMENTA DB 20B DB 15Y DB 3 DUP(0)Z DB 0,0DAT ENDSSTA SEGMENT STACKDW 50 DUP(?)STA ENDSCOD SEGMENTASSUME CS:COD,DS:DATSTAR PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX,DATMOV DS,AXMOV AX,STAMOV SS,AXMOV AL,AMOV Z,ALMOV Z+1,ALCALL SUB1MOV AL,BMOV Z,ALMOV Z+1,ALCALL SUB1MOV AL,AMOV Z,ALMOV AL,BMOV Z+1,ALCALL SUB1ADD WORD PTR Y,AXADC BYTE PTR[Y+2],0RETSTAR ENDPSUB1 PROCMOV AL,ZMOV AH,Z+1MUL AHADD WORD PTR Y,AXADC BYTE PTR[Y+2],0RETSUB1 ENDPCOD ENDSEND STAR2.通过编译,连接形成可执行文件。
实验2—1(1)定义字DA TA SEGMENTA DW 855CHB DW 0AB43HNUM DW ?DA TA ENDSCODE SEGMENT Assume CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AXMOV AX,AMOV BX,BADD AX,BXMOV NUM,AXMOV AH,4CHINT 21HCODE ENDSEND START实验2—1直接寻址DA TA SEGMENTA DB 5CH,85HB DB 43H,0ABHNUM DW ?DA TA ENDSCODE SEGMENT Assume CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AXMOV AX,AMOV BX,BADD AX,BXMOV NUM,AXMOV AH,4CHINT 21HCODE ENDSEND START实验2—3拆字DA TA SEGMENTORG 1000HNUM DW 1234HORG 4000HA DB ?B DB ?DA TA ENDSCODE SEGMENTAssume CS:CODE,DS:DA TASTART:MOV AX,NUMMOV A,AHMOV B,ALMOV AH,4CHINT 21HCODE ENDSEND START实验3—3DA TA SEGMENTINFOR1 DB 0AH,0DH, 'Please Press any key to input a letter:$' ;0AH为换行,0DH为回车INFOR2 DB 0AH,0DH, 'You Input a lowercase letter! $'INFOR3 DB 0AH,0DH, 'You input a uppercase letter! $'INFOR4 DB 0AH,0DH, 'You input a digit! $'INFOR5 DB 0ah,0dh, 'You input other letter! $'DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV DX,OFFSET INFOR1MOV AH,09H ;输出字符串INFOR1;MOV AH,1INT 21HMOV AH,01H ;从键盘输入一个字符INT 21HCMP AL, '0'JB OTHER ;小于0,为其他字符CMP AL, '9'JBE DIGIT ;大于等于0,小于等于9,为数字CMP AL, 'A'JB OTHERCMP AL, 'Z'JBE UPPERCMP AL, 'a'JB OTHERCMP AL, 'z'JBE LOWERJMP PENDLOWER: MOV DX,OFFSET INFOR2 MOV AH,09HINT 21HJMP PENDUPPER: MOV DX,OFFSET INFOR3 MOV AH,09HINT 21HJMP PENDDIGIT: MOV DX,OFFSET INFOR4MOV AH,09HINT 21HJMP PENDOTHER: MOV DX,OFFSET INFOR5 MOV AH,09HINT 21HJMP PENDPEND: MOV AH,4CHINT 21HCODE ENDSEND START实验3—1DA TA SEGMENTSTRING DB 'I am a student'LEN EQU $-STRINGDA TA ENDSCODE SEGMENTAssume CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AXMOV BX,OFFSET STRINGMOV CL,LENNEXT:MOV AL,[BX]CMP AL,'a'JB LOPCMP AL,'z'JA LOPSUB AL,20HMOV [BX],ALLOP:INC BXDEC CLJNZ NEXTMOV AH,4CHINT 21HCODE ENDSEND START实验4—1DA TA SEGMENTA DB '1234567890'N EQU $-AB DB N DUP(?)DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA START:MOV AX,DATAMOV DS,AXMOV ES,AXLEA SI,ALEA DI,BADD DI,NMOV CX,NMOVE:MOV AL,[SI]MOV ES:[DI],ALINC SIDEC DILOOP MOVEMOV AH,4CHINT 21HCODE ENDSEND START实验4—2DA TA SEGMENTORG 1000HDB 100 DUP('A')ORG 1050HDB 100 DUP('B')DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATAMOV DS,AX;MOV ES,AXMOV SI,1000HMOV DI,1050HMOV CX,100AGAIN: MOV AL,[SI]MOV [DI],ALINC SIINC DILOOP AGAINMOV AH,4CHINT 21HCODE ENDSEND START实验4—3DA TA SEGMENTBUF DW 1,2,3,4,5,6,7,8,9,0MAX DW 0DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START: MOV AX,DATAMOV DS,AXMOV SI,OFFSET BUFMOV CX,10AGAIN: MOV AX,[SI]CMP AX,MAXJB NEXTMOV MAX,AXNEXT: INC SIINC SILOOP AGAINMOV AH,4CHINT 21HCODE ENDSEND START实验6—1DA TA SEGMENTSTR DB 'Please input a character:$'STR1 DB 0ah,0dhSTR3 DB ?,'H$'DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART:MOV AX,DATAMOV DS,AXMOV DX,OFFSET STRMOV AH,09HINT 21HMOV AH,01HINT 21HMOV STR1,ALMOV DX,OFFSET STR1MOV AH,09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START实验6—2DA TA SEGMENTSTR1 DB 0dh,0ah,'Please input a character:$'STR2 DB 0dh,0ah,'You input a number!$'STR3 DB 0dh,0ah,'The character you input is not a number!$' DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART:MOV AX,DATAMOV DS,AXMOV DX,OFFSET STR1MOV AH,09HMOV AH,01HINT 21HCMP AL,30HJB NEXT1CMP AL,39HJA NEXT1MOV DX,OFFSET STR2MOV AH,09HINT 21HJMP NEXT2NEXT1:MOV DX,OFFSET STR3 MOV AH,09HINT 21HNEXT2:MOV AH,4CHINT 21HCODE ENDSEND START实验6—3DA TA SEGMENTinfo1 db 0dh,0ah, 'input string:$' info2 db 0dh,0ah, 'output string:$' STR DB 20 DUP(?)DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA START:MOV AX,DATAMOV DS,AXMOV DX,OFFSET STRADD SI,10MOV [SI],BYTE PTR '$'MOV DX,OFFSET info1MOV AH,09HINT 21HMOV CX,10AGAIN:MOV AH,01HINT 21HDEC SIMOV [SI],ALLOOP AGAINMOV DX,OFFSET STRMOV AH,09HMOV AH,01HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START实验6—1;输入字符后回车CODE SEGMENTASSUME CS:CODE,DS:CODE START:MOV AX,CODEMOV DS,AXMOV AH,01HINT 21HMOV DL,0AHINT 21HPUSH AXAND AX,00FFHMOV CL,4SHR AL,CLADD AL,30HMOV DL,ALMOV AH,02HINT 21HPOP AXAND AL,0FHCMP AL,0AHJNC NEXTADD AL,30HJMP finalNEXT:ADD AL,37Hfinal:MOV DL,ALMOV AH,02HINT 21HMOV DL,'H'INT 21HMOV AH,4CHINT 21HCODE ENDSEND START实验6—3DATA SEGMENTinfo1 DB 0dh,0ah,'input string:$' info2 DB 0dh,0ah,'output string:$' STR DB 0Bh,0,20 dup(?)n EQU $-STRDB '$'DATA ENDSCODE SEGMENTASSUME cs:code,ds:data START:mov ax,DATAmov DS,axlea DX,info1mov AH,09HINT 21Hlea DX,STRmov AH,0AHINT 21HMOV CX,0lea SI,STRmov DI,SIadd DI,n-1INC SIINC SInumber:MOV BL,[SI]CMP BL,0DHJZ NEXTINC CXINC SIJMP numberNEXT:lea SI,STRINC SIINC SIagain:mov bl,[SI]mov [DI],blINC SIDEC DIloop againlea DX,info2mov AH,09HINT 21HINC DImov DX,DImov AH,09HINT 21Hmov AH,4chINT 21h CODE endsend startcode segment assume cs:code start:mov ah,1int 21hcmp al,1bhjz tjmov bl,almov ch,2rotate:mov cl,4rol bl,clmov al,bland al,0fhadd al,30hcmp al,3ahjl printitadd al,7hprintit:mov dl,almov ah,2int 21hdec chjnz rotatejmp starttj:mov ax,4c00hint 21hcode endsend start。
T1a.asm;4000H起256个字节清0Block equ 4000hmov dptr, #Block ; 起始地址mov r0, #0 ; 清 256 字节clr aLoop: movx @dptr, ainc dptr ; 指向下一个地址 djnz r0, Loop ; 记数减一ljmp $endT1a.c;4000H起256个字节清0xdata unsigned char Buffer[256] _at_ 0x4000; void main(){unsigned int index;unsigned char xdata * ptr;ptr = &Buffer; // 起始地址for (index = 0; index <= 255; index++) {*ptr++ = 0; // 清0, 地址加一}}T1b.asm;3000H起长度256字节的存储块移到4000Hmov r0, #30hmov r1, #00hmov r2, #40hmov r3, #00hmov r7, #0Loop: mov dph, r0mov dpl, r1movx a, @dptrmov dph, r2mov dpl, r3movx @dptr, acjne r1, #0ffh, Goon1inc r0Goon1: inc r1cjne r3, #0ffh, Goon2inc r2Goon2:inc r3djnz r7, Loopljmp $endT1b.c;3000H起长度256字节的存储块移到4000Hxdata unsigned char Buffer1[256] _at_ 0x3000;xdata unsigned char Buffer2[256] _at_ 0x4000;void main(){unsigned int index;unsigned char xdata * ptr1;unsigned char xdata * ptr2;ptr1 = &Buffer1;ptr2 = &Buffer2;for (index=0; index <= 255; index++) {*ptr2++ = *ptr1++;}}T2.ASM 8255输入输出实验mode equ 082h ; 方式0,PA,PC输出,PB输入1000,0010 PortA equ 8000h ; Port APortB equ 8001h ; Port BPortC equ 8002h ; Port CCAddr equ 8003h ; 控制字地址org 0hmov a, #modemov dptr, #CAddrmovx @dptr,a ; 输出控制字;实验1:PA口作输出,驱动LED,实现单个LED循环点亮。
西华大学实验报告西华大学实验报告(理工类)开课学院及实验室:电气信息学院6A-217 实验时间:年月日装订线五、实验过程记录(数据、图表、计算等) assume ds:data,cs:code,es:datadata segmentbuffer1 db 1,2,3,4,5 ;定义字节buffer2 db 6,7,8,9,0 ;定义字节buffer3 db 100 dup(?) ;定义字节data endscode segmentmain proc farbegin:push dsmov ax,0000hpush axmov ax,datamov ds,ax ;初始化mov es,axlea si,buffer1 ;将buffer1的地址送给si lea bx,buffer2 ; 将buffer2的地址送给bx add bx,4 ;bx+4code segmentmainproc farassume cs:codego:mov si,300h ;将300h给simov di,400h ;将400h给dimov cx,50 ;将50给cxnext:mov al,[si] ;将[ds]:[si]处内存给al mov [di],al ;将al送到ds:[di]处inc di ;di+1dec cx ;cx-1jnz next ;cx不到0,跳到nextmov si,300h ;再将si给300hmov cx,50 ;cx赋予50cld ;清除方向标志位next1:lodsb ;将si处内存读到almov bl,al ;将al复制到blpush cx ;cx入栈lea di,buffer3 ;将buffer2的地址送给bxmov cx,5 ;循环次数m:mov al,[si] ;将ds:[buffer1]处的值给aladd al,[bx] ;al=al+ds:[buffer2+4]mov [di],al ;将al送给ds[buffer3]处inc si ;si+1dec bx ;bx-1inc di ;di+1dec cx ;cx-1jnz m ;cx>=0 则在m处循环mov ah,4c ;结束int 21hretmain endpcode endsend beginendinc si ;si+1mov cl,4 ;给cl赋4ror al,cl ;al循环右移4位pop cx ;cx出栈call disp ;调用disp子程序mov al,bl ;再将bl给alcall disp ;再次调用dispmov dl,' ' ;给dl赋予‘’mov ah,02 ;ah赋予02int 21h ;调用中断,显示字符loop next1 ;循环50次mov ah,4ch ;ah赋予4chint 21h ;调用中断,结束ret ;子程序返回main endp六、实验结果分析及问题讨论disp procand al,0fh ;屏蔽高4位cmp al,09h ;将al与9比较ja asc ;大于9跳到ascor al,30h ;小于9,加30hjmp do0 ;跳到doasc:add al,'A'-0ah ;al加‘a’到10的ASCII do0:mov dl,al ;将al送到dlmov ah,02 ;ah赋予02int 21h ;调用中断,显示字符ret ;子程序返回disp endpcode endsend go。
实验题目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.实验设备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单元开始的数据区中。
题目一实验二交通灯控制实验特别贡献bjtu一、实验目的通过并行接口8255实现十字路口交通灯的模拟控制,进一步掌握对并行口的使用。
二、实验内容如图5-3,L7、L6、L5作为南北路口的交通灯与PC7、PC6、PC5相连,L2、L1、L0作为东西路口的交通灯与PC2、PC1、PC0相连。
编程使六个灯按交通灯变化规律燃灭。
8255控制寄存器端口地址 28BH A口的地址 288H C口的地址 28AH2、十字路口交通灯的变化规律要求:(1)南北路口的绿灯、东西路口的红灯同时亮3秒左右。
(2)南北路口的黄灯闪烁若干次,同时东西路口的红灯继续亮。
(3)南北路口的红灯、东西路口的绿灯同时亮3秒左右。
(4)南北路口的红灯继续亮、同时东西路口的黄灯亮闪烁若干次。
(5)转(1)重复。
三、参考流程图设置8255A口输出C口输出开始南北路口黄灯闪,东西路口红灯亮南北路口绿灯亮,东西路口红灯亮长延时南北路口红灯亮,东西路口绿灯亮长延时是否有键按下NY返回DOS南北路口红灯亮,东西路口黄灯闪四、源程序及注释;微机原理与接口技术实验,题目一,交通灯控制台DATA SEGMENT ;数据段IOPORT EQU 0C400H-0280H ;使用动态分配的io基地址代替0C400HIO8255 EQU IOPORT+028BH ;寄存器IO8255C EQU IOPORT+028AH ;8255的c口DATA ENDSEXTRA SEGMENT ;附加段EXTRA ENDSSTACK1 SEGMENT PARA STACK ;堆栈段STACK1 ENDSCODE SEGMENT ;代码程序段ASSUME CS:CODE,DS:DATA,SS:STACK1,ES:EXTRA;设置为高电平LED亮灯START: MOV AX,DATAMOV DS,AXMOV AL,80HMOV DX,IO8255OUT DX,AL ;设置8255LOP:MOV DX,IO8255CMOV AL,00100100BOUT DX,AL ;(1)南北路口的绿灯、东西路口的红灯同时亮3秒左右。
实验2—1(1)定义字DA TA SEGMENTA DW 855CHB DW 0AB43HNUM DW ?DA TA ENDSCODE SEGMENT Assume CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AXMOV AX,AMOV BX,BADD AX,BXMOV NUM,AXMOV AH,4CHINT 21HCODE ENDSEND START实验2—1直接寻址DA TA SEGMENTA DB 5CH,85HB DB 43H,0ABHNUM DW ?DA TA ENDSCODE SEGMENT Assume CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AXMOV AX,AMOV BX,BADD AX,BXMOV NUM,AXMOV AH,4CHINT 21HCODE ENDSEND START实验2—3拆字DA TA SEGMENTORG 1000HNUM DW 1234HORG 4000HA DB ?B DB ?DA TA ENDSCODE SEGMENTAssume CS:CODE,DS:DA TASTART:MOV AX,NUMMOV A,AHMOV B,ALMOV AH,4CHINT 21HCODE ENDSEND START实验3—3DA TA SEGMENTINFOR1 DB 0AH,0DH, 'Please Press any key to input a letter:$' ;0AH为换行,0DH为回车INFOR2 DB 0AH,0DH, 'You Input a lowercase letter! $'INFOR3 DB 0AH,0DH, 'You input a uppercase letter! $'INFOR4 DB 0AH,0DH, 'You input a digit! $'INFOR5 DB 0ah,0dh, 'You input other letter! $'DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV DX,OFFSET INFOR1MOV AH,09H ;输出字符串INFOR1;MOV AH,1INT 21HMOV AH,01H ;从键盘输入一个字符INT 21HCMP AL, '0'JB OTHER ;小于0,为其他字符CMP AL, '9'JBE DIGIT ;大于等于0,小于等于9,为数字CMP AL, 'A'JB OTHERCMP AL, 'Z'JBE UPPERCMP AL, 'a'JB OTHERCMP AL, 'z'JBE LOWERJMP PENDLOWER: MOV DX,OFFSET INFOR2 MOV AH,09HINT 21HJMP PENDUPPER: MOV DX,OFFSET INFOR3 MOV AH,09HINT 21HJMP PENDDIGIT: MOV DX,OFFSET INFOR4MOV AH,09HINT 21HJMP PENDOTHER: MOV DX,OFFSET INFOR5 MOV AH,09HINT 21HJMP PENDPEND: MOV AH,4CHINT 21HCODE ENDSEND START实验3—1DA TA SEGMENTSTRING DB 'I am a student'LEN EQU $-STRINGDA TA ENDSCODE SEGMENTAssume CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AXMOV BX,OFFSET STRINGMOV CL,LENNEXT:MOV AL,[BX]CMP AL,'a'JB LOPCMP AL,'z'JA LOPSUB AL,20HMOV [BX],ALLOP:INC BXDEC CLJNZ NEXTMOV AH,4CHINT 21HCODE ENDSEND START实验4—1DA TA SEGMENTA DB '1234567890'N EQU $-AB DB N DUP(?)DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA START:MOV AX,DATAMOV DS,AXMOV ES,AXLEA SI,ALEA DI,BADD DI,NMOV CX,NMOVE:MOV AL,[SI]MOV ES:[DI],ALINC SIDEC DILOOP MOVEMOV AH,4CHINT 21HCODE ENDSEND START实验4—2DA TA SEGMENTORG 1000HDB 100 DUP('A')ORG 1050HDB 100 DUP('B')DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATAMOV DS,AX;MOV ES,AXMOV SI,1000HMOV DI,1050HMOV CX,100AGAIN: MOV AL,[SI]MOV [DI],ALINC SIINC DILOOP AGAINMOV AH,4CHINT 21HCODE ENDSEND START实验4—3DA TA SEGMENTBUF DW 1,2,3,4,5,6,7,8,9,0MAX DW 0DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START: MOV AX,DATAMOV DS,AXMOV SI,OFFSET BUFMOV CX,10AGAIN: MOV AX,[SI]CMP AX,MAXJB NEXTMOV MAX,AXNEXT: INC SIINC SILOOP AGAINMOV AH,4CHINT 21HCODE ENDSEND START实验6—1DA TA SEGMENTSTR DB 'Please input a character:$'STR1 DB 0ah,0dhSTR3 DB ?,'H$'DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART:MOV AX,DATAMOV DS,AXMOV DX,OFFSET STRMOV AH,09HINT 21HMOV AH,01HINT 21HMOV STR1,ALMOV DX,OFFSET STR1MOV AH,09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START实验6—2DA TA SEGMENTSTR1 DB 0dh,0ah,'Please input a character:$'STR2 DB 0dh,0ah,'You input a number!$'STR3 DB 0dh,0ah,'The character you input is not a number!$' DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART:MOV AX,DATAMOV DS,AXMOV DX,OFFSET STR1MOV AH,09HMOV AH,01HINT 21HCMP AL,30HJB NEXT1CMP AL,39HJA NEXT1MOV DX,OFFSET STR2MOV AH,09HINT 21HJMP NEXT2NEXT1:MOV DX,OFFSET STR3 MOV AH,09HINT 21HNEXT2:MOV AH,4CHINT 21HCODE ENDSEND START实验6—3DA TA SEGMENTinfo1 db 0dh,0ah, 'input string:$' info2 db 0dh,0ah, 'output string:$' STR DB 20 DUP(?)DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA START:MOV AX,DATAMOV DS,AXMOV DX,OFFSET STRADD SI,10MOV [SI],BYTE PTR '$'MOV DX,OFFSET info1MOV AH,09HINT 21HMOV CX,10AGAIN:MOV AH,01HINT 21HDEC SIMOV [SI],ALLOOP AGAINMOV DX,OFFSET STRMOV AH,09HMOV AH,01HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START实验6—1;输入字符后回车CODE SEGMENTASSUME CS:CODE,DS:CODE START:MOV AX,CODEMOV DS,AXMOV AH,01HINT 21HMOV DL,0AHINT 21HPUSH AXAND AX,00FFHMOV CL,4SHR AL,CLADD AL,30HMOV DL,ALMOV AH,02HINT 21HPOP AXAND AL,0FHCMP AL,0AHJNC NEXTADD AL,30HJMP finalNEXT:ADD AL,37Hfinal:MOV DL,ALMOV AH,02HINT 21HMOV DL,'H'INT 21HMOV AH,4CHINT 21HCODE ENDSEND START实验6—3DATA SEGMENTinfo1 DB 0dh,0ah,'input string:$' info2 DB 0dh,0ah,'output string:$' STR DB 0Bh,0,20 dup(?)n EQU $-STRDB '$'DATA ENDSCODE SEGMENTASSUME cs:code,ds:data START:mov ax,DATAmov DS,axlea DX,info1mov AH,09HINT 21Hlea DX,STRmov AH,0AHINT 21HMOV CX,0lea SI,STRmov DI,SIadd DI,n-1INC SIINC SInumber:MOV BL,[SI]CMP BL,0DHJZ NEXTINC CXINC SIJMP numberNEXT:lea SI,STRINC SIINC SIagain:mov bl,[SI]mov [DI],blINC SIDEC DIloop againlea DX,info2mov AH,09HINT 21HINC DImov DX,DImov AH,09HINT 21Hmov AH,4chINT 21h CODE endsend startcode segment assume cs:code start:mov ah,1int 21hcmp al,1bhjz tjmov bl,almov ch,2rotate:mov cl,4rol bl,clmov al,bland al,0fhadd al,30hcmp al,3ahjl printitadd al,7hprintit:mov dl,almov ah,2int 21hdec chjnz rotatejmp starttj:mov ax,4c00hint 21hcode endsend start。
实验一汇编语言上机基本步骤一、实验目的:熟悉汇编语言的上机过程,掌握各项工具软件的使用方法二、实验环境:1.硬件:PC微机2.软件:DOS系统、EDIT.EXE、MASM.EXE、LINK.EXE、DEBUG.EXE三、实验内容:1.前期准备:在开始进行汇编语言上机练习之前,建立并进入自己的工作子目录,准备好相关工具软件如MASM.EXE、LINK.EXE等,其后所有工作均在自己的子目录中进行,以避免因路径概念不清而导致的文件存取错误,以及对系统其它部分造成影响。
1)建立自己的工作子目录(例如MYTEST):C:\>MD MYTEST2)进入自己的工作子目录:C:\>CD MYTEST3)将所需工具软件从其它地方(如C:\MASM)拷贝进自己的工作子目录:C:\MYTEST>COPY C:\MASM\MASM.EXEC:\MYTEST>COPY C:\MASM\LINK.EXE2.编写源程序:原则上可以用任何文字处理软件(如EDIT、写字板、甚至WORD)编写源程序,但必须注意,源程序应为ASCII码文件(或称纯文本文件),扩展名一般为.ASM。
因此,建议使用DOS环境下的EDIT软件。
1)在DOS系统操作提示符下键入EDIT并回车,即可进入EDIT文本编辑环境。
如果没有进入,检查当前路径下是否存在EDIT.EXE文件,以及文件是否完整等。
2)从键盘输入下列程序(不必输入注释部分):CODE SEGMENT;定义一个CODE段ASSUME CS:CODE;定义CODE段为代码段START:;可执行语句起始处MOV AH,02H ;以下三条语句将显示字母aMOV DL,’a’INT 21HMOV AH,4CH ;以下二条语句将返回DOSINT 21HCODE ENDS;CODE段结束END START;整个程序结束该程序的功能是仅在CRT屏上显示一个字母a,完成功能的只有其中的三条语句,但其它部分则是一个完整的汇编语言源程序必不可少的部分。
《微机原理及接口技术》实验指导书杨霞周林英编长安大学电子与控制工程学院2009年9月前言本实验指导是为适应各大、中专院校开设微机原理及应用方面的课程需做大量软硬件实验的需要而编写的,供学生编程用。
完成本实验指导中的实验,可使学生基本掌握8086/8088的结构原理、接口技术、程序设计技巧。
手册中详细叙述了各实验的目的、内容,列出了接线图、程序框图和实验步骤。
主要学习内容为80X86语言实验环境配置、汇编源语言格式、输出字符、循环结构、子程序调用,以及加减乘除等指令操作、通用接口芯片的接口编程与使用。
所有实验都是相互独立的,次序上也没有固定的先后关系,在使用本书进行教学时,教师可根据教学要求,选择相应实验。
学习结束后,要求学生能够独立编写出综合加减乘除等指令,以及循环结构、子程序调用等程序控制程序、看懂一般接口芯片电路图。
目录实验一清零程序 (4)实验二拆字程序 (6)实验三数据区移动 (8)实验四多分支程序设计 (10)实验五多字节减法运算 (13)实验六显示程序 (16)实验七 8251串口实验 (20)实验八步进电机控制 (26)附录一汇编语言的存储模型 (36)附录二 8279键值显示程序 (37)实验一清零程序一、实验目的掌握8088汇编语言程序设计和调试方法。
二、实验设备STAR系列实验仪一套、PC机一台。
三、实验内容把RAM区内4000H-40FFH单元的内容清零。
四、程序框图五、源程序清单.MODEL TINY.STACK 100.DATA.CODEORG 0100HSTART:MOV BX,4000HMOV AX,0000HMOV CX,80HL1: MOV [BX],AXINC BXINC BXLOOP L1JMP $END START六、实验步骤手动修改RAM区内4000H-40FFH的内容,连续或单步方式运行程序,检查4000-40FFH内容执行程序前后的变化。
七、思考1、把4000H-40FFH中的内容改成FF,如何修改程序。
2、把4000H-40FFH中的内容改成00~FF,如何修改程序。
实验二拆字程序一、实验目的掌握汇编语言设计和调试方法。
二、实验设备STAR系列实验仪一套、PC机一台。
三、实验内容把4000H单元的内容拆开,高位送4001H低位,低位送4002H低位,4001H、4002H 的高位清零,一般本程序用于把数据送显示缓冲区时用。
四、程序框图五、源程序.MODEL TINY.STACK.DATA.CODESTART:MOV BX,4000HMOV AL,[BX]MOV AH,ALMOV CL,4SHR AH,CLINC BXMOV [BX],AHAND AL,0FHINC BXMOV [BX],ALJMP $六、实验步骤手动修改4000H的内容,用连续或单步方式运行程序,检查4000H-4002H 中内容变化情况。
七、思考1.如何用断点方式调试本程序。
2.把4000H、4001H单元低位的内容合成一字送4002H单元。
实验三数据区移动一、实验目的掌握RAM中的数据操作。
二、实验设备STAR系列实验仪一套、PC机一台。
三、实验内容把4100H源RAM区首址内的16字节数据传送到4200H目标RAM区。
四、设计思想程序要求把内存中某一数据区(称为源数据块)传送到另一存储区(称为目的数据块)。
源数据块和目的数据块在存储器中可能有三种情况,如下图:对于两个数据块分离的情况,如图(a),数据的传送从数据块的首址开始,或者从数据块的末址开始均可。
但对于有部分重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭破坏。
可以得出以下结论:当源数据首址>目的块首址时,从数据块首址开始传送数据。
当源数据块首址<目的块首址时,从数据块末地址开始传送数据。
五、程序框图六、源程序清单.MODEL TINY.STACK.DATA.CODEORG 0100HSTART0:MOV CX,0010HMOV SI,4100HMOV DI,4200HCMP SI,DIJA A42ADD SI,CXADD DI,CXA41: DEC SIDEC DIMOV AL,[SI]MOV [DI],ALLOOP A41JMP $A42: MOV AL,[SI]MOV [DI],ALINC SIINC DILOOP A42JMP $END START0七、实验步骤调试运行3060程序,检查4100-410FH中内容是否和4200-420FH中内容完全一致。
八、思考1.把4200H源RAM区首址内的16字节数据传送到4100H目标RAM区。
2.把4100H源RAM区首址内的16字节数据传送到410AH目标RAM区。
实验四多分支程序设计一、实验目的掌握汇编语言的编程,熟悉程序散转的设计方法。
二、实验设备STAR系列实验仪一套、PC机一台。
三、实验内容编写程序,根据接收到的键值,作不同的处理。
四、设计思想多分支结构相当于一个多路开关,在程序设计中通常是根据某寄存器或某单元的内容进行程序转移。
在设计多分支转移程序时,如果分支太多,则平均转移速度太慢,本实验采用转移地址表实现多分支转移,可以提高平均转移速度。
五、程序框图散转程序流程框图六、实验步骤3、使用各种手段调试程序3、结果显示在G5区的数码管上七、源程序清单;调用GetKeyB返回键值,根据键值执行相应的程序.MODEL TINYEXTRN Display8:NEAR, GetKeyB:NEAR.STACK 100.DATABUFFER DB 8 DUP(?).CODESTART: MOV AX,@DATAMOV DS,AXMOV ES,AXNOPSTART1: CALL GetKeyB ;键值存放在AL中CMP AL,8JB START2XOR AL,AL ;大于7,作0处理START2: XOR AH,AHMOV BX,AXSHL BX,1LEA DI,Table_1JMP CS:[DI][BX]Table_1: DW Key0, Key1, Key2, Key3, Key4, Key5, Key6, Key7 Key0: MOV AL,1JMP KeyKey1: MOV AL,2JMP KeyKey2: MOV AL,3JMP KeyKey3: MOV AL,4JMP KeyKey4: MOV AL,5JMP KeyKey5: MOV AL,6JMP KeyKey6: MOV AL,7JMP KeyKey7: MOV AL,8JMP KeyKey: MOV CX,8LEA DI,BUFFERREP STOSBLEA SI,BUFFERCALL Display8MOV CX,60000LOOP $ ;延时JMP START1END START实验五多字节减法运算一、实验目的掌握BCD码、补码,熟悉多文件、多模块汇编语言程序设计的方法。
二、实验设备STAR系列实验仪一套、PC机一台。
三、实验内容从键盘上输入4位被减数、减数,实现双字节BCD码(四位数)的减法,结果显示在数码管上;进一步熟悉使用断点、单步进入、单步、运行到光标处、修改PC指针、全速运行等各种调试手段;熟悉查看特殊功能寄存器、CS段、DS段存贮器的各种方法。
四、程序框图双字节十进制减法程序框图五、实验步骤123、结果显示在G5区的数码管上六、源程序清单.MODEL TINYEXTRN Display8:NEAR, GetBCDKey:NEAREXTRN F1:BYTE.STACK 100.DATABUFFER DB 8 DUP(?)minuend DW 1 DUP(?) ;被减数subtrahend DW 1 DUP(?) ;减数.CODESTART:MOV AX,@DATAMOV DS,AXMOV ES,AXNOPMOV F1,0 ;先清除显示,再接收键输入START1:LEA DI,minuendMOV CX,4 ;按键次数CALL GetBCDKey ;得到双字节十进制数(被减数)MOV F1,1 ;接收到第一个键,才清除显示LEA DI,subtrahendMOV CX,4 ;按键次数CALL GetBCDKey ;得到双字节十进制数(减数)MOV AX,minuendMOV BX,subtrahendMOV DL,10HCMP AX,BXJNB START2XCHG AX,BXMOV DL,11H ;负数START2:SUB AL,BL ;低位DASXCHG AL,AHSBB AL,BH ;高位DASXCHG AL,AHCLDLEA DI,BUFFER ;存放显示结果CALL B1toB2 ;低位MOV AL,AHCALL B1toB2 ;高位MOV AL,10H ;最高三位消隐STOSBSTOSBSTOSBSTOSBLEA SI,BUFFER+3MOV CX,3CALL BlackDisplay ;将高位0消隐LEA SI,BUFFERCALL Display8JMP START1;将一个字节压缩BCD码转换成二个字节非压缩BCD码B1toB2PROC NEARPUSH AXAND AL,0FHSTOSBPOP AXAND AL,0F0HROR AL,4STOSBRETB1toB2ENDPBlackDisplay PROC NEAR ;将高位0消隐BlackDisplay1:MOV AL,[SI]CMP AL,0JNZ ExitMOV AL,10HMOV [SI],ALDEC SILOOP BlackDisplay1Exit:CLDMOV [SI+1],DLRETBlackDisplay ENDPEND START七、思考从键盘上输入4位被加数、加数,实现双字节BCD码(四位数)的加法,结果显示在数码管上。
实验六显示程序一、实验目的1、熟悉8255的功能,理解LED显示原理及控制方法;2、学会使用LED点阵液晶显示字体和图形;3、认真预习本节实验内容,可尝试自行编写程序,做好实验准备工作,填写实验报告。
二、实验设备STAR系列实验仪一套、PC机一台。
三、实验内容1、编写程序,用8255的PA、PB口控制LED的位选和段选,(1)控制8位数码管依次显示0;(2)编写程序,控制8位数码管依次显示任意指定字符(0-F);(3)编写程序,控制8位数码管同时显示0、1、……F;2、按图连接线路,运行程序,观察实验结果。
四、实验原理图接PB接8255PA五、实验步骤六:源程序(1) 控制8位数码管依次显示0;.MODEL TINY.STACK 100.DATAIO8255_Con EQU 0F003H ;CS3控制字端口地址IO8255_A EQU 0F000H ;A数据口IO8255_B EQU 0F001H ;B数据口LED_TAB: DB 03FH,06H,05BH,04FH,66H,6DH,7DH,07HDB 07FH,6FH,77H,7CH,39H,05EH,79H,71H ;存储要显示的数码管的值,B口的8位分别对应7位数码管的abcdefg.CODESTART: MOV AX,@DATA;单片机寻址方式,地址怎样传到DATA中的MOV DS,AX ;初始化数据段寄存器MOV ES,AX ;初始化附加段,这一句不需要MOV DX,IO8255_Con ;控制字地址送DXMOV AL,80H ;方式0,A,B,C均为输出OUT DX,ALMOV AL,0FEH ; 8255 PC输出,输出0FEH到A口MOV CX,8GOON: MOV DX,IO8255_A ;位选,就是片选,选择哪一个LED组OUT DX,AL ;1111 1110输出到A口ROL AL,1 ;循环左移1位,最低位的0移动1位到高位,进行片选用MOV AH,AL ;AL当前值送AH暂存,因为AL还要用于B口数据送DX。