微机原理实验一
微机原理实验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码形式存放在内存中,算式结果在屏幕上显示出来。
微机原理及应用实验(题目)
微机原理及应用实验实验一开发环境的使用一、实验目的掌握伟福开发环境的使用方法,包括源程序的输入、汇编、修改;工作寄存器内容的查看、修改;内部、外部RAM内容的查看、修改;PSW中个状态位的查看;机器码的查看;程序的各种运行方式,如单步执行、连续执行,断点的设置。
二、实验内容在伟福开发环境中编辑、汇编、执行一段汇编语言程序,把单片机片内的30H~7FH 单元清零。
三、实验设备PC机一台。
四、实验步骤用连续或者单步的方式运行程序,检查30H-7FH 执行前后的内容变化。
五、实验思考1.如果需把30H-7FH 的内容改为55H,如何修改程序?2.如何把128B的用户RAM全部清零?六、程序清单文件名称:CLEAR.ASMORG 0000HCLEAR: MOV R0,#30H ;30H 送R0寄存器MOV R6,#50H ;50H 送R6寄存器(用作计数器)CLR1: MOV A,#00H ;00 送累加器AMOV @R0,A ;00 送到30H-7FH 单元INC R0 ;R0 加1DJNZ R6,CLR1 ;不到50H个字节,继续WAIT: LJMP WAITEND实验二数据传送一、实验目的掌握MCS-51指令系统中的数据传送类指令的应用,通过实验,切实掌握数据传送类指令的各种不同的寻址方式的应用。
二、实验内容1.编制一段程序,要求程序中包含7中不同寻址方式。
2.编制一段程序,将片内RAM30H~32H中的数据传送到片内RAM38H~3AH中。
3.编制一段程序,将片内RAM30H~32H中的数据传送到片外RAM1000H~1002H 中。
4.编制一段程序,将片内RAM40H~42H中的数据与片外RAM2000H~2002H中的数据互换。
三、实验设备PC机一台。
四、实验步骤逐段编制程序,汇编无误后,用连续或者单步的方式运行程序,检查程序的运行结果,看是否达到预期的效果。
五、实验思考1.如何把片外RAM中1000H~100FH单元中的数传送到片外RAM中2000H~200FH单元中?2.如何把ROM中0200H~0207H单元的数传送至片外RAM0000H~0007H单元中?实验三数码转换一、实验目的掌握采用软件方法进行不同形式数据之间的转换,如十进制数与二进制数的转换、十六进制数与BCD码的转换、BCD数与ASCII码之间的转换、非压缩BCD码与压缩BCD码之间的转换。
微机原理实验一
实验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内部寄存器和内存单元的情况,了解程序运行的过程。
微机原理及实验指导
实验一、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四.实验结果。
微机原理实验一报告
微机原理实验一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______。
微机原理实验一
微机原理实验一
实验目的:
通过本实验,学生将掌握微机原理的基本知识,了解微机的组成结构和工作原理,掌握微机的基本操作方法。
实验内容:
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中。
微机原理实验一
实验一汇编语言程序设计上机实验的基本过程——PB14000521 王艳红〇、实验目的和要求:1.熟悉汇编语言程序设计上机实验的计算机软硬件平台。
2.熟悉汇编语言程序设计上机实验的过程。
3.熟练掌握汇编语言源程序的编辑及对其汇编、连接、运行的过程。
4.熟练掌握使用DEBUG调试和运行程序的方法(“工欲善其事,必先利其器!“)。
一、实验内容和过程注:由于实验内容有两个题目,为了写实验报告时思路的连贯性,对于实验内容和过程两个题目分开写。
1.0 实验内容原题1.请先充分分析和理解课件的源程序,然后输入、编辑该程序,并完成对其汇编、连接、运行等操作过程。
再用调试程序debug来查看、记录(建议使用表格形式)和分析CS、IP、DS、ES、SS、SP以及AX、DX等程序中所使用到的和自己感兴趣的寄存器(例如标志寄存器),在该程序执行前、执行过程、执行结束(出现有“Program terminatednormally”提示信息)返回DOS等各个步骤的状态值,亲历查验程序运行的各个环节的状态(包括查看数据段、堆栈段的存储内容),全面分析和充分理解汇编语言源程序的组成,以及DOS系统平台调用执行程序的过程(包括返回DOS状态的操作原理)。
1.1 程序的算法思想a.例题中程序的主要功能是在DOS界面输出字符串“This is a sample program.”,并自动换行。
b.程序中定义了三个段DATA、STACK和CODE。
DATA中以DA1为偏移地址的名定义了一个字符串“This is a sample program.”和三个字符,其中0DH是CR(即回车)的ASCII码,0AH是LF(即换行)的ASCII码,$是后续显示字符串功能的结束字符串标志。
STACK中定义了一个栈,这个栈内定义了100个字节的空间,但是没有放入具体内容。
CODE中定义了一个MAIN过程,MAIN过程中的FAR说明了是段间调用,ASSUME指明了段寄存器与段基址的对应关系。
微机原理实验
试验一存储器读写实验一、存储器读写实验目的1、熟悉静态RAM的使用方法,掌握8088微机系统扩展RAM的方法。
2、掌握静态RAM读写数据编程方法。
二、实验内容对指定地址区间的RAM(2000H~27FDH)先进行写数据55AAH,然后将其内容读出再写到3000H~33FEH中。
三、实验步骤(运行实验程序)1、运行实验程序;2、稍后按RESET键退出,用存贮器读方法检查2000H~27FDH中的内容和3000~33FF中的内容应都是55AA。
四、实验程序CODE SEGMENTASSUME CS:CODESTART: MOV AX,0HMOV DS,AXMOV BX,2000HMOV AX,55AAHMOV CX,03FFHRAMW1: MOV DS:[BX],AXADD BX,0002HLOOP RAMW1MOV AX,2000HMOV SI,AXMOV AX,3000HMOV DI,AXMOV CX,03FFHCLDREP MOVSBRAMW2: JMP RAMW2CODE ENDSEND START实验二继电器控制实验一、实验目的:掌握用继电器控制的基本方法和编程。
二、实验内容1、利用8255A PB0输出高低电平,控制继电器的开合,以实现对外部装置的控制。
2、硬件线路原理如图5-23所示3、实验预备知识:现代自动化控制设备中都存在一个电子与电气电路的互相联结问题,一方面要使电子电路的控制信号能够控制电气电路的执行元件(电动机、电磁铁、电灯等);一方面又要为电子电路的电气提供良好的电隔离,以保护电子电路和人身的安全,电子继电器便能完成这一桥梁作用。
三、连线方法1、8255A的PB0连JIN插孔。
2、将CS-8255连到Y6。
四、实验步骤1、按图连好实验线路图。
2、运行实验程序,继电器应循环吸合,L-13和L-14交替亮灭。
五、硬件线路接线图六、试验程序CODE SEGMENTASSUME CS:CODEIOCONPT EQU 0063HIOCPT EQU 0061HSTART: MOV AL,80HMOV DX,IOCONPTOUT DX,ALNOPNOPNOPIOLED1: MOV DX,IOCPTIODE2: MOV AL,01HOUT DX,ALCALL DELAYMOV AL,00HOUT DX,ALCALL DELAYJMP IODE2DELAY: MOV CX,0FFFFHDELY: LOOP DELYRETCODE ENDSEND START实验三小直流电机调速实验一、实验目的1、掌握直流电机的驱动原理。
微机原理实验
微机原理实验第二部分实验内容《微机原理与应用》包括6个实验,其中前3个是软件编程,在PC机上完成,后3个是硬件实验,在TDN-MD实验箱上完成。
实验一顺序程序设计与调试一、实验目的1.熟悉汇编语言上机过程和上机步骤。
2.掌握汇编语言程序书写格式。
3.掌握顺序程序的设计与调试方法。
4.掌握汇编语言程序运行结果的观察方法。
二、实验设备PC机一台(安装汇编软件)。
三、实验内容分析并对比以下各程序段运行的结果。
1.两种加法指令比较(1) STCMOV AL,50HMOV BL,60HADD AL,BL(2)STCMOV AL,50HMOV BL,60HADC AL,BL2.两种加1指令比较(1) MOV AL,0FFHINC AL(2) MOV AL,0FFHADD AL,13.两种乘法指令比较(1) MOV AL,0FFH MOV BL,0FFH MUL BL(2) MOV AL,0FFH MOV BL,0FFH IMUL BL4.逻辑指令比较(1) MOV AL,55H AND AL,0FH (2) MOV AL,55H OR AL,0FH (3) MOV AL,55H XOR AL,0FH (4) MOV AL,55H TEST AL,0FH 5.移位指令比较(1) MOV AL,55H SHL AL,1(2) MOV AL,55H SHR AL, 1 (3) MOV AL,55H SAR AL, 1(4) STCMOV AL,55H ROL AL, 1 (5) STCMOV AL,55H ROR AL, 1 (6) STCMOV AL,55HRCL AL, 1(7) STCMOV AL,55HRCR AL, 1四、选作题在数据段中定义变量X、Y、Z、RESULT,计算X+Y-Z,结果存入数据段中的单元中。
其中X、Y、Z均为32位带符号数。
五、实验要求1.按汇编语言格式书写程序,在debug下进行调试、记录每组指令的运行情况,并进行分析与对比。
微机原理实验
实验一调试程序DEBUG的使用方法一、实验目的通过对DEBUG调试程序的使用,熟悉用DEBUG调试汇编语言程序的方法,加深对汇编语言指令、机器码、寻址方式等基本内容的理解,为后续程序编制和调试打下基础。
二、实验原理调试程序DEBUG 的特点:在受控环境中测试程序;装入,显示或修改任何文件;执行DOS程序;完成磁盘实际读/写操作;建立或汇编汇编语言程序。
DEBUG的命令格式:DEBUG [drive:][path][filename.exe][param...]其中:drive: 是DEBUG将要调试的文件所在的磁盘驱动器。
path: 是查找DEBUG将要调试的文件所需的子目录路径,若未指定,DOS使用当前目录。
filename.exe 是DEBUG将要调试的文件名。
param 是将被调试的程序(或文件)的命令行参数。
例如:调试放在c 盘asm文件夹下的汇编程序t1.exe。
c:> debug c:\asm\t1.exe ↙(↙回车符)当显示器出现提示符“-”时,说明已进入DEBUG状态,这时,可用DEBUG命令进行操作。
DEBUG使用单字符命令:R命令:查看、改变CPU寄存器的内容D命令:查看内存中的内容E命令:改写内存中的内容U命令:将内存中的机器指令翻译成汇编指令(反汇编)T命令:执行一条机器指令A命令:以汇编指令的格式在内存中写入一条机器指令Q命令:退出DEBUG 状态三、实验内容1、参考教材,熟悉DEBUG的使用方法,运行各种命令,观察运行后的况。
2、用DEBUG调试程序调试汇编语言例子te1.exe程序(程序见后面)。
1)用U命令对te1.exe文件进行反汇编,比较源程序te1.asm和反汇编后的指令代码。
2)用R命令查看各寄存器的初试状态。
3)用T命令单步跟踪te1.exe的执行过程,写出每一步执行后,相关寄存器中的内容。
四、实验步骤1、按实验内容用全屏幕编辑程序EDIT编写源程序te1.asm2、运用汇编源程序,产生目标文件.OBJ3、连接目标文件,产生可执行文件.EXE4、用DEBUG运行可执行文件。
微机原理实验 原理
微机原理实验原理
实验1:微机原理实验的实验目的
实验2:微机原理实验的仪器和材料
实验3:微机原理实验的实验步骤
实验4:微机原理实验的实验结果与分析
实验5:微机原理实验的实验结论
实验1:实验目的
本实验旨在通过使用微机原理实验仪器和材料,了解微机原理的基本原理和工作方式。
实验2:仪器和材料
本实验所需的仪器和材料包括微机原理实验仪器、计算机、电源线、串口通信线、示波器等。
实验3:实验步骤
1. 将微机原理实验仪器与计算机连接,确保连接稳定。
2. 打开电源线,将微机原理实验仪器通电。
3. 配置串口通信线,确保仪器与计算机之间的串口通信正常。
4. 在计算机上开启相关的软件程序,进行实验参数的设置与调整。
5. 根据实验要求,进行数据采集、数据处理以及实验结果的观察与记录。
6. 分析实验结果,根据实验目的得出相应的结论。
实验4:实验结果与分析
根据实验数据的采集和处理,我们得到了实验结果。
经过对实
验结果的分析和比较,可以得出以下结论:
- 实验结果符合预期,验证了微机原理的基本原理和工作方式。
- 实验过程中出现了一些异常情况,为了更好地理解这些异常
状况,需要进一步分析和研究。
实验5:实验结论
通过本次微机原理实验,我们深入了解了微机原理的基本原理和工作方式。
我们可以得出以下结论:
- 微机原理是计算机科学中的基础课程,对于理解和掌握计算
机系统的工作原理至关重要。
- 通过实验,我们可以进一步深入理解微机原理,为今后的学
习和科研工作奠定基础。
微机原理-实验一-汇编语言-冒泡排序
微机原理实验报告班级:XXXXX姓名:XXXX学号:20XXXXXXXXX大学信息科学与技术学院信息工程系实验一汇编语言程序设计-(具体题目)一、实验目的(根据实际情况修改):1、熟悉MASM编译环境,了解程序的汇编方法;2、熟悉常用汇编指令,学习汇编程序设计方法;3、学习汇编语言的调试过程,通过调试过程认识CPU执行程序的方式;4、了解冒泡法原理,学习多重循环的编程方法。
二、实验内容:编写程序,用冒泡法实现将数据段内9,8,7,6,5,4,3,2,1按照由小到大的顺序重新排列。
三、程序流程图和程序代码1、流程图2、代码与注释(代码不能和指导书完全一样,写出注释,写出寄存器尤其是DS的值)data segmentbuf1 db 8,7,6,5,4,3,2,1data endscode segmentassume cs:code,ds:datastart: mov ax,data //传送数据段datamov ds,axmov dx,7 //dx放外循环7次L3: mov cx,dx //cx放内循环7次lea si,buf1 //将db里的数据传送到siL2: mov al,[si]cmp al,[si+1] //比较[si]与[si+1]jb L1 //[si]<[si+1],跳转到L1xchg al,[si+1] //[si]>[si+1],两两交换mov [si],alL1: inc si //si减1loop L2 //循环L2dec dx //外循环减1,没减到0则跳转到L3 jnz L3 //入内循环,计数初值mov ah,4chint 21hcode endsend start四、调试过程及遇到的问题1、程序执行截图2、调试用到的命令-U命令:查看数据段地址;-d命令:查看运行前后存储器内容;-g命令:运行程序;-t命令:查看运行前后寄存器和存储器内容。
3、遇到的问题及解决办法问题:运行程序后,数据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单元开始的数据区中。
微机原理实验一8086清零实验
Before After
清零 写入值55h
目标地址增1
已循环256次?
yes
结束
可能用到的指令
MOV 值传送 INC 增加1 LOOP 循环 no LEA 地址传送命令
谢谢观赏
定义在数据段中定义一片长为256字节的空 间,并将此段空间写入数据
提示:可以定义初值为00h,也可定义初值 为ffh,写入数据与初值不同即可
实验环境介绍
• 实验箱的配套软件
• 如果不小心错过了,可以在这里找到
菜单栏、工具栏 asm格式
保存
新建程序文档
知识补充
• DOS基础知识 符合DOS标准的文件(夹)名
• 选择文件夹时要双击文件夹,选中后文件 夹呈打开的样子 否则会无法正常选中相应文件夹
编在译这、里重编新写编程译序 在这里会出现错误提示信息
知识补充
• 8086汇编程序基础格式
stack segment stack ……
stack ends 堆栈段
data segment ‘data’ ……
data ends 数据段
8.3格式文件名
文件夹名长度小于8个字符
符合标准的字符为数字、字母等ASCII字符 且不能为 / \ * : < > | 引号
注意事项
• 不要选择某个盘的根目录 若选择某个盘的根目录,则本次所建立 的所有文件会自动跳到C:\XingYan\下
• 不要使用不符合标准的文件名、文件夹名 否则会无法编译并报错
微机原理实验一8086 清零实验
实验前言
约法三章
• 带课本、带实验指导书! • 按时签到、按时交实验报告! • 请自重,不要在课堂上玩游戏!
关于做程序
微机原理实验报告
微机原理及接口技术实验报告班级:光094-2姓名:....学号:20091350429实验一熟悉宏汇编程序及debug一.实验目的1.学习并掌握汇编语言指令寻址方式2.熟悉在PC机上用DEBUG调试和运行汇编语言指令的过程。
二.实验内容根据给定寄存器内容及存储单元内容,运行给定指令,观察记录运行结果1、给定的寄存器内容及存储单元内容(DS)=2000H,(SI)=0002H,(BX)=0100H(20100H)=1H,(20101H)=34H,(20102H)=56H,(20103H)=78H,(21200H)=2AH,(21201H)=4CH,(21202H)=0B7H,(21203H)=65H2、指令(1)M OV AX,1200H(2)M OV AX,BX(3)M OV AX,[1200H](4)M OV AX,[BX](5)M OV AX,1100H[BX](6)M OV AX,[BX][SI](7)M OV AX,1100H[BX][SI]四.调试步骤1.运行DEBUG。
2.用A命令汇编指令(1)3.按给定寄存器和存储单元内容修改寄存器和存储单元内容。
4.单步运行指令,查看结果5.重复上述步骤,调试指令(2)——(7)指令寻址方式源操作数有效地址源操作数物理地址指令运行结果(AX)1 立即寻址 0100 20100 12002 寄存器寻址 0103 20103 01003 直接寻址 1200 21200 4c2a4 寄存器间接寻址0100 20100 34125 寄存器相对寻址1200 21200 4c2a6 基址变址寻址 0102 20102 78567 相对基址变址寻址1202 21202 65b7 六.思考题1、汇编语言指令有哪些寻址方式?用于寻址的寄存器有哪些?立即数寻址、直接寻址,寄存器寻址,寄存器间接寻址,寄存器相对寻址,基址变址寻址,基址变址相对寻址。
对于16位数据,寄存器可以是AX,BX,CX,DX,SI,DI,SP,BP; 对于8位数据,寄存器可以是AH,AL,BH,BL,CH,CL,DH,DL实验二寻址方式练习及多字节运算程序一.实验目的1.学习并掌握数据传送指令和算术运算指令2.熟悉在PC机上编辑、汇编、连接、调试与运行汇编语言程序的过程。
微机原理实验
实验一:两个多位十进制数相加
本程序将两个多位十进制数相加, 其中加数与被加 数均以ASCII码形式存放在以DATA1和DATA2为首的5 个内存单元中(低位在前), 相加结果被送回DATA1 处。
程序中先要把加数与被加数由十进制ASCII码转化 为十六进制的数字串, 然后将它们进行带进位相加并 作AAA调整,最后将结果保存。 程序流程图见下页:
实验二:排序
本程序将数据区中的10个数由小到大排序,而且 排序后的数, 仍存放在该区域中。 程序采用冒泡法,设置了内、外两层循环, 其中 在第 i 次外循环中通过(10 - i)次内循环找出剩下 数中的最小数, 然后与当前数进行交换,从而完成 排序。 程序流程图见下页。
实验三
一、实验目的
RAM 实验
微机原理课程实验
实验一:两个多位十进制数相加 实验二:排序 实验三 RAM 实验
《微机原理》是一门对实际动手能力要求比较高 的学科。由于《微机原理》课程的实验种类繁多,但 课时有限,我们选择了比较具有代表性的几个实验。 该课程在硬件方面着重讨论了8086的体系结构、接口 技术 及其应用等。而这些硬件方面的内容如果能够结 合实际动手进行实验,将获得较佳的学习效果。
1、熟悉6116静态RAM的使用方法,掌握PC机外存扩充的手段。 2、了解PC机62芯总线信号的定义,领会总线及总线标准的意 义。 3、通过对硬件电路的分析,了解总线的工作时序。
二、实验内容 对指定地址的RAM进行数据读/写
1、将硬件电路连接好,如左图所示。 2、编制程序,将A--Z26个字符序列寸入A0000~A07FF单元, 再从中读出并显示在屏幕上。 3、使用DEBUG的F命令,填充6116RAM的A000:0000~07FF单元 全'A'字符,再填充A000:0800~0FFF单元全为'B'字符
《微机原理实验报告》word版
班级自动化学号姓名实验一系统认识实验一实验目的掌握教学系统的基本操作二实验设备PC机一台masm软件三实验内容及步骤(1)输入程序并检查无误,经汇编连接后装入系统(2)输入E3500后回车,在3500-3510单元中分别送入00~09十个数据(3)按“T“键运行以上程序直至程序运行完(4)输入D3600后回车,查看3600单元后面的数据四程序及其显示的结果(1)程序(2)显示的结果实验三运算类编程实验一实验目的(1)掌握使用运算类指令编程及调试方法(2)掌握运算类指令对各状态标志位的影响及其测试方法二实验设备PC一台masm软件三实验内容及步骤(1)二进制双精度加法运算(2)输入程序并检查无误,经汇编连接后装入系统(3)用U0000:2000查看MOV AX,DA TA的语句,即得到数据段段位置CS:1412用E命令E1412:0000回车,给XL,YL,YH赋值存入二进制数A0,65,15,00和9E,B7,21,00(4)用G=0000:2000,运行以上程序(5)输入D1412:0008,检验显示的结果是否为:3E,1D,17,00四实验程序五程序显示的结果实验四分支程序设计实验一实验目的:(1)掌握分支程序的结构(2)掌握分支程序的设计,调试方法二实验设备:PC机一台masm软件三实验内容设计一数据块间的搬移程序。
设计思想:程序要求把内存中一数据区传送到另一存储区。
源数据块和目的数据块在存储中可能有三种情况,对于两个分离的情况,数据的传送从数据块的首位置开始,或者从数据块的末位置开始。
但对于有部分重叠的情况,则要加以分析,否则重叠部分会因搬移而遭到破坏,可以得到以下结论:(1)当源数据块首址大于目的块首址时,从数据块首址开始传送数据。
(2)当源数据块首址小于目的块首址时,从数据块末址开始传送数据。
四实验步骤(1)按实验流程图设计编写实验程序(2)输入程序并检查无误后,经汇编,连接后装入系统(3)用E命令在以SI为起址的单元中填入十六个数(4)用G=0000:2000运行实验程序(5)用D命令查看DI为起址的单元中的数据是否与SI单元中数据相同五实验程序及结果显示(1)实验程序(1)实验结果显示实验五循环程序设计一实验目的(1)加深对循环结构的理解(2)掌握循环结构程序设计的方法(3)熟练掌握调试循环程序的方法二实验设备:PC机一台masm软件三实验内容求数据区内负数的个数:设数据区的第一单元存放区内单元数据的个数,从第二单元开始开始存放数据,在区内最后一个单元存放结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
屏幕显示输出单个字符使用2号DOS功能调用,入口参数送DL寄存器。
(本题的目的就是让上机实验者亲历使用和体验一下DOS功能调用,来为下一次的实验热
身。)
要求: * 在程序运行时,先输入的小写字母在随后“自动”显示大写字母时仍在屏幕上。
* 至少能正确实现一个英文字母大小写的转换且能正常返回DOS即可,而不论转换字
图三:第一遍扫视主要流程
第二遍扫视(PASS2)产生机器指令代码、确定数据等,产生相应的 OBJ、LST 和 CREF 文件。
图四:第二遍扫视主要流程
2. 如何解决变量和标号的“向前引用”问题?地址“浮动”意味着什么? 答:在汇编语言的操作数字段中出现变量或标号时,若该变量或符号尚未定义,
则称为“前向引用”。 因为指令长度与操作数类型有关,而操作数类型则与有关变 量或标号的类型有关。在向后引用时,这些都是确定值,但向前引用时就会发生困 难了。
MOV AX,STACK
MOV SS,AX 是将STACK段基址送给SS,之所以分为两步是因为不能在两个段寄存器之间直接传 送数据,接下来的PUSH DS是将DS的值放到栈中暂时保存下来,因为下面字符串输 出的时候需要改变DS的值,下面两行代码
MOV AX,0 PUSH AX 将0000H压入栈中,这是因为在子过程结束后,执行RET返回命令后,因为是远调用, 会先从栈中弹出两个字节为IP赋值,然后弹出两个字节为CS赋值以便返回主程序。 我们知道,在AH=9时,INT21的功能是显示字符串,串地址为DS:DX,‘$’为结束符。 所以下面的四行代码
母的个数和转换方式。
* 类同第1题的要求,使用调试程序debug来分析自编的该程序
2.1 程序的算法思想
a.本题中所做程序主要功能是在DOS界面显示说明语句:“Please input a small word:”并且将一个从键盘输入的小写字母转换成大写字母显示在DOS界面。
b.程序中定义了三个段:DATA、STACK和CODE。
一、实验内容和过程
注:由于实验内容有两个题目,为了写实验报告时思路的连贯性,对于实验内容和过程两个题目分开写。
1.0 实验内容原题 1.请先充分分析和理解课件的源程序,然后输入、编辑该程序,并完成对其汇编、连
接、运行等操作过程。再用调试程序debug来查看、记录(建议使用表格形式)和分析 CS、IP、DS、ES、SS、SP以及AX、DX等程序中所使用到的和自己感兴趣的寄存器(例 如标志寄存器),在该程序执行前、执行过程、执行结束(出现有“Program terminated normally”提示信息)返回DOS等各个步骤的状态值,亲历查验程序运行的各个环节的 状态(包括查看数据段、堆栈段的存储内容),全面分析和充分理解汇编语言源程序 的组成,以及DOS系统平台调用执行程序的过程(包括返回DOS状态的操作原理)。
三、实验心得
本次实验是微机原理这门课的第一次上机实验,上机之前就比较激动,因为本身也 是特别喜欢这门课,终于可以把学到的知识通过实践来自己操作。而实验课上,老师的 风趣幽默和博闻强识更加深了我对上机课的喜爱。因此,实验课结束后更激动。
在本节实验课上,我课前认真预习实验讲义,在上机实验课上熟悉了汇编语言程序 设计上机实验的计算机软硬件平台,熟悉了汇编语言程序设计上机实验的过程,掌握了 汇编语言源程序的编辑及对其汇编、连接、运行的过程,并且学会了使用DEBUG调试 和运行程序的方法。并且自己写了一个汇编的小程序,非常有成就感。
1.1 程序的算法思想
a.例题中程序的主要功能是在DOS界面输出字符串“This is a sample program.”, 并自动换行。
b.程序中定义了三个段DATA、STACK和CODE。
DATA中以DA1为偏移地址的名定义了一个字符串“This is a sample program.” 和三个字符,其中0DH是CR(即回车)的ASCII码,0AH是LF(即换行)的ASCII码,$是 后续显示字符串功能的结束字符串标志。
应写
码
参数
调号
从
从
过结
义结
汇编
结
输写
二、实验思考的回答
1. 汇编程序的任务是什么?汇编程序对源文件进行两遍扫视的过程是什么? 答:汇编程序的任务是把汇编语言源程序模块转换为二进制的目标模块,其汇
编过程包括语法检查并指出错误(如非法格式,未定义符号等),能按用户要求自 动分配存储区(程序区、数据区、堆栈区),自动把各种进制数转换成二进制数, 以及计算表达式值等,以最终生成目标目标文件和辅助信息文件(即列表文件和交 叉引用文件)。
在此过程中遇到的两个还没解决的小问题是关于DOSBox窗口的问题,第一是怎么能 将DOSBox窗口放大而字体不放大,第二是怎样可以实现DOSBox窗口中的翻页问题。问题 一是因为实验中确实觉得窗口太小用着不舒服,在网上找了一些方法也试了一下,但是 大多都是在将窗口放大的同事将字体也放大了。问题二是因为在DEBUG的过程中,有时 候想要上下对比但是并不能翻页看到前一页的内容所以很苦恼,希望能在老师的帮助下 得到解决。
非常期待下一次的实验课。谢谢老师!
MOV AX,DATA MOV DS,AX MOV AH,9 MOV DX ,OFFSET DA1 是在为字符串输出做准备。将字符串段地址DATA赋值给DS,字符串偏移地址DA1赋 值给DX,9赋值给AH,则执行INT 21H时,字符串“This is a sample program.”和回 车就显示在DOS界面上。RET返回原地址,MAIN EDNP表示MAIN过程结束。CODE ENDS 表示CODE段结束。END START表示汇编源程序结束。 1.2 程序的流程图
例如汇编程序MASM在翻译"JMP NEXT"指令时,若NEXT未定义(前向引 用),MASM不知道NEXT与JMP的距离,此时,MASM默认其缺省属性NEAR而假定它们 在同一段,且假定其距离大于-128~+127。 但是MASM的假定有时不符合程序的实 际情况,则将会产生错误的机器码,为了避免这种情况,在编写程序时,如果有前向引 用,应指明引用的属性(距离)。
值; 3)确定所有汇编程序所不能确定的偏移地址值(包括浮动地址及外部符号所
对应的地址); 4)构成装入模块,并把它装入存储器 5.使用Debug进行程序调试有哪些收获? 答: DEBUG在程序调试的过程中有强大的功能,由于其功能的全面,可以方便地分 步对代码进行调整,可以清楚地看到每一步寄存器以及标志位的状态。例如-D,R,-G,-T,-U都是本次实验过程中常用的调试功能。如果汇编程序存在问题的话,能 非常方便快捷地找到汇编程序的问题所在。由于本次试验较为简单,所以并没有用 其来发现一些错误,只是利用debug的功能更深入的对程序运行过程进行了了解。 而关于利用debug来发现问题,解决问题的技巧等方面,还需后续做了更多的实验 再来总结。
STACK中定义了一个栈,这个栈内定义了100个字节的空间,但是没有放入具体 内容。
CODE中定义了一个MAIN过程,MAIN过程中的FAR说明了是段间调用,ASSUME指明 了段寄存器与段基址的对应关系。在此处即为CS对应CODE,DS对应DATA,SS对应 STACK。START标志着汇编程序的一个标号,定义了程序的入口。接着的两行代码
由于物理零地址区是由系统占用的,因而用户程序的各段都起始于某个非零 地址。亦即段起始地址要在零地址的基础上“浮动”一个值,而此值要在连接时才 能确定。所以变量和标号都是浮动地址,如果指令的操作数字段涉及到变量或标 号,那么由汇编程序确定的指令字中的值即为浮动值,此即所谓的“浮动地址”。
在LST文件中,浮动地址以R标记(Relocation)。 事实上就一个程序模块本身来说,“浮动地址”并无实质影响。若是出现多个 程序模块相连接的情况,当连接程序把几个模块中的某些段连接在一起形成一个 段时,地址的浮动就会直接影响机器指令代码,此时连接程序就非常有必要或说 是必须要修改各个模块程序中标以R的地址值,以得到正确的机器指令。 3.指令的物理地址是如何构成的? 答:指令的物理地址是在连接过程中确定的。 连接程序LINK把目标模块OBJ文件(一个或多个)中的各段连接成一个整体即 “EXE文件”。汇编得到的OBJ文件虽然已是源程序对应的二进制机器码,但该文件 不能直接运行,因为OBJ文件中的各段是独立的,它们的起始地址均被设为0,各 段没有形成一个整体。这就需要连接程序LINK来将OBJ文件中的各段连接成一个整 体即“EXE文件”。
开始
打印 DATA:DA1 处的字符串
结束
图一:程序一流程图
1.3 程序的清单(源程序)
数
数区
车
换
栈
栈区
节
结 标识
码 远调 过
栈区
栈
为时 值
栈为
值
数区
数区
调号
输
从
过结
义结
汇编
结
2.0 实验内容原题
2.请编写一个汇编源程序,实现从键盘输入的小写字母用大写字母在屏幕上显示出来。
提示:键盘输入单个字符并回显使用1号DOS功能调用,出口参数在AL寄存器。
2.2 程序的流程图
开始
输出提示语:“Please input a small word:”
输入小写字母
将其 ASCII 码减 32
输入小写字母
输出大写字母
结束
图二:程序二流程图
2.3 程序的清单(源程序)
数
数区输
车
换
结 标识
栈
栈区
节
码 远调 过
栈区 栈
为时 值
栈为时值
数区
数区
调号
输
调号
从键盘获 写
DATA段定义了一个字符串Please input a small word。
STACK段定义了一个长度为100字节的栈。