华中科技大学汇编实验报告6

合集下载

华中科技大学计算机原理实验报告

华中科技大学计算机原理实验报告

电气学科大类《计算机原理与应用实验》课程实验报告电气与电子工程学院级姓名:学号:专业班号:日期:2014年1月7日实验成绩:评阅人:实验评分表目录实验评分表错误!未指定书签。

实验一:软件安装与使用错误!未指定书签。

一、实验目的错误!未指定书签。

二、实验设备错误!未指定书签。

三、实验任务错误!未指定书签。

四、实验原理错误!未指定书签。

五、实验内容错误!未指定书签。

六、实验过程及结果错误!未指定书签。

七、实验感想八、参考文献实验二:汇编语言实例讲解与程序编写一、实验目的二、实验设备三、实验任务四、实验原理五、实验内容六、实验过程及结果七、实验感想八、参考文献实验三:基于软件的最小系统硬件设计一、实验目的二、实验设备三、实验任务四、实验原理五、实验内容六、实验过程及结果七、实验感想八、参考文献实验四:基于最小系统的汇编程序设计一、实验目的错误!未指定书签。

二、实验设备错误!未指定书签。

三、实验任务错误!未指定书签。

四、实验原理错误!未指定书签。

五、实验内容六、实验过程及结果七、实验感想八、参考文献实验五:并行接口实验(演示实验)一、实验目的二、实验设备三、实验任务四、实验原理五、实验内容六、实验过程及结果七、实验感想八、参考文献实验六:工频测频接口电路设计与实现一、实验目的二、实验设备三、实验任务四、实验原理五、实验内容六、实验过程及结果七、实验感想八、参考文献实验一:软件安装与使用一、实验目的通过本实验学习软件的安装与使用。

二、实验设备微机一台,仿真软件三、实验任务.安装仿真软件。

.利用仿真软件编程。

四、实验原理仿真软件就是在下的一种仿真软件,它可以仿真模拟的程序运行,并且可以直观地观察寄存器的变化情况。

结合了一个先进的原始编辑器、组译器、反组译器、具除错功能的软件模拟工具(虚拟),还有一个循序渐进的指导工具。

这对刚开始学组合语言的人会是一个很有用的工具。

它会在模拟器中一步一步的编译程序码并执行,视觉化的工作环境让它更容易使用。

华中科技大学计算机系统基础实验报告

华中科技大学计算机系统基础实验报告

课程实验报告课程名称:计算机系统基础专业班级:学号:姓名:指导教师:报告日期:2016年5月24 日计算机科学与技术学院目录实验1: (2)实验2: (9)实验3: (22)实验总结 (30)实验1:数据表示1.1 实验概述本实验的目的是更好地熟悉和掌握计算机中整数和浮点数的二进制编码表示。

实验中,你需要解开一系列编程“难题”——使用有限类型和数量的运算操作实现一组给定功能的函数,在此过程中你将加深对数据二进制编码表示的了解。

实验语言:c; 实验环境: linux1.2 实验内容需要完成bits.c 中下列函数功能,具体分为三大类:位操作、补码运算和浮点数操作。

1.3 实验设计源码如下:/** lsbZero - set 0 to the least significant bit of x* Example: lsbZero(0x87654321) = 0x87654320* Legal ops: ! ~ & ^ | + << >>* Max ops: 5* Rating: 1*/int lsbZero(int x) {//x右移一位再左移一位实现把最低有效位置0x = x>>1;x = x<<1;return x;}/** byteNot - bit-inversion to byte n from word x* Bytes numbered from 0 (LSB) to 3 (MSB)* Examples: getByteNot(0x12345678,1) = 0x1234A978* Legal ops: ! ~ & ^ | + << >>* Max ops: 6* Rating: 2*/int byteNot(int x, int n) {//x第n个字节每位都和1异或实现取反int y = 0xff;n = n<<3;y = y<<n;x = (x^y);return x;}/** byteXor - compare the nth byte of x and y, if it is same, return 0, if not, return 1* example: byteXor(0x12345678, 0x87654321, 1) = 1* byteXor(0x12345678, 0x87344321, 2) = 0* Legal ops: ! ~ & ^ | + << >>* Max ops: 20* Rating: 2*/int byteXor(int x, int y, int n) {//把x和y的第n个字节取出来异或,再转换为逻辑的0和1n = n<<3;x = x>>n;y = y>>n;x = x&(0xff);y = y&(0xff);return !!(x^y);}/** logicalAnd - x && y* Legal ops: ! ~ & ^ | + << >>* Max ops: 20* Rating: 3*/int logicalAnd(int x, int y) {//把x和y分别转化为逻辑的0和1,再相与x = (!(!x))&(!(!y));return x;}/** logicalOr - x || y* Legal ops: ! ~ & ^ | + << >>* Max ops: 20* Rating: 3*/int logicalOr(int x, int y) {//把x和y分别转化为逻辑的0和1,再相或x = (!(!x))|(!(!y));return x;}/** rotateLeft - Rotate x to the left by n* Can assume that 0 <= n <= 31* Examples: rotateLeft(0x87654321,4) = 0x76543218* Legal ops: ~ & ^ | + << >> !* Max ops: 25* Rating: 3*/int rotateLeft(int x, int n) {//先构造低n位为1,高(32-n)位为0的数z,x左移n位后的数加上x右移(32-n)位的数&z即可int z;z = ~(((1<<31)>>31)<<n);x = ((x>>(32+(~n+1)))&z)+(x<<n);return x;}/** parityCheck - returns 1 if x contains an odd number of 1's* Examples: parityCheck(5) = 0, parityCheck(7) = 1* Legal ops: ! ~ & ^ | + << >>* Max ops: 20* Rating: 4*/int parityCheck(int x) {//每次将数的低半数位与高半数位比较,再把y右移31位,最后把y转化为逻辑的0和1int y;y = x<<16;y = y^x;y = y^(y<<8);y = y^(y<<4);y = y^(y<<2);y = y^(y<<1);y = y>>31;return !(!y);}/** mul2OK - Determine if can compute 2*x without overflow* Examples: mul2OK(0x30000000) = 1* mul2OK(0x40000000) = 0** Legal ops: ~ & ^ | + << >>* Max ops: 20* Rating: 2*/int mul2OK(int x) {//把x第31位和30位分别和1做按位与,再异或,再和1异或int m;m = ((x>>31)&0x1)^((x>>30)&0x1);return m^0x1;}/** mult3div2 - multiplies by 3/2 rounding toward 0,* Should exactly duplicate effect of C expression (x*3/2),* including overflow behavior.* Examples: mult3div2(11) = 16* mult3div2(-9) = -13* mult3div2(1073741824) = -536870912(overflow)* Legal ops: ! ~ & ^ | + << >>* Max ops: 12* Rating: 2*/int mult3div2(int x) {//左移一位再+x即x*3,右移一位的时候,当y的最高位和最低位都为0时还要+1int y = (x<<1)+x;y = (y>>1)+(((y>>31)&1)&(((y<<31)>>31)&1));return y;}/** subOK - Determine if can compute x-y without overflow* Example: subOK(0x80000000,0x80000000) = 1,* subOK(0x80000000,0x70000000) = 0,* Legal ops: ! ~ & ^ | + << >>* Max ops: 20* Rating: 3*/int subOK(int x, int y) {//x的最高有效位和y的最高有效位不同且x和(x-y)的最高位不同才能判断溢出int m = (x>>31)&1;int n = (y>>31)&1;x = (m^n)&(m^(((x+(~y+1))>>31)&1));return (!x);}/** absVal - absolute value of x* Example: absVal(-1) = 1.* You may assume -TMax <= x <= TMax* Legal ops: ! ~ & ^ | + << >>* Max ops: 10* Rating: 4*/int absVal(int x) {//x最高位为0时就是x,最高位为1时是~x+1int y = x>>31;x = (y&(~x+1))+((~y)&x);return x;}/** float_abs - Return bit-level equivalent of absolute value of f for * floating point argument f.* Both the argument and result are passed as unsigned int's, but * they are to be interpreted as the bit-level representations of * single-precision floating point values.* When argument is NaN, return argument..* Legal ops: Any integer/unsigned operations incl. ||, &&. also if, while* Max ops: 10* Rating: 2*/unsigned float_abs(unsigned uf) {int x=uf&(~(1<<31));if(x>0x7f800000){return uf;}else return x;}/** float_f2i - Return bit-level equivalent of expression (int) f* for floating point argument f.* Argument is passed as unsigned int, but* it is to be interpreted as the bit-level representation of a* single-precision floating point value.* Anything out of range (including NaN and infinity) should return * 0x80000000u.* Legal ops: Any integer/unsigned operations incl. ||, &&. also if, while* Max ops: 30* Rating: 4*/int float_f2i(unsigned uf) {unsigned num=0x80000000;int x=(uf&0x007fffff)^0x00800000;int order=0;order=(uf&0x7f800000)>>23;if(order>158){return num;}if(order<127) return 0;else if(((uf>>31)&1)==1){if(order>150){return ~(x<<(order-150))+1;}else return ~(x>>(150-order))+1;}else{if(order>150) return x<<(order-150);else return x>>(150-order);}}1.4 实验过程编写源码,运行btest,得出实验结果。

华中科技大学汇编实验报告-推荐下载

华中科技大学汇编实验报告-推荐下载

课程实验报告课程名称:汇编语言程序设计实验实验名称:实验一简单程序设计 TD的使用实验时间: 2016-3-22,14:00-17:30 实验地点:南一楼804室74号实验台指导教师:张勇专业班级:计算机科学与技术201409班学号:U201414813 姓名:唐礼威同组学生:无报告日期:2016年 3 月23日原创性声明本人郑重声明:本报告的内容由本人独立完成,有关观点、方法、数据和文献等的引用已经在文中指出。

除文中已经注明引用的内容外,本报告不包含任何其他个人或集体已经公开发表的作品或成果,不存在剽窃、抄袭行为。

特此声明!学生签名:日期:成绩评定实验完成质量得分(70分)(实验步骤清晰详细深入,实验记录真实完整等)报告撰写质量得分(30分)(报告规范、完整、通顺、详实等)总成绩(100分)指导教师签字:日期:查和对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查,并中资试卷目录1实验目的与要求 (1)2实验内容 (1)3实验过程 (2)3.1任务1 (2)3.1.1设计思想及存储单元分配 (2)3.1.2流程图 (2)3.1.3源程序 (2)3.1.4实验步骤 (2)3.1.5实验记录 (2)3.2任务2 (4)3.2.1设计思想及存储单元分配 (4)3.2.2流程图 (4)3.2.3源程序 (4)3.2.4实验步骤 (4)3.2.5实验记录 (4)3.3任务3 (6)3.3.1设计思想及存储单元分配 (6)3.3.2流程图 (6)3.3.3源程序 (6)3.3.4实验步骤 (7)3.3.5实验记录 (7)4体会 (7)参考文献 (8)1实验目的与要求掌握汇编源程序编译工具、汇编程序、连接程序、调试工具的使用;理解数、符号、寻址方式等在计算机内的表现形式;理解指令执行与标志位之间的关系;熟悉常用的DOS功能调用。

2实验内容任务1. 《80X86汇编语言程序设计》教材中P31的1.14题。

华科汇编第一次实验报告

华科汇编第一次实验报告

汇编实验报告姓名:班级:CS1209 学号:一、实验目的(1) 掌握汇编源程序开发的过程:编译、汇编MASM、连接LINK、用TD调试。

(2)编写简单的汇编代码,加强对汇编语言的理解。

二、实验内容及要求(1)、《80X86汇编语言程序设计》P299中的程序实例。

要求:重复7.4.3节中的整个过程,初步掌握TD的使用方法。

(2)、《80X86汇编语言程序设计》P31中的1.14题。

要求:直接在TD中输入指令进行求和(如MOV AH, x1、MOV AL, x2、ADD AH, AL),记录执行指令后标志位SF、OF、CF、ZF的值(验证自己的作业情况)。

(3)、编写程序缓冲区BUF中有若干个有符号短整数(2个字节),找出其中的绝对值最大的数并存放到变量RESULT中。

要求:在BUF中定义不同的正负数,用TD查看变量RESULT的值是否正确。

三、实验步骤题目一,从键盘中输入一个字符,若该字符为‘1’,则在下一行输出字符串‘11111111111!’后返回DOS;若该字符为‘2’,则在下一行输出字符串‘22222222222!‘后返回DOS;若该字符为其他字符,则在下一行输出字符串’Other Character’后返回DOS。

通过TD调试找出下面代码的错误并改正。

1、用记事本建立汇编源程序文件WAN.ASM.386STACK SEGMENT USE16 STACKDB 200 DUP(0)STACK ENDSDATA SEGMENT USE16BUF1 DB 0AH,0DH,'1111111111! $'BUF2 DB 0AH,0DH,'2222222222! $'BUF3 DB 0AH,0DH,'Other Character!',0AH,0DHDATA ENDSCODE SEGMENT USE16ASSUME DS:DATA,CS:CODE,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV AH,1INT 21H ;等待从键盘输入一个字符CMP AL,'1'JE A1CMP AL,'2'JE A2JMP A3A1: LEA DX,BUF1MOV AH,9INT 21HA2: LEA DX,BUF2MOV AH,9INT 21HA3: LEA DX,BUF3MOV AH,9INT 21HEXIT: MOV AH,4CHINT 21HCODE ENDSEND START2.编译连接该程序3.运行程序中出现了如下问题。

华中科技大学电力系统综合实验报告汇编

华中科技大学电力系统综合实验报告汇编

电力系统综合实验报告第一部分综合实验台1、实验目的通过实验加深对电力系统暂态稳定性内容的理解,在对不同类型短路数据的分析中锻炼独立思考的能力,进一步了解不同短路故障对电力系统的危害。

实验方式为在理想实验台上模拟最简单的电力系统暂态稳定性问题,以期巩固学生在前一阶段的学习中对相关内容的掌握。

2、实验原理与接线电力系统中不同类型的短路故障引起的最大短路电流可由下式得到,推导过程可参见《电力系统分析》一书相关章节内容。

单相接地短路:两相相间短路:两相接地短路:三相对称短路:如下图1实验接线模拟了单机无穷大系统。

图1单机无穷大系统3、实验结果与数据分析⑴、不同故障类型对短路电流影响在下表中根据QF1~QF6的开断来选择单机无穷大系统的运行方式。

XL1接入双回线运行、XL2接入双回线运行。

表格 1 短路切除时间0.5s单相接地短路实验数据表格 3 短路切除时间0.5s两相接地短路实验数据根据以上表格得出以下结论:1)在各种不同类型的短路中,系统以双回线运行时短路电流较系统单回线运行时短路电流更大,与序网分析结果一致。

2)在各种不同类型的短路中,XL1接入时短路电流相对XL2接入时短路电流更小,以单相短路为例进行分析,可知接入XL阻抗越小,短路电流越大。

判断实验台设置中XL1大于XL2。

3)对比各组实验数据,发现短路电流大小在不同短路类型中呈现有以下关系。

两相相间短路两相接地短路三相接地短路单相接地短路根据相关实验原理分析,由于,一般有三相接地短路两相接地短路单相接地短路两相相间短路。

实验台中元件参数不可测量,经分析判断本次实验中负序阻抗偏小导致了两相短路电流偏大的现象发生。

4)小组实验中发现通过实验台面板调节似乎无法改变内部默认参数,继电器动作阈值无法重新整定,动作电流始终为5A,导致实验中多次出现未按预期跳闸的现象发生。

可能因为设备老化或内部模块未连接。

⑵、不同故障切除时间对短路电流影响表格 5 不同短路切除时间最大短路电流记录由I第二部分 动模实验记录的量:故障线路首端和末端电压电流(6个波形)电压电流的测量可以通过电压电流表计模型测量,也可以通过断路器和节点测量。

汇编语言实验报告_6

汇编语言实验报告_6

青岛理工大学课程实验报告
课程名称汇编语言程序设计班级实验日期
2013.11.3
姓名学号实验成绩
实验
名称
子程序
实验目的及要求1.掌握子程序设计相关指令和伪指令的使用方法
2.掌握子程序设计方法, 特别是参数传递方法
3.掌握主程序和子程序之间的调用关系和调用方法
4.熟悉循环和子程序结合应用解答问题的思路
实验环境1.命令行方式
2.MASM.EXE LINK.EXE DEBUG.EXE
实验内容1.设DATA1开始的内存单元中, 存放着一串带符号字数据, 要求采用冒泡排序算法(Bubble Sort)按照从小到大的顺序排序并将排好序的数据存在DATA1开始的单元。

然后在显示器输出排好序的数据, 中间用’,’隔开。

2.输出数据使用子程序方式。

算法描述及实验步骤步骤:
(1)设置数据段地址
(2)设置堆栈段地址
(3)设置堆栈指针
(4)调用9号功能, 输出一个提示性字符串。

(5)循环进入子程序, 输出原始数据。

(6)在子程序内循环输出每一位的十进制数字。

(7)主程序进行内外循环, 进行冒泡排序。

(8)再一次调用子程序输出排序后的结果。

调试过程及实验结果调试过程:
(2)(1)在输出时, 调用DOS 9号功能, 并不是只要语句MOV AH,09H
(3)它是存在入口条件的, 入口条件:DS:DX=输出字符缓冲区首地址。

所以前面必须加上MOV DX,OFFSET NOTE1。

(4)汇编语言是不会再输出汉字的。

(5)子程序结束时一定要有RET
(6)冒泡排序也遇到一些困难。

调试结果:。

汇编实验报告

汇编实验报告

汇编语言实验报告学院:计算机学院专业:网络工程指导老师:纪平实验一汇编语言程序调试方法一、实验目的,1,熟悉汇编语言运行环境和方法2,了解如何使用汇编语言编制程序3,熟悉debug有关命令的使用方法4,利用debug掌握有关指令的功能5,利用debug运行简单的程序段二、实验内容1,学会输入、编辑汇编语言程序2,学会对汇编语言程序进行汇编、连接和运行3,进入和退出debug程序4,学会debug中的D命令、E命令、R命令、T命令、A命令、G命令等的使用。

对于U命令、N命令、W命令等,也应试一下。

三、实验准备1,仔细阅读有关汇编语言环境的内容,事先准备好使用的例子。

2,准备好程序清单、设计好调试步骤、测试方法、对运行结果的分析3,编写一个程序:比较2个字符串所含的字符是否相同。

若相同则显示’Match.’,否则显示’No match!’。

4,仔细阅读有关debug命令的内容,对有关命令,都要事先准备好使用的例子。

四、实验步骤1,在DOS提示符下,进入masm目录。

2,在MASM目录下启动edit编辑程序,输入源程序,并对其进行汇编、连接和运行。

(1)调用edit输入、编辑源程序并保存在指定的目录中。

例:edit abc.asm(2)用汇编程序masm对源程序汇编产生目标文件obj。

例:masm abc(3)用连接程序link产生执行文件exe。

例:link abc(4)执行程序3,详细记录每一步所用的命令,以及查看结果的方法和具体结果。

五、实验结果1,输入sample.asm的源码;PROGRAM TITLE GOES HERE--Compare string;************************************************************************** **datarea segment ;define data segmentstring1 db 'Move the cursor backward.'string2 db 'Move the cursor backward.';mess1 db 'Match',13,10,'$'mess2 db 'No match!',13,10,'$'datarea ends;************************************************************************** **program segment ;define code segment;----------------------------------------------------------------------------main proc farassume cs:program,ds:datarea,es:datareastart: ;starting execution address;set up stack for returnpush ds ;save old data segmentsub ax,ax ;put zero in AXpush ax ;save it on stack;set DS register to current data segmentmov ax,datarea ;datarea segment addrmov ds,ax ;into DS registermov es,ax ;into ES register;MAIN PART OF PROGRAM GOES HERElea si,string1lea di,string2cldmov cx,25repz cmpsbjz matchlea dx,mess2jmp short dispmatch:lea dx,mess1disp:mov ah,09int 21hret ;return to DOSmain endp ;end of main part of program;--------------------------------------------------------------------program ends ;end of code segment;****************************************************************** **end start ;end assembly2,汇编生成目标文件3,连接生成exe文件4,执行程序5,调试程序-g命令在debug环境下运行该文件-d0(-d ds:ea)命令显示指定数据段地址中的内容-u命令显示汇编源程序-e ds:ea更改指定位置的内容实验二用DEBUG编程使用堆栈段AX和BX的内容进行交换等一、实验目的:1、熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。

华中科技大学汇编实验报告6

华中科技大学汇编实验报告6

华中科技大学汇编实验报告6————————————————————————————————作者:————————————————————————————————日期:ﻩ课程实验报告课程名称:汇编语言程序设计实验实验名称:实验六输入输出与中断处理程序设计实验时间: 2016-4-26,14:00-17:30实验地点:南一楼804室74号实验台指导教师:张勇专业班级:计算机科学与技术201409班学号: U201414813姓名:唐礼威同组学生:无报告日期:2016年 5 月2日原创性声明本人郑重声明:本报告的内容由本人独立完成,有关观点、方法、数据和文献等的引用已经在文中指出。

除文中已经注明引用的内容外,本报告不包含任何其他个人或集体已经公开发表的作品或成果,不存在剽窃、抄袭行为。

特此声明!学生签名:日期:成绩评定实验完成质量得分(70分)(实验步骤清晰详细深入,实验记录真实完整等)报告撰写质量得分(30分)(报告规范、完整、通顺、详实等)总成绩(100分) 指导教师签字:日期:ﻬ目录1ﻩ实验目的与要求 (1)2实验内容ﻩ13实验过程2ﻩ3.1任务12ﻩ3.1.1ﻩ设计思想及存储单元分配........................................................... 错误!未定义书签。

3.1.2ﻩ流程图..................................................................................................................... 23.1.3ﻩ源程序2ﻩ3.1.4实验步骤 (3)3.1.5实验记录3ﻩ3.2ﻩ任务2.................................................................................................. 错误!未定义书签。

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

华中科技大学汇编实验报告6课程实验报告课程名称:汇编语言程序设计实验实验名称:实验六输入输出与中断处理程序设计实验时间: 2016-4-26,14:00-17:30 实验地点:南一楼804室74号实验台指导教师:张勇专业班级:计算机科学与技术201409班学号:U201414813 姓名:唐礼威同组学生:无报告日期:2016年 5 月2日原创性声明本人郑重声明:本报告的内容由本人独立完成,有关观点、方法、数据和文献等的引用已经在文中指出。

除文中已经注明引用的内容外,本报告不包含任何其他个人或集体已经公开发表的作品或成果,不存在剽窃、抄袭行为。

特此声明!学生签名:日期:成绩评定指导教师签字:日期:目录1实验目的与要求 (3)2实验内容 (3)3实验过程 (4)3.1任务1 (4)3.1.1设计思想及存储单元分配 (4)3.1.2流程图 (4)3.1.3源程序 (4)3.1.4实验步骤 (6)3.1.5实验记录 (7)3.2任务2 (7)3.2.1设计思想及存储单元分配 (7)3.2.2流程图 (9)3.2.3源程序 (9)3.2.4实验步骤 (12)3.2.5实验记录 (12)3.3任务3 (14)3.3.1设计思想及存储单元分配 (14)3.3.2流程图 (14)3.3.3源程序 (14)3.3.4实验步骤 (17)3.3.5实验记录 (17)4体会 (18)参考文献 (19)1实验目的与要求(1) 掌握中断矢量表的概念;(2)熟悉I/O访问,BIOS功能调用方法;(3) 掌握实方式下中断处理程序的编制与调试方法。

2实验内容任务1:用三种方式获取中断类型码10H对应的中断处理程序的入口地址。

要求:首先要进入虚拟机状态,然后(1)直接运行调试工具(TD.EXE),观察中断矢量表中的信息。

(2)编写程序,用DOS系统功能调用方式获取,观察功能调用相应的出口参数与“(1)”看到的结果是否相同(使用TD观看出口参数即可)。

(3)编写程序,直接读取相应内存单元,观察读到的数据与“(1)”看到的结果是否相同(使用TD观看程序的执行结果即可)。

任务2:编写一个接管键盘中断的中断服务程序并驻留内存,要求在程序返回DOS 操作系统后,键盘的按键A变成了按键B,而B变成了A。

要求:(1)在DOS虚拟机或DOS窗口下执行程序,中断服务程序驻留内存。

(2)在DOS命令行下按键A,屏幕显示为B,按B时屏幕显示为A。

执行TD,在代码区输入指令“MOV AX,0”看是否能发生变化。

(3)选作:另外编写一个中断服务程序的卸载程序,将键盘中断服务程序恢复到原来的状态(也就是还原中断矢量表的信息)。

任务3:读取CMOS内指定单元的信息,按照16进制形式显示在屏幕上。

要求:(1)先输入待读取的CMOS内部单元的地址编号(可以只处理编号小于10的地址单元)。

再使用IN/OUT指令,读取CMOS内的指定单元的信息。

(2)将读取的信息用16进制的形式显示在屏幕上。

若是时间信息,可以人工判断一下是否正确3实验过程3.1任务13.1.1设计思想及存储单元分配用三种方式获取中断类型码10H对应的中断处理程序的入口地址。

1.直接在td中观察即可。

2.系统功能调用35H,入口参数为AL=10H,取中断信息。

3.直接把主存中的DS:[40H]→IP,DS:[42H]→CS赋值给寄存器BX和CX。

3.1.2流程图无3.1.3源程序1.程序名renwu61.386CODE SEGMENT USE16ASSUME CS:CODESTART: XOR AX,AXMOV DS,AXMOV AX,3510HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START2.程序名renwu62.386STACK SEGMENT USE16 STACK DB 200 DUP(0)STACK ENDSCODE SEGMENT USE16ASSUME CS:CODE, SS:STACKSTART: XOR AX,AXMOV DS,AXXOR BX,BXXOR CX,CXMOV BX,DS:[40H]MOV CX,DS:[42H]MOV AH,4CHINT 21HCODE ENDSEND START3.1.4实验步骤1.直接运行td,置数据区为当前区执行Goto,在地址输入窗口输:40H{(0:[10*4])->IP,(0:[10*4+2]->CS}读取连续的4个字节,前两个为偏移地址,后两个为段值。

然后置代码区为当前区。

输入刚才得到的值,得到对应的程序。

2.将程序renwu61编译、链接,调试直到没有错误。

运行td renwu61,在td中单步调试,观察es 与bx的改变情况;3.将程序renwu62编译、链接,调试直到没有错误。

运行td renwu62,在td中单步调试,观察寄存器的值。

3.1.5实验记录(包括实验条件、输入/输出、错误和修改等信息的记录)1.实验环境条件:16M内存;WINDOWS XP命令行窗口;EDIT.EXE 2.0;MASM.EXE 6.0;LINK.EXE 5.2; TD.EXE 5.0。

2.方法一,直接观察ds段,可以观察到从0:40h开始低2个字节为0F96,高2个字节为3002;3.方法二,调用35号系统功能,在TD内观察到es 为3002,bx为0F96;4.方法三,将0:40h开始的低2个字节移至bx,高2个字节移至cx,得到cx为3002,bx为0F96;5.比较上述三种方法得到的结果,发现它们一致,说明以上方法实施得到的结果准确无误3.2任务23.2.1设计思想及存储单元分配设计思想:修改键盘驱动中断程序(int 16h),将中断矢量表0:58h开始的4个字节修改为新的中断程序的偏移地址和段首址,并保存号旧的键盘驱动中断程序的偏移地址和段首址。

在新的中断程序中,先判断用户调用的是否为键盘驱动中断程序的读入键盘功能,若不是,则直接调用旧的键盘驱动中断程序;若是,则对输入进行处理。

实际上我们改变出口参数中AL的值即是键入字符的ASCII码即可实现。

3.2.2流程图开始INT 36H的功能号为00H或10HY调用OLD_INT输入为AN输入为BN正常返回AL结束Y返回AL改为BY返回AL改为A N3.2.3源程序程序名renwu63.386DATA SEGMENT USE16DATA ENDSCODE SEGMENT USE16ASSUME CS:CODE,SS:STACKOLD_INT DW ?,?NEW16H:CMP AH,00HJE ATBCMP AH,10HJE ATBJMP DWORD PTR OLD_INTATB:PUSHFCALL DWORD PTR OLD_INTCMP AL,41H ;比较输入的ascii码JNZ NEXT1 ;MOV AL,42HJMP QUITNEXT1: CMP AL,42HJNZ NEXT2MOV AL,41HJMP QUITNEXT2: CMP AL,61HJNZ NEXT3MOV AL,62HJMP QUITNEXT3: CMP AL,62HJNZ QUITMOV AL,61HQUIT: IRETSTART: XOR AX,AXMOV DS,AXMOV AX,DS:[16H*4]MOV OLD_INT,AX ;保存偏移部分MOV AX,DS:[16H*4+2]MOV OLD_INT+2,AX ;保存段值CLIMOV WORD PTR DS:[16H*4],OFFSET NEW16HMOV DS:[16H*4+2],CSSTIMOV DX,OFFSET START+15SHR DX,4ADD DX,10HMOV AL,0MOV AH,31HINT 21HCODE ENDSSTACK SEGMENT USE16 STACKDB 200 DUP(0)STACK ENDSEND START3.2.4实验步骤1. 使用编辑程序EDIT.EXE录入源程序renwu63,编译,链接。

2. 观察提示信息,若出错,则用编辑程序修改错误,修改后再重新编译。

3. 执行该程序输入a/A,观察是否输出b/B;输入b/B,观察是否输出a/A。

3.2.5实验记录1.实验环境条件:16M内存;WINDOWS XP命令行窗口;EDIT.EXE 2.0;MASM.EXE 6.0;LINK.EXE 5.2; TD.EXE 5.0。

2. 在键盘键入a/A,发现屏幕回显b/B;在键盘键入b/B,发现屏幕回显a/A,证明程序编写得准确无误。

当输入ababAB,输出:3.通过编写代码发现,将旧的中断程序的偏移地址与首地址保存下来后,可有有两种方式调用旧的中断程序:Jmp dword ptr old_int;Call dword ptr old_int;前一种方式,可直接结束新的(不返回至)中断程序;后一种方式,可返回至新的中断程序。

3.3任务33.3.1设计思想及存储单元分配1号系统功能调用读入字符,将用户输入转化为数字,作为信息的偏移地址。

然后调用in 指令,从指定端口取出数据即可。

3.3.2流程图开始一号功能调用输入字符转化成数字INAX,DX存入AX输出AX数据结束3.3.3源程序程序名renwu64.386data segment use16buf db 2data endsstack segment use16 stackd b 200 dup(0)stack endscode segment use16a ssume ds:data,ss:stack,cs:codestart:mov ax, datamov ds, axlopa: mov ah, 1 ;读入输入int 21hsub al, 30h ;转化成十进制0~9 out 70h, al ;取出信息in al, 71hmov ah, aland al, 0fhshr ah, 4add ax, 3030h ;转化为ascll码xchg ah, almov bx, axlea si, bufmov word ptr [si+1], bx mov dl, 0ah ;输出换行mov ah, 2int 21hmov dl, 0dhmov ah, 2int 21hmov dl, bl ;输出信息mov ah, 2int 21hmov dl, bhmov ah, 2int 21hmov dl, 0ah ;输出换行mov ah, 2int 21hmov dl, 0dhmov ah, 2int 21hjmp lopa ;循环mov ah, 4chint 21hcode endsend start3.3.4实验步骤1. 录入源程序renwu64,编译,链接。

相关文档
最新文档