微机原理实验一

合集下载

微机原理实验指导书

微机原理实验指导书

实验一初级程序的编写与调试一、实验目的1、熟练掌握的DEBUG常用命令,学会用DEBUG调试程序;2、深入了解数据在存储器中的存取方法,及堆栈中数据的压入与弹出;3、掌握各种寻址方法以及简单指令的执行过程。

二、实验内容1、设堆栈指针SP=2000H,AX=3000H,BX=5000H,请编一程序段将AX的内容和BX的内容进行交换。

请用堆栈作为两寄存器交换内容的中间单元,用DEBUG调试程序进行汇编与调试。

2、设DS=当前段地址,BX=0300H,SI=0002H,请用DEBUG的命令将存储器偏移地址300H—304H连续单元顺序装入0AH、OBH、0CH、0DH、0EH。

在DEBUG状态下送入下面程序,并用单步执行的方法,分析每条指令源地址的形成过程。

当每条数据传送完毕时,AX中的内容是什么。

程序清单如下:MOV AX,BXMOV AX,0304HMOV AX,[0304H]MOV AX,[BX]MOV AX,0001[BX]MOV AX,[BX][SI]MOV AX,0001[BX][SI]HLT3、设AX=0002H,编一个程序段将AX的内容乘10,要求用移位的方法完成。

三、实验要求1、实验前要做好充分准备,包括汇编程序清单、调试步骤、调试方法,对程序结果的分析等。

2、本实验要求在PC机上完成。

3、本实验只要求在DEBUG调试程序状态下进行,包括汇编程序,调试程序,执行程序。

4、编程提示:(1)、实验内容1将两个寄存器内容进行交换时,必须有一个中间寄存器才能进行内容的交换。

如果用堆栈作为中间存储单元,必须遵循先进后出的原则。

(2)、实验内容2[1] 其中数据段寄存器中的段地址为进入DEBUG状态后系统自动分配的段地址。

[2] SI和BX的初值可在DEBUG的状态下,用R命令装入,也可以在程序中用指令来完成。

[3] 用T命令执行程序,可进行单步跟踪执行,每执行一条指令就可以看到各寄存器的状态,也可用R命令直接调出寄存器,来检查各寄存器内容是否正确。

微机原理实验1

微机原理实验1

实验一两个多位十进制数相减实验一. 实验要求将两个多位十进制数相减,要求被减数,减数均以ASCII码形式按顺序存放在以DA TAI和DATA2为首的5个内存单元中(低位在前),结果送回DATAI处。

二、实验目的1.学习数据传送和算术运算指令的用法。

2.熟悉在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。

DA TA SEGMENTDA TA1 DB 33H,39H,31H,37H,38H ;第一个数据(作为被减数)DA TA2 DB 36H,35H,30H,38H,32H ;第二个数据(作为减数)MES1 DB '-','$'MES2 DB '=','$'DA TA ENDSSTACK SEGMENT ;堆栈段STA DB 20 DUP(?)TOP EQU LENGTH STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA,SS:STACK,ES:DA TASTART: MOV AX,DATAMOV DS,AXMOV ES,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXMOV SI,OFFSET DA TA1MOV BX,05CALL DISPL ;显示被减数MOV AH,09HLEA DX,MES1INT 21HMOV SI,OFFSET DATA2MOV BX,05 ;显示减数CALL DISPLMOV AH,09HLEA DX,MES2INT 21HMOV SI,OFFSET DA TA1MOV 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 SU3RETSUBA ENDPCODE ENDSEND START实验二两个数相乘的实验一.实验要求实现十进制数的乘法,被乘数和乘数均以ASCII码形式存放在内存中,算式结果在屏幕上显示出来。

微机原理实验一

微机原理实验一

实验1 汇编语言环境熟悉班级B12512 学号20124051222姓名刘忠信实验目的:1. 掌握DEBUG常用命令。

2. 了解程序运行的过程。

3. 熟悉8086内部寄存器和内存单元的状况。

4. 掌握MASM、LINK、DEBUG等工具的使用。

实验设备:硬件:PC机软件:DOS操作系统、编辑软件、MASM 5.0实验内容及要求:DEBUG是用于调试汇编语言程序的一个工具软件,可用于建立汇编语言源程序,并能对汇编用语言源程序进行汇编;还可用于程序的控制执行,跟踪程序的运行,了解程序中每条指令的执行结果以及每条指令执行完毕后各个寄存器的内容,以便检查和修改可执行程序;也可用于对接口操作和对磁盘进行读写操作等。

(1)启动和退出DEBUG程序启动:若DEBUG安装在C盘的跟目录下,进入DOS命令状态后,直接启动DEBUG的方法是:C:\DEBUG_这时屏幕上出现DEBUG的命令提示符“_”,等待键入DEBUG命令。

退出:在DEBUG的命令提示符“_”下键入Q命令,即可结束DEBUG的运行,返回DOS 操作系统。

(2)常用DEBUG程序DEBUG命令是在命令提示符“_”下由键盘键入的。

每条命令以单个字母的命令符开头,后跟命令的操作参数,各操作参数之间用空格或逗号隔开,操作参数与命令之间用空格隔开。

1.显示存储单元命令D格式:DD <地址> 按指定地址范围显示D <地址范围> 按指定首地址显示2.跟踪命令T格式:T [=<地址>][<条数>] 多条指令跟踪3连续执行命令G格式:GG= <地址> 按指定地址范围显示D =<地址>,<断点> 按指定首地址显示,到断点自动停止并显示当前所有寄存器,状态标志位的内容和下一条要执行的指令。

4.反汇编命令U格式:U <地址> 按指定地址开始反汇编U <地址范围> 按指定存储单元开始反汇编5显示内存命令R格式:R 显示CPU内所有寄存器内容R <寄存器名> 显示和修改某个寄存器内容6.修改内存单元命令E格式:E <地址><单元内容> 逐个单元修改存储单元内容E <地址><单元内容表> 用指定内容替代原内容实验总结:掌握DEBUG命令的使用以及熟悉8086内部寄存器和内存单元的情况,了解程序运行的过程。

微机原理实验一报告

微机原理实验一报告

微机原理实验一1.DEBUG 的基本操作:(1)从WINDOWS 进入DOS 之后,输入命令启动DEBUG:C:>DEBUG 回车(2)输入R 命令,查看和记录CPU 各个寄存器的内容:-R 回车看到什么?AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=16D3 ES=16D3 SS=16D3 CS=16D3 IP=0100 NV UP EI PL NZ NA PO NC 16D3:0100 0000 ADD [BX+SI],AL DS:0000=CD(3)输入 A 命令,汇编下面的字符“WINDOWS”显示程序(DEBUG 调试环境中,默认为十六进制,因此源程序中十六进制数后面不写H):-A 100 ;从偏移地址是0100H 处开始写指令MOV AH,2MOV DL, 57 ;57H 是“W”的ASCII 码INT 21 ;INT 21 是DOS 功能调用,AH=2 代表2 号功;能。

这3 句合起来的功能是:显示DL 中的字符MOV DL, 49INT 21MOV DL, 4EINT 21MOV DL, 44INT 21MOV DL, 4FINT 21MOV DL, 57INT 21MOV DL, 53INT 21INT 3 ;功能是产生一个断点,不要省略(4)输入U 命令反汇编上面的程序:-U 100问:这里100代表什么?反汇编从0100开始(5)输入G命令连续运行上面的程序,记录运行结果:-G=100AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=16D3 ES=16D3 SS=16D3 CS=16D3 IP=0100 NV UP EI PL NZ NA PO NC 16D3:0100 B402 MOV AH,02(6)输入E命令把上面程序中的数据57,49,4E,44,4F,57,53依次分别改为57,45,4C,43,4F,4D,45:-E 103 回车(以下同)-E 107-E 10B-E 10F-E 113-E 117-E 11B(7)输入D命令查看程序机器码的存放情况:-D 100 11E ;看从100开始到11E的机器码(8)输入G命令再连续运行程序,并记录运行结果:-G=100WELCOMEAX=0245 BX=0000 CX=0000 DX=0045 SP=FFEE BP=0000 SI=0000 DI=0000DS=16D3 ES=16D3 SS=16D3 CS=16D3 IP=011E NV UP EI PL NZ NA PO NC 16D3:011E CC INT 3(9)依次输入下面的T命令(单步执行)和G命令(设置断点并启动运行),记录各命令的运行结果:-T=100 回车-G=100 106 回车-G=100 10A 回车-G=100 10E 回车-G=100 11E 回车T=100AX=0245 BX=0000 CX=0000 DX=0045 SP=FFEE BP=0000 SI=0000 DI=0000DS=16D3 ES=16D3 SS=16D3 CS=16D3 IP=0102 NV UP EI PL NZ NA PO NC 16D3:0102 B257 MOV DL,57-g=100 106W-g=100 10aWE-g=100 10eWEL-g=100 11eWELCOME2.一字节十六进制数转换为ASCII码(只考虑大写字母)用E命令在DS:1000单元中存放十六进制数5A,用A命令从CS:0100单元开始存放下面程序的机器码,并调试运行(DEBUG调试环境中,源程序中十六进制数后面不写H):CS:0100 8D360010 LEA SI,[1000] ;将EA=1000送入SI中0104 8D3E2010 LEA DI,[1020] ;将EA=1020送入DI中0108 8A04 MOV AL,[SI] ;(AL)←((SI))010A 240F MOV BL,AL ;将AL中的一个字送入BL010C 240F AND AL,0F ;(AL)←(AL)^(01H)010E E80E00 CALL 011F ;调用EA=011F中的指令0111 80E30 AND BL,F0 ;(BL)←(BL)^(F0H)0114 B90400 MOV CX,4 ;将立即数4送入CX中0117 D2EB SHR BL,CL ;将BL中的内容左移CL;中指出的位数,且每次移位最低位补0 0119 88D8 MOV AL,BL ;将BL中的一个字送入AL011B E80100 CALL 011F ;调用EA=011F中的指令011E F4 RET :返回指令011F 3C09 CMP AL,09 ;(AL)-09,根据结果设置标志位0121 7602 JBE 0125 ;执行EA=0125的指令0123 0407 ADD AL,07 ;(AL)←(AL)+07H0125 0430 ADD AL,30 ;(AL)←(AL)+30H0127 8805 MOV [DI],AL ;(AL)送入EA=(DI)的单元中0129 47 INC DI ;(DI)←(DI)+1012A C3 RET ;返回指令运行结果:1)写出执行上述程序的命令行-G=1002)程序执行后,[1020]=_____41_____,[1021]=___35______。

北理工 自动化 微机原理实验一

北理工 自动化 微机原理实验一

微型计算机原理与接口技术软件实验报告(一)班级:学号:姓名:2012.11一、实验题目1、学习并掌握IDE86集成开发环境的使用;2、参考书例4-8,以单步形式观察程序的执行过程;3、修改该程序,求出10个数中的最大值和最小值。

以单步形式观察如何求出最大值、最小值。

二、实验目的1、熟悉IDE86集成开发环境的使用。

2、通过编程、上机调试,进一步理解汇编语言的设计思路与执行过程。

3、锻炼动手编程,独立思考的能力。

三、实验内容3.1题目2设计思路及流程图3.1.1设计思路为实现求和的功能,首先将十个数存入内存中,设定AX为计算结果存储单元,CX为计数器,随后建立循环,将每个数依次加到AX上,直至CX=O,最后将AX中存储的结果移动到SUM存储单元中,结束程序。

3.1.2程序流程图题目2的程序流程图如图1所示:图1题目2的程序流程图3.2题目3设计思路及流程图3.2.1设计思路为实现求取最大值最小值的功能,首先将十个数存入内存中,设定CX为计数器,将第一个数分别存入到MAX与M1N储存单元中,随后建立循环,将每个数依次与MAX(MIN)相比较,如果有大于(小于)MAX(MIN)中的,移入相应存储单元,直至CX=0。

最后将MAX和MIN中存储的数据打印在屏幕上,返回DoS系统,结束程序。

3.2.2程序流程图题目3的程序流程图如图2所示:图2题目3的程序流程图4.1题目2源程序DATA SEGMENT ;定义数据段TAB1E DB12H,23H,34h,45h,56h ;10个加数DB67H,78H z89H z9AH z0FDHSUM DW?DATA ENDSCODE SEGMENT ;定义代码段ASSUMECS:CoDE,DS:DATA,ES:DATASTART: MOVAX z DATAMOVDS,AX ;初始化DSMOVES,AX ;初始化ES1EASUAB1E ;SI指向TAB1EMOVCX,10 ;循环计数器XORAX z AX ;AX为中间结果NEXT: ADDA1z[SI] ;把一个数加到A1中ADCAH z O ;若有进位,则加到AH中INCSI ;指向下一个数1OOPNEXT ;若未加完,继续循环MOVSUM Z AX ;若结束,存结果于SUMH1T ;结束CODE ENDS ;代码段结束END START ;汇编结束DATA SEGMENT ;定义数据段TAB1E DB12H,23H,34h,45h,56h;十个待比较数DB67H,78H,89H,9AH,0FDHMAX DB?MIN DB?A DB,MaxOS ;屏幕提示字符串B DBoDH,0AH「Min:,SDATA ENDSCODE SEGMENT;定义代码段ASSUMECS:CoDE,DS:DATA,ES:DATASTART: MOVAX z DATAMOVDS,A× ;初始化DSMOVES,AX ;初始化ES1EASIJAB1E ;SI指向TAB1EMOVCX z IO ;循环计数器XORAX z AX ;清空AXC1D ;清方向标志DF1ODSB ;A1存入一个8位数MOVMAX z A1 ;将该数送MAXMOVMIN Z A1 ;将该数送MINDECCX ;计数器减一NEXT: 1ODSB ;取下一个数CMPA1Z MAX ;与MAX比较JA1ARGERCMPA1Z MIN JBSMA11ERJMPGOON1ARGER:M0VMAX,A1JMPGOONSM A11ER:MOVMIN z A1GO ON:1OOPNEXT1EADX,AMOVAH z09HINT21HMOVA1z MAXCA11DISP1AY1EADX,BMOVAH z09HINT21HMOVA1z MINCA11DISP1AYMOVAH z4CHINT21H DISP1AYPROCPUSHBXPUSHCX ;若大于转1ARGER;否则与MIN比较;若小于转SMA11ER ;否则转GOON;A1的值存入MAX;转到GOON;A1的值存入MIN;CX-1,若CXWO转NEXT ;获取A的首地址;调用字符串显示功能;MAX值存入A1;调用显示子程序;获取B的首地址;调用字符串显示功能;MIN值存入A1;调用显示子程序;调用返回DoS功能;十六进制显示子程序;保持BX内容;保持CX内容MOVBH z A1MOV CH,2 ;设置循环计数器ROT: MOV C1,4 ;移位次数RO1 BX z C1MOV A1B1AND A1z OFH ;清空A1高四位ADD A1,30H ;0-9转换ASCII码CMP A1z3AHJ1 PRITADD A1,7H ;A-F转换ASCII码PRIT: MOV D1,A1MOV AH,2 ;调用字符显不功能INT 21HDEC CH ;计数器-1JNZ ROT ;CHW0,继续循环POPCX 丁恢复CX内容POPBX 丁恢复BX内容RET ;返回D ISP1AYENDPCODEENDS ;代码段结束END START ;结束五、实验运行结果5.1题目2运行结果前五个数运算结束后寄存器状态:图3 其中ax 值为图4前五个数计算后AX 的值故此时前五个数之和为0104Ho 前八个数运算结束后寄存器状态:×0000图6前八个数计算后AX 的值故此时前八个数之和为026CH o 全部运算结束后,ax 的值为:图7计算结束后AX 的值故十个数的和为0403H 。

微机原理实验报告

微机原理实验报告

微机原理实验报告实验一两个多位十进制数相加的实验一、实验目的学习数据传送和算术运算指令的用法熟悉在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。

二、实验内容将两个多位十进制数相加, 要求被加数和加数均以ASCII码形式各自顺序存放在以DATA1.DATA2为首的5个内存单元中(低位在前), 结果送回DATA1处。

三、程序框图图3-1四、参考程序清单程序名: XIANGJ.ASMDATA SEGMENTDATA1 DB 33H,39H,31H,37H,34H;被加数DATA1END EQU $-1DATA2 DB 34H,35H,30H,38H,32H;加数DATA2END EQU $-1SUM DB 5 DUP(?) DATA ENDSSTACK SEGMENTSTA DB 20 DUP(?) TOP EQU LENGTH STA STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START: MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXMOV SI,OFFSET DATA1ENDMOV DI,OFFSET DATA2ENDCALL ADDAMOV AX,4C00HINT 21HADDA PROC N EARMOV DX,SIMOV BP,DIMOV BX,05HAD1: SUB BYTE PTR [SI],30HSUB BYTE PTR [DI],30HDEC SIDEC DIDEC BXJNZ AD1MOV SI,DXMOV DI,BPMOV CX,05HCLCAD2: MOV AL,[SI]MOV BL,[DI]ADC AL,BLAAAMOV [SI],ALDEC SIDEC DILOOP A D2MOV SI,DXMOV DI,BPMOV BX,05HAD3: ADD BYTE PTR [SI],30HADD BYTE PTR [DI],30H DEC SIDEC DIDEC BXJNZ AD3RETADDA ENDPCODE ENDSEND START五: 结果分析这次试验依次将相加数和被相加数存入AL, BL, 依次从低位向高位相加, 然后把结果放在内存中, 根据程序走向, 相加的结果依次放在内存地址DS:0000到DS:0004的位置上, 和我们实验预期结果一样。

微机原理实验一

微机原理实验一
实验目的:
通过本实验,学生将掌握微机原理的基本知识,了解微机的组成结构和工作原理,掌握微机的基本操作方法。

实验内容:
1. 掌握微机的基本组成结构。

2. 了解微机的工作原理。

3. 学习微机的基本操作方法。

实验仪器和设备:
1. 微机主机。

2. 显示器。

3. 键盘。

4. 鼠标。

实验步骤:
1. 打开微机主机电源,启动计算机。

2. 通过鼠标和键盘操作,进入操作系统界面。

3. 了解微机的基本组成结构和工作原理。

4. 学习并掌握微机的基本操作方法。

实验注意事项:
1. 在操作微机时,要注意避免静电干扰,避免损坏微机设备。

2. 操作过程中要注意操作方法,避免误操作导致系统崩溃。

3. 学习微机原理时,要认真听讲,理解每个步骤的操作原理。

4. 实验结束后,要及时关闭微机电源,做好设备的保养工作。

实验总结:
通过本次实验,我对微机的基本组成结构和工作原理有了更深入的了解,掌握了微机的基本操作方法。

这对我今后的学习和工作都有很大的帮助。

同时,我也意识到了学习微机原理的重要性,希望在今后的学习中能够更加努力,不断提高自己的专业技能。

结语:
微机原理实验一是我们学习过程中的重要一环,通过实际操作,我们更深入地了解了微机的组成结构和工作原理,也掌握了微机的基本操作方法。

希望大家能够认真对待实验,加强对微机原理的学习,为以后的学习和工作打下坚实的基础。

西安交大微机原理第一次实验报告(共10页)

微机(wēi jī)原理第一次实验报告一.实验(shíyàn)目的(1) 学习8086/8088指令系统中一些基本(jīběn)指令的用法和程序设计的基本方法。

(2) 熟悉PC机上建立、汇编、连接(liánjiē)、调试和运行8086、8088汇编语言程序的全过程。

(3) 学习提示信息的显示及键盘输入字符的方法。

(4) 掌握分支程序的设计方法。

二.实验内容(1) 设a,b,c,d四个数分别以单字节压缩BCD码形式存放在内存NUM开始的四个单元,计算(a+b)-(c+d)并将结果放在Y1单元中,将结果在屏幕上显示出来。

在debug中不断改变a,b,c,d内容并查看结果。

1. a=09, b=06, c=04, d=072. a=38, b=41, c=29, d=343. a=70, b=23, c=42, d=414. a=63, b=73, c=62, d=50(2) 在提示信息下,从键盘输入原码表示的二位十六进制有符号数,当此数大于0时,屏幕上显示此数为正数;当此数小于0时,屏幕上显示此数为负数;当此数为0时,屏幕上显示此数为零。

三.实验调试过程3.1 题目一调试过程C:\<DEBUG ONE.EXE-U 反汇编-R 查看(chákàn)寄存器变量值观察(guānchá)到0005时已完成(wán chéng)数据初始化,利用(lìyòng)g 5追踪到此处利用-d0指令查看内存单元,在偏移地址为0,1,2,3的地方有9,6,4,7,正是我们在代码中赋的初值。

-g d,观察(guānchá)到此时AL已赋值a=15H-g 16,计算(jì suàn)出a+b的值并赋给AL,值为0b,正确(zhèngquè)-g 19,DAA调整后AL变为11,计算(jì suàn)正确-g 1b,cl=04H成功赋值给AL,正确-g 1f,计算出(a+b)-(c+d)结果为04H,正确题目(tímù)二程序调试过程-U0, 反汇编-g 5,程序执行到此处时,完成(wán chéng)DS寄存器赋值DS=0B5EH-g a,程序执行到此处时,完成(wán chéng)SS寄存器赋值SS=0B69H-g 24,程序执行到此处,实现提示信息输出(shūchū)INPUT DATA:,手动输入C9-U-g 2f,程序执行到此处,成功(chénggōng)跳转,显示信息“THIS DATA IS –“四.程序(chéngxù)及框图4.1 题目(tímù)一程序DSEG SEGMENT ;定义数据段NUM DB 13H,27H,11H,12H ;定义(dìngyì)a,b,c,dY1 DB ?DSEG ENDS ;数据段定义结束SSEG SEGMENT PARA STACK ;定义堆栈段DB 20 DUP(?)SSEG ENDS ;堆栈段定义结束CSEG SEGMENT ;定义代码段ASSUME CS:CSEG,DS:DSEG,SS:SSEG ;各段定义(dìngyì) START: MOV AX,DSEGMOV DS,AX ;数据段段(duàn duàn)地址送DSMOV AX,SSEGMOV SS,AX ; 堆栈段段(duàn duàn)地址送SSMOV AL,[NUM]ADD AL,[NUM+1] ;计算(jì suàn)a+bDAA ;压缩BCD码加法调整DAAMOV CL,AL ; 保存a+bMOV AL,[NUM+2]ADD AL,[NUM+3] ;计算c+dDAA ;压缩BCD码加法调整DAASUB CL,AL ;计算(a+b)-(c-d)MOV AL,CLDAS ;DAS调整MOV [NUM+4],AL ;保存结果AND AL,0F0H ;取AL中高四位MOV CL,4SHR AL,CL ;BCD码高位移至低位ADD AL,30H ;AL加30H得ASCII码MOV DL,ALMOV AH,02HINT 21H ;显示DLMOV AL,[NUM+4] ; 恢复ALAND AL,0FH ;取AL低四位ADD AL,30H ;AL加30H得ASCII码MOV DL,ALMOV AH,02HINT 21H ;显示DLMOV AX,4C00HINT 21H ;返回DOSCSEG ENDSEND START ;程序结束4.2 题目二程序CRLF MACRO ;宏定义MOV AH,02HMOV DL,0DHINT 21HMOV AH,02HMOV DL,0AHINT 21H ;显示换行ENDM ;宏结束DATA SEGMENT ;定义数据段MESS1 DB 'INPUT DATA:',0DH,0AH,'$'MESS2 DB 'THIS DATA IS+',0DDH,0AH,'$'MESS3 DB 'THIS DATA IS-',0DH,0AH,'$'MESS4 DB 'THIS DATA IS ZERO',0DH,0AH,'$'DATABUF DB 3 ;定义(dìngyì)最大可输入字符长度 ACTLEN DB ? ;实际(shíjì)输入字符长度STRING DB 3 DUP(?) ;输入(shūrù)字符缓冲区DATA ENDS ;数据(shùjù)段结束SSEG SEGMENT PARA STACK 'STACK' ;定义堆栈段 DB 50 DUP(0)SSEG ENDS ;堆栈段结束CODE SEGMENT ;定义代码段ASSUME CS:CODE,SS:SSEG,DS:DATA ;各段定位START: MOV AX,DATAMOV DS,AX ;DS段寄存器赋值MOV AX,SSEGMOV SS,AX ;SS段寄存器赋值MOV DX,OFFSET MESS1MOV AH,09HINT 21H ;显示提示信息MOV AH,0AHMOV DX,OFFSET DATABUFINT 21H ;接收键入的字符串CRLF ;回车换行MOV AL,STRING ;接收字符高位CMP AL,38H ;比较高位和38H的大小JGE FUSHU ; 若高位>=38H?,跳至FUSHU处执行 CMP AL,30H ;比较高位和30H的大小JE ZERO ;若高位=30H?,跳至ZERO处执行ZHENGSHU: MOV DX,OFFSET MESS2 ;显示输出为正数 MOV AH,09HINT 21HJMP OVERFUSHU: MOV DX,OFFSET MESS3 ;显示输出为负数MOV AH,09HINT 21HJMP OVERZERO: MOV AL,[STRING+1] ;显示输出为0CMP AL,30HJNE ZHENGSHUMOV DX,OFFSET MESS4MOV AH,09HINT 21HJMP OVEROVER: HLTCODE ENDS ;代码段结束(jiéshù)END START ;程序(chéngxù)结束五.实验(shíyàn)结果5.1 题目(tímù)一实验结果1. a=09, b=06, c=04, d=07时,计算结果为042. a=38, b=41, c=29, d=34时,计算结果为163. a=70, b=23, c=42, d=41时,计算结果为104. a=63, b=73, c=62, d=50时,计算结果为245.2 题目二实验结果键盘输入c9,输出“THIS DATA IS-“键盘输入17,输出“THIS DATA IS +”键盘输入00,输出”THIS DATA IS ZERO’六.必要的分析6.1 题目一分析1. 压缩BCD码需要用到压缩BCD码的调整指令2. 程序末尾显示要利用DOS功能调用3.显示单个字符,要先将其转化为ASCII 码,再利用DOS功能调用的02H功能。

微机原理实验报告1

微机原理实验报告班级:电气93姓名:党尧学号:09041059实验一:顺序程序的设计一、实验目的:1.学习8086/8088指令系统中一些基本指令的用法和程序设计的基本方法。

2.熟悉在PC机上建立、汇编、链接、调试和运行8086、8088汇编语言程序的全过程。

二、实验内容:设a、b、c、d四个数分别以胆子解压缩BCD码形式存放在内存NUM开始的四个单元,计算(a+b)-(c+d)并将结果放在Y1单元,将结果在屏幕上显示出来。

在DEBUG中,不断改变a,b,c,d内容并查看结果。

1.a=09,b=06,c=04,d=072.a=38,b=41,c=29,d=343.a=70,b=23,c=42,d=414.a=63,b=73,c=62,d=50三、程序框架:DESG SEGMENT :定义数据段NUM DB 13H,27H,11H,12H :定义a,b,c,dY1 DB ?DSEG ENDS :数据段定义结束SSEG SEGMENT PARA STACK :定义堆栈段DB 20 DUP(?)SSEG ENDS :堆栈段定义结束CSEG SEGMENT :定义代码段ASSUME CS:CSEG,DS:DSEG,SS:SSEG :各段定义START: MOV AX,DSEGMOV DS,AX :数据段段地址送DSMOV AX,SSEGMOV SS,AX :堆栈段段地址送SSMOV AX,4C00HINT 21HCSEG ENDSEND START四、程序内容:DSEG SEGMENTNUM DB 13H,27H,11H,12HY1 DB ?DSEG ENDSSSEG SEGMENT PARA STACKDB 20 DUP(?)SSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEG,SS:SSEGSTART: MOV AX,DSEGMOV DS,AXMOV AX,SSEGMOV SS,AXMOV AL,NUM :数据a送ALADD AL,NUM+1 :将a+b存储到ALDAA :压缩BCD码加法调整MOV CL,AL :保存AL内容MOV AL,NUM+2 :数据c送ALADD AL,NUM+3 :将c+d存储到ALDAA :压缩BCD码加法调整SUB CL,AL :将(a+b)-(c+d)存储到CLMOV AL,CL :CL送ALDAS :压缩BCD码减法调整MOV Y1,AL :送出结果显示压缩BCD码:MOV BL,AL :保存AL中的内容AND AL,0F0H :取AL中高四位MOV CL,4SHR AL,CL :BCD码高位移到低位ADD AL,30H :(AL)加30H得ASCII码MOV DL,ALMOV AH,02HINT 21H :显示(DL)MOV AL,BL :恢复(AL)AND AL,0FH :取(AL)低四位ADD AL,30H :(AL)30H得ASCII码MOV DL,ALMOV AH,02HINT 21H :显示(DL)返回DOS:MOV AX,4C00HINT 21HCSEG ENDSEND START五、实验分析:运用debug程序的-u命令可见程序反汇编内容:之后用–g 及–r 命令可观察每一步程序进行后AL中存储内容的变化:0BD9:0000 B8D60B MOV AX,0BD60BD9:0003 8ED8 MOV DS,AX0BD9:0005 B8D70B MOV AX,0BD70BD9:0008 8ED0 MOV SS,AX0BD9:000A A00000 MOV AL,[0000] :AL=130BD9:000D 02060100 ADD AL,[0001] :AL=3A0BD9:0011 27 DAA :AL=400BD9:0012 8AC8 MOV CL,AL0BD9:0014 A00200 MOV AL,[0002] :AL=110BD9:0017 02060300 ADD AL,[0003] :AL=230BD9:001B 27 DAA :AL=2308D9:001C 2AC8 SUB CL,AL0BD9:001E 8AC1 MOV AL,CL :AL=1D0BD9:0020 2F DAS :AL=1708D9:0021 A20400 MOV [0004],AL-g 24后-r命令可见:AX=0B17 BX=0000 CX=0012 DX=0000 SP=0014 BP=0000SI=0000 DS=0BD6 SS=0BD7 CS=0BD9 IP=0024可知此时程序已将(a+b)-(c+d)结果17存入到AL中。

微机原理与接口技术实验报告

微机原理与接口技术实验报告实验一,微机原理实验。

1. 实验目的。

本实验旨在通过对微机原理的实验,加深学生对微机原理相关知识的理解,提高学生的动手能力和实验技能。

2. 实验内容。

本实验主要包括微机原理的基本知识、微处理器的结构和功能、微机系统的总线结构、存储器与I/O接口。

3. 实验步骤。

(1)了解微机原理的基本知识,包括微处理器的分类、功能和工作原理。

(2)学习微机系统的总线结构,掌握总线的分类、功能和工作原理。

(3)了解存储器与I/O接口的基本概念和工作原理。

(4)进行实际操作,通过实验板进行微机原理实验,加深对微机原理知识的理解。

4. 实验结果。

通过本次实验,我深刻理解了微机原理的基本知识,掌握了微处理器的结构和功能,了解了微机系统的总线结构,以及存储器与I/O接口的工作原理。

通过实际操作,我对微机原理有了更深入的认识,提高了自己的动手能力和实验技能。

实验二,接口技术实验。

1. 实验目的。

本实验旨在通过对接口技术的实验,加深学生对接口技术相关知识的理解,提高学生的动手能力和实验技能。

2. 实验内容。

本实验主要包括接口技术的基本知识、接口电路的设计与调试、接口技术在实际应用中的作用。

3. 实验步骤。

(1)了解接口技术的基本知识,包括接口的分类、功能和设计原则。

(2)学习接口电路的设计与调试,掌握接口电路设计的基本方法和调试技巧。

(3)了解接口技术在实际应用中的作用,包括各种接口的应用场景和实际案例。

(4)进行实际操作,通过实验板进行接口技术实验,加深对接口技术知识的理解。

4. 实验结果。

通过本次实验,我深刻理解了接口技术的基本知识,掌握了接口电路的设计与调试方法,了解了接口技术在实际应用中的作用。

通过实际操作,我对接口技术有了更深入的认识,提高了自己的动手能力和实验技能。

总结。

通过微机原理与接口技术的实验,我对微机原理和接口技术有了更深入的理解,提高了自己的动手能力和实验技能。

希望通过今后的学习和实践,能够更加深入地掌握微机原理与接口技术的知识,为将来的工作和研究打下坚实的基础。

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

实验一Debug 环境中程序的输入、运行和调试
实验目的:
感性认识“CPU执行一个程序的具体过程”以及“程序的执行对于CPU内部寄存器的影响”;感性认识“什么是段地址和偏移地址”;
感性认识“补码表示法”
感性认识“ASCII码的用途”。

实验说明:
Debug环境的提示符是“—”;如果在当前目录中确实存在着一个名叫Debug.exe的外部文件,那么,在DOS的提示符下,嵌入“Debug”,并且按回车键“Enter”,即可进入Debug环境,见到其提示符“—”。

常用的Debug命令是:
—a x:y(回车)用于输入一个汇编语言程序
(a是命令,x是段地址,y是偏移地址,x:y将是程序的起始地址,首次试验时,可以将x代之ABC,y 代之以100,那么程序的起始地址将是AB:100)
注意:你不可以键入“x”或者“y”,即是,x和y都必须代之以具体的地址,例如ABC:100(其中,ABC 是段地址,100是偏移地址)
—u x:y(回车) 用于显示一个汇编语言程序或者称为“在屏幕上列出一个汇编语言程序”;
自然地,x;y也必须代之以程序的实际的起始地址;通常当一个程序从屏幕上(因为上移而)消失后,可以适应这种方法来重新在屏幕上显示改程序。

—a x:y(回车)也可以用于修改某命令,x:y是将要被修改的指令的地址。

(所谓的修改其实就是往该地址中重新输入某指令,然后按两次回车键,即可修改成功)
—t= x:y(回车)用于单步执行一个汇编语言程序,注意,因为是“单步执行”,所以,被执行的程序中包含多少条指令,就应当键入多少个t命令,(只有第一个t命令后需要用“=”把程序的起始地址告知CPU,其余的t命令不需要提供地址,只需要键入t并且回车就可了。

);单步执行的意义在于:因为CPU没执行完一条指令就会自动停止,而且显示出当前CPU内部每个寄存器的内容,由于程序的结果(尤其是中间结果)通常是在CPU的某个或几个寄存器中,这就是为我们考察一个程序的详细执行过程提供了好机会。

—g= x:y(回车)用于从起始地址x:y连续执行一程序,(一直执行到程序员在改程序中给定的结束处。

在Debug环境中,我们经常使用“INT3”指令来结束一个程序的执行)
—d x:y(回车)用于显示内存区域中的一批数据;x:y是该区域的起始地址。

—e x:y(回车)用于显示(或修改)某一个内存单元中的数据内容。

数据内容显示出来以后,如果想看下一个内存单元中的数据,可以按“空格键”。

数据内容改好之后,若需要修改下一个单元,也是直接按“空格键”。

(注意:x要代之以为段地址,y要代之以为偏移地址!)
—r(回车)用于显示CPU内部全部寄存器当前的内容。

—rAX(回车)用于显示或修改CPU内部寄存器AX中的数据。

—q(回车)用于退出Debug环境,返回DOS环境。

实验程序:
mov al ,1
dec al
sub al ;使CPU内部的AL寄存器减一
mov bl ,al
inc bl
add bl ;使CPU中的寄存器BL加一
neg bl
mov CX,1
neg CX
int 3 ;该指令仅用于Debug 环境中,使一个程序结束
mov ax ,B800
mov DS,ax
mov DI ,800
mov cl, 1
mov [DI],cl
mov ch,5A
mov [DI+1],ch
add DI, 3 ;由于在Debug环境中,数据皆以十六进制的形式显示,
mov cl ,2;因此在数据之后无须加“H”标志
mov [DI],cl
mov ch,5A
mov [DI+1],ch
add DI,2
mov cl ,1
mov [DI],cl
mov ch,5A
mov[DI+1],ch
INT 3;
操作要求:
1、进入debug环境,输入上述程序,单步执行,每执行完一条指令,就记录下CPU内部的AX、BX、
CX、CS、IP中的数据的变化。

2、用e命令吧RAM内存区域(其地址是从B800:800开始)中的数据修改为32,0A,30,1
A,31,4A,31,5A,CC,0A,CC,1A,CC,5A,并且观察现象。

(不需要区分大小写)
3、用—ux:y命令列出改程序,用笔记录其地址、机器语言指令、汇编语言指令(三列并排)。

(注意:
只需要记录到第2节“INT3”指令!)
思考题(预习报告中,应包含问题1~6为答案,总是先交预习报告后做实验)
1、进制数据11001100b在计算机内部(CPU中或内存中)有可能具有哪几种不同的含义?
(具体指出4~7种)
2、用e命令能否判断某一个内存单元究竟是属于RAM区还是属于ROM区?
3、在Debug环境中只用十六进制表示数据,主要原因可能是什么?(说出两个原因)
4、指出上述程序的格式不正确的指令并且改正之。

5、程序中,当执行了指令NEGBL和NEGCX之后,BL和CL中存放的数据的大小关系是什么?(分两种情况讨论其大小关系)
6、指令NEG BL的作用是什么?该指令执行之后,BL寄存器中的二进制数据是什么?(第7~9个问题在实验报告中回答)
7、当用多个t命令单步执行该程序时,每个t命令的执行皆会导致IP的变化,请问:为什么IP的变化幅度会有大有小?
8、CCh是哪一条指令的机器语言代码?
I 预习报告应写在正规实验报纸的正面!并且在第一行写上“预习报告”四个字。

II 预习报告的内容应包括:实验步骤、实验所用命令以及思考题的答案。

II 每次实验之前,请课代表收齐预习报告,教师将检查并且记录预习情况。

IV第一次做实验之前,课代表提供一式两份的班级名单,以供记录实验成绩。

本实验的数据记录表格:。

相关文档
最新文档