微机原理实验三子程序设计实验
《微机原理及接口技术》实验指导书
《微机原理及接口技术》实验指导书福建工程学院计算机与信息科学系计算机系统结构教研室实验一 汇编语言程序上机过程一、实验目的1.掌握EDIT 、MASM 、LINK 等软件工具的使用。
2.掌握在计算机上建立、汇编、连接、调试及运行程序的方法。
二、实验内容1.将DISP 单元中存放的一压缩BCD 码内容显示出来。
2.将BUF 单元开始的两个BCD 码相加存放到SUM 单元中,并显示结果。
3.将字节变量DISP 的内容(00H-FFH 任意值)显示出来。
三、实验准备与报告 1.了解实验操作方法,准备好实验程序和数据。
2.记录汇编、连接过程产生的错误及解决办法,设置相关的出错情况,查看汇编结果; 3.记录运行结果,更改数据再运行,记录结果。
4.实验报告主要内容:实验名称、实验目的、实验内容、<实验电路>、程序、实验结果、调试过程记录、总结。
(其它实验也按此要求书写实验报告)实验二 DEBUG 使用实验一、实验目的1.掌握DEBUG 常用命令的使用。
2.进一步了解80X86的存储器和寄存器结构。
3.进一步理解有关指令的功能与应用。
二、实验内容1.进入与退出DEBUG 。
2.用R 命令检查和修改寄存器内容并记录。
3.用D 命令显示内存单元内容并记录。
4.用E 命令修改内存单元内容并记录。
5.A 、U 、T 、P 、G 、N 、W 、L 命令使用。
程序:MOV SI ,0 MOV AX ,[SI] INC SI INC SIADD AX ,[SI] MOV BX ,AX INT 20H(1)使用A 命令输入以上程序;(2)使用U 命令查看输入的程序;(3)使用N 、W 命令将程序存盘;用N 、L 命令重新装载,用U 命令查看; (4)使用DEBUG 的D 、E 命令检查设置(DS ):0000H 起始的四个单元内容; (5)使用R 命令检查、设置有关寄存器的值;(6)分别使用T 、G 命令运行程序,注意观察有关寄存器和单元的变化。
微机原理子程序设计
实验三子程序设计1、实验目的:(1)熟悉汇编语言的编辑、汇编、连接、运行的全过程。
(2)了解汇编语言的程序结构、学习调用过程实现输入输出及用INCLUDE 命令包含文件的方法。
(3)子程序设计2.实验步骤:(1)用编辑软件记事本或EDIT 编辑一个扩展文件名为ASM的汇编语言源程序。
(2)用汇编程序TASM 汇编上述的汇编语言源程序,形成目标代码文件。
(扩展名为OBJ)(3)用连接程序TLINK连接目标代码文件,形成可执行文件。
(扩展名为EXE)(4)运行可执行文件。
观察执行结果,以验证其正确性。
3.实验内容:(1)从键盘上输入若干个十进制数(-32767<x<32767),然后排序并输出其升序后的结果。
.model small.stack 256.datacount=5array dw count dup (?)in_message db "please enter data:$"out_message db "sort result is :$".code.startupmov ah,9lea dx,in_messageint 21hmov cx,countmov si,offset arrayagain: call read ;输入count数据存入array数组中call dpcrlfmov [si],bxinc siinc siloop againmov cx,count ;排序(升序)dec cxagain2: lea si,arraymov di,cxagain1: mov ax,[si]cmp ax,[si+2]jle next1xchg ax,[si+2]xchg ax,[si]next1: add si,2loop again1mov cx,diloop again2mov ah,9lea dx,out_messageint 21hmov cx,count ;输出(升序)lea si,arrayagain3: mov bx,[si]call writecall dpcrlfinc siinc siloop again3mov ax,4c00hint 21hINCLUDE out_B_D.ASMINCLUDE in_D_B.ASMEND(2)从键盘上输入若干个十进制数(-32767<x<32767),然后排序并输出其降序后的结果。
子程序设计实验报告
实验名称:子程序设计实验日期:2023年X月X日实验地点:XX大学计算机实验室实验目的:1. 理解子程序的概念和作用。
2. 掌握子程序的设计方法和调用方式。
3. 学会使用子程序提高程序的可读性和可维护性。
实验内容:一、实验背景子程序是程序设计中常用的一种结构,它可以将一段具有独立功能的代码封装起来,方便在其他程序中调用。
使用子程序可以提高程序的可读性、可维护性和模块化程度。
二、实验环境1. 操作系统:Windows 102. 编译器:Visual Studio 20193. 编程语言:C++三、实验步骤1. 创建一个新的C++项目,命名为“子程序设计”。
2. 在项目中创建一个头文件“Subroutine.h”,用于声明子程序。
3. 在头文件中声明两个子程序:`Add` 和 `Subtract`。
4. 在头文件中定义一个全局变量 `Result`。
5. 在源文件“Subroutine.cpp”中实现头文件中声明的子程序。
6. 在主函数中调用子程序,并输出结果。
7. 编译并运行程序,观察输出结果。
四、实验代码1. 头文件“Subroutine.h”:```cpp#ifndef SUBROUTINE_H#define SUBROUTINE_Hvoid Add(int a, int b);void Subtract(int a, int b); int Result;#endif // SUBROUTINE_H```2. 源文件“Subroutine.cpp”:```cpp#include "Subroutine.h"void Add(int a, int b) {Result = a + b;}void Subtract(int a, int b) { Result = a - b;}```3. 主函数“main.cpp”:```cpp#include <iostream>#include "Subroutine.h"int main() {int a = 10;int b = 5;Add(a, b);std::cout << "Add: " << Result << std::endl;Subtract(a, b);std::cout << "Subtract: " << Result << std::endl;return 0;}```五、实验结果与分析1. 编译并运行程序,输出结果如下:```Add: 15Subtract: 5```2. 分析:(1)在实验中,我们首先在头文件中声明了两个子程序 `Add` 和 `Subtract`,它们分别用于计算两个整数的和与差。
微机原理的实验报告
一、实验目的1. 理解微机的基本组成和各部件的功能;2. 掌握微机的工作原理和指令系统;3. 熟悉汇编语言程序设计的基本方法;4. 提高动手能力和实际操作技能。
二、实验内容1. 微机系统组成实验(1)实验目的:了解微机的基本组成和各部件的功能。
(2)实验内容:观察并记录微机系统的各个部件,如CPU、内存、硬盘、主板等,并了解它们的功能。
(3)实验步骤:①观察微机系统各个部件的连接情况;②了解各个部件的功能和作用;③分析微机系统的整体结构。
2. 微机工作原理实验(1)实验目的:掌握微机的工作原理。
(2)实验内容:观察并记录微机工作过程中的各个阶段,如指令的取指、译码、执行等。
(3)实验步骤:①观察微机工作过程中的各个阶段;②了解各个阶段的功能和作用;③分析微机工作原理。
3. 指令系统实验(1)实验目的:熟悉汇编语言指令系统。
(2)实验内容:学习汇编语言的基本指令,如数据传送指令、算术运算指令、逻辑运算指令等。
(3)实验步骤:①学习汇编语言的基本指令;②编写简单的汇编语言程序,实现数据传送、算术运算、逻辑运算等功能;③调试程序,观察程序运行结果。
4. 汇编语言程序设计实验(1)实验目的:提高汇编语言程序设计能力。
(2)实验内容:编写一个汇编语言程序,实现以下功能:①计算两个数的和;②判断一个数是否为偶数;③输出程序运行结果。
(3)实验步骤:①编写汇编语言程序,实现上述功能;②调试程序,观察程序运行结果;③分析程序运行过程,确保程序正确性。
三、实验结果与分析1. 微机系统组成实验:通过观察和记录微机系统的各个部件,了解了微机的基本组成和各部件的功能。
2. 微机工作原理实验:通过观察微机工作过程中的各个阶段,掌握了微机的工作原理。
3. 指令系统实验:通过学习汇编语言的基本指令,熟悉了汇编语言指令系统。
4. 汇编语言程序设计实验:通过编写汇编语言程序,提高了汇编语言程序设计能力。
四、实验心得通过本次微机原理实验,我对微机的基本组成、工作原理和指令系统有了更深入的了解。
微机原理的实验报告
微机原理的实验报告一、实验目的本实验旨在深入理解微机原理的相关知识,并通过实践操作,掌握微机原理的实验方法与技巧。
二、实验内容1. 搭建微机实验系统:根据实验所需,搭建适当的微机实验系统,包括各种硬件设备的连接与设置。
2. 硬件接口的实验:通过连接不同的硬件接口,进行实验操作,学习硬件接口的使用方法和原理。
3. 程序设计与调试实验:使用相应的汇编语言或高级语言,编写程序并进行调试,观察程序的执行结果。
4. 中断实验:通过调用不同的中断服务例程,进行实验操作,学习中断的使用原理和应用场景。
三、实验步骤与结果1. 实验步骤:(1) 搭建微机实验系统:按照实验指导书的要求,连接各种硬件设备,确保能够正常工作。
(2) 硬件接口的实验:选择一个硬件接口,例如并行口,通过编写相应的程序,实现读取和输出数据的功能。
观察实验现象并记录。
(3) 程序设计与调试实验:根据实验要求,选择适当的编程语言,编写相应的程序,并进行调试。
观察程序的执行结果,并记录相关数据。
(4) 中断实验:选择一个中断服务例程,例如键盘中断,通过编写相应的程序,实现对键盘输入的响应。
观察实验现象并记录相关数据。
2. 实验结果:(1) 硬件接口的实验结果:通过编写程序并连接硬件接口,成功读取和输出数据,实现了相应的功能。
(2) 程序设计与调试实验结果:编写的程序能够正确执行,并得到了预期的结果。
(3) 中断实验结果:编写的程序能够响应相应的中断信号,并实现了对键盘输入的处理。
四、实验分析与讨论1. 实验分析:通过本次实验,我们深入了解了微机原理的相关知识,并通过实践操作,掌握了微机原理的实验方法和技巧。
2. 实验讨论:在实验过程中,我们遇到了一些困难和问题,例如硬件接口的连接和调试,程序的编写和调试等。
但通过彼此的合作与讨论,我们最终解决了这些问题,并成功完成了实验。
五、实验总结通过本次实验,我们对微机原理有了更深入的理解,并通过实践操作,掌握了微机原理的实验方法和技巧。
微机原理软件实验报告
实验名称:汇编语言程序设计实验日期:2023年3月10日实验地点:计算机实验室实验者:张三一、实验目的1. 熟悉汇编语言的基本语法和指令系统。
2. 掌握汇编语言程序设计的基本方法。
3. 通过实验,加深对微机原理的理解。
二、实验内容本次实验主要涉及以下内容:1. 数据传送指令的应用2. 算术运算指令的应用3. 控制转移指令的应用4. 子程序设计三、实验步骤1. 编写一个简单的程序,实现以下功能:(1)将数据0x1234存入寄存器AX;(2)将数据0x5678存入寄存器BX;(3)计算AX和BX的乘积,并将结果存入寄存器DX;(4)将乘积的高16位和低16位分别存入寄存器CX和AX。
2. 编写一个程序,实现以下功能:(1)将数据0x1A2B3C4D存入内存单元[0x1000];(2)从内存单元[0x1000]开始,读取连续4个字节的数据;3. 编写一个程序,实现以下功能:(1)定义一个子程序,实现两个整数的加法运算;(2)在主程序中调用该子程序,实现两个整数的加法运算。
四、实验结果与分析1. 数据传送指令的应用(1)将数据0x1234存入寄存器AX;MOV AX, 0x1234(2)将数据0x5678存入寄存器BX;MOV BX, 0x5678(3)计算AX和BX的乘积,并将结果存入寄存器DX;MUL BX(4)将乘积的高16位和低16位分别存入寄存器CX和AX; MOV CX, DXMOV AX, DX2. 算术运算指令的应用(1)将数据0x1A2B3C4D存入内存单元[0x1000];MOV [0x1000], 0x1A2B3C4D(2)从内存单元[0x1000]开始,读取连续4个字节的数据; MOV AX, [0x1000]MOV BX, [0x1000+2]MOV CX, [0x1000+4]MOV DX, [0x1000+6]MOV AH, 0x0EINT 0x103. 控制转移指令的应用(1)定义一个子程序,实现两个整数的加法运算;ADD procedure:ADD AX, BXRET(2)在主程序中调用该子程序,实现两个整数的加法运算;MOV AX, 0x1MOV BX, 0x2CALL ADDMOV CX, AX五、实验心得通过本次实验,我深刻理解了汇编语言的基本语法和指令系统,掌握了汇编语言程序设计的基本方法。
微机原理实验三 编程实现子程序调用
实验二编程实现循环程序**************************************************************************************一、题目内容**************************************************************************************•编程实现:• 1.主程序由键盘输入一个数(<10),用子程序1实现DATA段以这个数为首连续十个整数填充字节数组buf。
譬如显示提示:”Please input a number:”,键盘输入3,执行子程序1后buf db 3,4,5,6,7,8,9,10,11,12。
• 2.主程序实现十个数求和,调用另一子程序2实现将和逐位转为ASCII码显示:”Sum is: xx”。
•提示:和不会超过十进制3位数,所以将和除以10,逐位转换,再加上30H即分别可以得它们的ASCII码。
**************************************************************************************二、流程图****************************************************************************************************************************************************************************三、程序代码**************************************************************************************stack segment stack 'stack'dw 32 dup(0)stack ends;==========================data segmentTIP1 DB 'Plesase input a number(0<n<10) : $'BUF DB 10 DUP(?)TIP2 DB 'From n to n+10 is the result of the : $'SUM DW 0data ends;==========================STAC SEGMENT ;用于变量定义予置的堆栈空间STA DB 100 DUP(?)STAC ENDS;==========================code segment;===================MAIN proc farassume ss:stack,cs:code,ds:datapush dssub ax,axmov ax,datamov ds,ax;===========MOV DX,OFFSET TIP1 ;显示提示语MOV AH,9INT 21HXOR AX,AX ;键入并显示一个字符,把字符的ASCII码存入AL中MOV AH,1INT 21HMOV DL,0AH ;换行PUSH AXMOV AH,2INT 21HPOP AXMOV DI,OFFSET BUF ;取BUF的首址存入DI中XOR CX,CXCALL AddNum ;—1—调用子程序FUZHI实现DATA段以这个数为首连续十个整数填充字节数组bufXOR AX,AXMOV CX,0AH ;给LOOP2循环赋初值10MOV DI,OFFSET BUFAGAIN2: ADD AX,[DI] ;主程序实现求上述十个数的和,存入AX中INC DILOOP AGAIN2 ;循环10次CALL DELAY1S ;—2—调用子函数延时1SPUSH AXCALL Transf ;—3—调用另一子程序ZHUANG实现将和逐位转为ASCII码显示POP AX;MOV AH,4CH ;返回DOS,不用这个,对话框会一闪而退;INT 21H;RETmov ah, 1 ;这个的话对话框会暂停int 21hMAIN ENDP;/***************************************************************************/; 子程序名: AddNum; 功能: 实现DA TA段以输入的那个数为首连续十个整数填充字节数组buf; 入口参数:; DS:DI←待填充的数组buf的首地址; AL←输入的那个数; 出口参数: 【DI】←填充结果;/***************************************************************************/AddNum PROCPUSH CXSUB AL,30H ;将AL转为十进制MOV CX,0AH ;给LOOP循环赋初值10AGAIN1: MOV [DI],AL ;将AL存入BUF中INC DI ;DI+1,即数组BUF中的地址单元+1INC AL ;AL+1LOOP AGAIN1POP CXRET ;返回主程序AddNum ENDP;/***************************************************************************/ ; 子程序名: Transf; 功能: 实现将和逐位转为ASCII码显示; 入口参数:; DS:DI←数组buf的首地址; AX←和的十进制数; 出口参数: AX←和的ASCII码;/***************************************************************************/Transf PROCPUSHFPUSH AXPUSH BXPUSH CXPUSH DXXOR BX,BXPUSH AXXOR AH,AHCMP AX,64HJNB SANWEIPOP AXXOR AH,AHMOV BL,10 ;将除数赋值为10DIV BL ;将和AX除以10,商存入AL中,所以AL为十位数。
微机原理软件实验报告
信息与通信工程学院微机原理软件实验报告班级:姓名:学号:日期: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.通过编译,连接形成可执行文件。
微机实验报告
微机实验报告实验四:子程序设计一.实验目的1、学习子程序的定义和调用方法。
2、掌握子程序、子程序嵌套的结构。
3、掌握子程序的程序设计、编制及调试方法。
二.实验内容程序采用菜单式选择,可接收用户输入的命令(1~5),各命令如下:按1键完成字符串小写字母变大写字母用户输入一由英文大小写字母或数字0~9组成的字符串(以回车结束),程序逐个检查字符串中各字符,将原串中小写字母变成大写字母,其它字符不变,并在屏幕上显示。
用户按任一键,重做,按ESC键,返回主菜单。
按2键完成找最大值(二选一)1、接收用户输入的可显示字符串(以回车结束),程序将其中ASCII码值最大的字符显示出来。
2、接收用户输入若干无符号8位数(以空格或逗号为分隔符,以回车结束),程序将其中最大的数显示出来。
用户按任一键,重做,按ESC键,返回主菜单。
按3键完成排序(二选一)1、接收用户输入的可显示字符串,以回车结束。
程序按ASCII码值大小由大到小排序并输出显示。
2、接收用户输入若干个有符号8位数(以空格逗号为分隔符,以回车结束)。
程序将其中最大的数显示出来。
用户按任一键,重做,按ESC键,返回主菜单。
按4键显示时间首先提示用户对时,即用户输入时,分,秒(以空格或冒号分隔,以回车结束),然后,在屏幕上不断显示时间,格式为:××(时):××(分):××(秒),最好定点显示。
用户按任一键,重新对时,按ESC键,返回主菜单。
按5键,结束程序运行,返回系统提示符。
三.程序与流程图主程序的简略流程子程序一的简略流程图子程序二的简略流程图子程序三的简略流程图子程序4,显示时间流程图四、源程序代码DATA SEGMENTORG 9999HMENU DB 0DH,0AH,'Programed by Deng Tengfei Class Electronic Material Grade 09',0DH,0AH, ;菜单DB 'Please input 1~5 to choose service',0DH,0AH,DB '1: Convert a small letter to a big letter' ,0DH,0AH,DB '2: Seek the bigest number',0DH,0AH,DB '3: Put the character string in order' ,0DH,0AH,DB '4: Set time and check time',0DH,0AH,DB '5: End the program$'MEG0 DB ' Please choose function$' ;提示信息MEG0~MEG8MEG1 DB 'You have choose the function 1.',0DH,0AH,'Please input the character string you want to convert:$'MEG2 DB 'You have choose the function 2.',0DH,0AH,'Please input the character string:$'MEG3 DB 'You have choose the function 3.',0DH,0AH,'Please input the character string you want to sort$'MEG4 DB 'You have choose the function 4.',0DH,0AH,'Please input the time you want to set in format like:xx:xx:xx$'MEG5 DB 'The program is end$'MEG6 DB 'Sorry.you have chosen a undefined function .Please input a correct function number$' MEG7 DB 'Fail to set time$'MEG8 DB 'Press any key to do again or press the ESC key to return to the main menu$ 'FLAG DB -1 ;冒泡排序中使用的标志DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATAMAIN PROC NEAR ;主程序MOV AX,DATAMOV DS,AXCIN: LEA DX,MENU ;输出提示信息MOV AH,09HINT 21HCALL ENT ;输出回车换行LEA DX,MEG0MOV AH,09HINT 21HCALL ENTMOV AH,01HINT 21HCMP AL,30H ;判断功能号JLE EORCMP AL,31HJE F1CMP AL,32HJE F2CMP AL,33HJE F3CMP AL,34HJE F4CMP AL,35HJE F5EOR: CALL ENTLEA DX,MEG6 ;输出出错信息MOV AH,09HINT 21HJMP CINF1: CALL ENT ;功能1LEA DX,MEG1MOV AH,09HINT 21HCALL ENTCALL FUN1 ;调用子程序1MOV AH,01HINT 21HCMP AL,1BHJNE F1JMP CINF2: CALL ENT ;功能2LEA DX,MEG2MOV AH,09HINT 21HCALL ENTCALL FUN2 ;调用子程序2MOV AH,01HINT 21HCMP AL,1BHJNE F2JMP CINF3: CALL ENT ;功能3LEA DX,MEG3MOV AH,09HINT 21HCALL ENTCALL FUN3 ;调用子程序3MOV AH,01HINT 21HCMP AL,1BHJNE F3JMP CINF4: CALL ENT ;功能4LEA DX,MEG4MOV AH,09HINT 21HCALL ENTCALL FUN4 ;调用子程序4MOV AH,01HINT 21HCMP AL,1BHJNE F4JMP CINF5: MOV AH,4CH ;功能5,终止程序INT 21HFUN1 PROC NEAR ;子程序1PUSH AXPUSH CXPUSH DXPUSH SIMOV AH,0AH ;字符串输入INT 21HCALL ENTMOV SI,DXINC SIMOV CL,[SI] ;设定循环次数MOV CH,0JIK: INC SIMOV AL,[SI]CMP AL,0DH ;判断字符ASCII码JE KLCMP AL,61HJB JKCMP AL,7AHJA JKSUB AL,20H ;小写转大写JK: MOV DL,AL ;输出字符MOV AH,02HINT 21HLOOP JIKCALL ENTLEA DX,MEG8MOV AH,09HINT 21HKL: POP SIPOP DXPOP CXPOP AXRETFUN1 ENDPFUN2 PROC NEAR ;子程序2PUSH AXPUSH CXPUSH DXPUSH SIMOV AH,0AHINT 21HCALL ENTMOV SI,DXINC SIMOV CL,[SI]MOV CH,0INC SIMOV AL,[SI]FH: INC SI ;循环比较CMP AL,[SI]JA FGMOV AL,[SI]FG: LOOP FHMOV DL,ALMOV AH,02HINT 21HCALL ENTLEA DX,MEG8MOV AH,09HINT 21HPOP SIPOP DXPOP CXPOP AXRETFUN2 ENDPFUN3 PROC NEAR ;子程序3 PUSH AXPUSH BXPUSH CXPUSH DXPUSH SIPUSH DIMOV AH,0AHINT 21HCALL ENTMOV SI,DXINC SIMOV BL,[SI]MOV BH,0INC SIMOV DI,SILP1: CMP FLAG,0 ;根据标志判断JE LP3DEC BX ;检查循环次数CMP BX,0JE LP3MOV CX,BXMOV SI,DIMOV FLAG,0LP2: MOV AL,[SI] ;前后比较CMP AL,[SI+1]JLE NEXTXCHG AL,[SI+1]MOV [SI],ALMOV FLAG,0FFHNEXT:INC SILOOP LP2 ;内循环继续JMP LP1 ;退出内循环LP3: DEC DI ;重新设定循环次数MOV CL,[DI]MOV CH,0LP4: INC DI ;循环输出字符MOV DL,[DI]MOV AH,02HINT 21HLOOP LP4CALL ENTLEA DX,MEG8MOV AH,09HINT 21HPOP DIPOP SIPOP DXPOP CXPOP BXPOP AXRETFUN3 ENDPFUN4 PROC NEAR ;子程序4PUSH AXPUSH BXPUSH CXPUSH DXCALL CROT ;调用子程序CROTMOV CH,AL ;装入入口参数MOV AH,01HINT 21HCALL CROTMOV CL,ALMOV AH,01HINT 21HCALL CROTMOV DH,ALMOV DL,0CALL ENTMOV AH,2DH ;调DOS中断置时间INT 21HCMP AL,0FFHJE FALPRT: PUSH DX ;输出时间MOV AL,CHMOV AH,0MOV BL,0AHDIV BLADD AL,30HADD AH,30HMOV DL,ALMOV DH,AHMOV AH,02HINT 21HMOV DL,DHINT 21HMOV DL,3AHINT 21HMOV AL,CLMOV AH,0DIV BLADD AL,30HADD AH,30HMOV DL,ALMOV DH,AHMOV AH,02HINT 21HMOV DL,DHINT 21HMOV DL,3AHINT 21HPOP DXMOV AL,DHMOV AH,0DIV BLADD AL,30HADD AH,30HMOV DL,ALMOV DH,AHMOV AH,02HINT 21HMOV DL,DHINT 21HMOV AH,2CH ;调DOS中断取时间INT 21HMOV AL,0AH ;写入OCW3OUT 20H,ALNOP ;延时NOPNOPNOPNOPNOPNOPNOPNOPNOPNOPNOPIN AL,20H ;读取IRRAND AL,02HJNE MKCALL COV ;调子程序COVJMP PRTFAL: LEA DX,MEG7MOV AH,09HINT 21HMK: CALL ENTMOV AH,01HINT 21HLEA DX,MEG8MOV AH,09HINT 21HPOP DXPOP CXPOP BXPOP AXRETFUN4 ENDPCROT PROC NEAR ;子程序CROT,完成ASCII码转换成两位十进制数PUSH BXPUSH CXPUSH DXMOV BL,0 ;初始化BL和BHMOV BH,0AHMOV DX,02H ;设循环次数GET: MOV AH,01HINT 21HSUB AL,30HCMP AL,0JB FALCMP AL,09HJA FALXCHG AL,BLMUL BHADD AL,BLXCHG AL,BLDEC DXCMP DX,0JNE GETMOV AL,BLPOP DXPOP CXPOP BXRETCROT ENDPCOV PROC ;格式控制,使光标回到上个制表位PUSH AXPUSH CXPUSH DXMOV CX,08HMOV AH,02HMOV DL,08HREC: INT 21HLOOP RECPOP DXPOP CXPOP AXRETCOV ENDPENT PROC ;格式控制,输出回车换行MOV DL,0DHMOV AH,02HINT 21HMOV DL,0AHMOV AH,02HINT 21HRETENT ENDPMAIN ENDPCODE ENDSEND MAI五、程序调试及运行结果:主菜单1、功能一(小写字母转大写字母):2、功能二(找出ASCII码最大的字符):3、功能三(按ASCII码把字符从大到小排列):4、功能四(显示跳动的时间):5、功能五(退出程序):6、错误的输入:六、实验心得子程序可以作为一个相对独立的部分单独设计,但要注意在进入子程序和退出子程序时保护现场和恢复现场。
汇编语言程序设计实验报告三(子程序设计实验)
汇编语言程序设计实验报告三(子程序设计实验)汇编语言程序设计实验报告三(子程序设计实验)实验目的掌握主程序与子程序之间的调用关系及其调用方法。
掌握子程序调用过程中近程调用与远程调用的区别。
熟练掌握码型变换的程序。
实验内容从键盘输入二位非压缩BCD数,存入AX寄存器中,编程实现将其转换为二进制数,并在屏幕上显示。
要求码型转换程序用远程子程序编写,字符显示用近程子程序编写。
数据可循环输入,遇‘00’结束。
实验准备预习子程序设计的基本方法,根据实验内容要求编写出实验用程序。
熟悉键盘输入和字符显示的程序段的编制。
实验步骤编辑、汇编源程序,生成可执行文件。
执行程序,检查输入、输出结果,看是否正确。
如不正确,用DEBUG检查,修改源程序,再汇编、运行,直到程序正确为止。
用DEBUG的T命令或P命令跟踪程序的执行,观察在远程和近程调用过程中,堆栈的变化情况。
实验报告要求分析近程调用和远程调用的主要区别。
用DEBUG命令观察执行过程有何不同。
分析实验结果及所遇到的问题的解决方法。
程序流程图开始TRAN程序标准序开始读入十进制数据放AX中AXAXAND0F0FH是00?YBLALN调用转换子程序结束AL左移3位回车、换行BL左移1位于ALAL+BL主程序流程图ALAL+AHRET转换子程序TRAN流程图程序清单STASEGMENTSTACK’STACK’DB100DUP(0)STAENDS GSAGSEGMENTPARA‘CODE’ASSUMECS:CSAG MAINPROCFARSTRAT:PUSHDSSUBAX,AXPUSHAXREV:MOVAH,1INT21HMOVBL,ALINT21HMOVAH,ALMOVAL,BLCMPAX,3030H JEENDTRAN CALLNEARPTRTRAN CALLFARPTRCON MOVAL,0DH CALLFARPTRDISP MOVAL,0AH CALLFARPTRDISP MOVAL,0AH CALLFARPTRDISP JMPREV ENDTRAN:RET MAINENDP TRANPROCNEAR ANDAX,0F0FHMOVBL,ALMOVBL,ALMOVCL,3SHLAL,CLMOVCL,1SHLBL,CLADDAL,BLADDAL,AHRETTRANENDPCSAGENDS CSBGSEGMENTPARA’CODE’ASSUMECS:CSBG CONPROCFARPUSHAXMOVCL,4 SHRAL,CL ADDAL,30H CMPAL,39H JBECON2 ADDAL,7CON2:PUSHAX MOVAL,0DH CALLFARPTRDISP MOVAL,OAH CALLFARPTRDISP POPAX CALLFARPTRDISP POPAX ANDAL,0FHADDAL,30H CMPAL,39H JBECON1ADDAL,7CON1:CALLFARPTRDISP RETCONEDNP DISPPROCFAR PUSHBXMOVBX,0MOVAH,14INT10HPOPBXRETDISPENDPCSBGENDS ENDSTART。
微机原理实验程序 中国石油大学(华东)
实验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个字符。
(完整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。
微机原理实验指导书 (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单元开始的数据区中。
南理工微机实验报告
南理工微机实验报告篇一:南京理工大学微机实验报告微机实验报告实验2.1汇编语言程序的调试与运行思考题:1、带进位加法程序:DISP MACRO XMOV DL,XMOV AH,02HINT 21HENDMDATA SEGMENTDATA1 DB'65087'DATA2 DB'75087'N EQU $-DATA2DATA ENDSSTACK SEGMENT STACKSTA DB 20 DUP (?)TOP EQU $-STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START:MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXLEA SI,DATA1MOV BX,0MOV CX,NCALL DISPLDISP '+'LEA SI,DATA2MOV BX,0MOV CX,NCALL DISPLDISP '='LEA DI,DATA1MOV CX,NCALL ADDALEA SI,DATA1MOV BX,0MOV CX,NCMP DL,0JZ NEXTDISP '1'NEXT: CALL DISPLDISP 0DHDISP 0AHMOV AX,4C00HINT 21HDISPL PROCDS1:MOV AH,02HMOV DL,[SI+BX]INT 21HINC BXLOOP DS1RETDISPL ENDPADDA PROCPUSH CXMOV BX,0AD1:SUB BYTE PTR [SI+BX],30H SUB BYTE PTR [DI+BX],30HINC BXLOOP AD1POP CXPUSH CXMOV BX,N-1CLCAD2:MOV AL,[SI+BX]ADC AL,[DI+BX]AAAMOV [DI+BX],ALDEC BXLOOP AD2POP CXPUSH CXMOV BX,0MOV DL,0JNC AD3MOV DL,1AD3:ADD BYTE PTR [DI+BX],30H INC BXLOOP AD3POP CXRETADDA ENDPCODE ENDSEND START结果截图:2、上机步骤,调试方法:1、写代码完成功能要求,文件格式为.asm文件(如21si.asm),将文件放入带汇编工具的文件夹中,即含有汇编工具(MASM.EXE)和链接工具(LINK.EXE)的文件夹。
微机原理程序设计实验
微机原理汇编语言上机实验注意:红色斜体部分是对该处的说明或提示,应该按具体内容书写即可实验一顺序程序设计实验目的:熟悉汇编语言程序设计软件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——查看数据段内容最好能写出具体用法。
微机原理实验
实验四子程序设计一.实验目的要求1.掌握子程序调用方法和参数传递方式。
2.掌握过程调用伪指令: PROC,ENDP和NEAR。
3.理解子程序调用中堆栈的用法。
二.实验环境微机原理课程的的实验环境如下:1.硬件环境微型计算机一台2.软件环境Windows2003/XP操作系统任意一种文本编辑器(EDIT、NOTEPAD(记事本)、WORD等),建议使用EDIT或NOTEPAD 汇编程序(MASM.EXE)连接程序(LINK.EXE)调试程序(DEBUG.EXE)三.实验内容1.分数统计,设有10个学生的成绩分别是76,69,84,90,73,88,99,63,100和80分。
试编制子程序ACCOUNT统计60-69分、70-79分、80-89分、90-99分和100分的人数并分别存放到S6,S7,S8,S9,S10单元中。
提示:1)主程序调用子程序ACCOUNT统计分数。
2)可采用约定存储单元的方法传递参数。
DSEG SEGMENTgrade dw 76,69,84,90,73,88,99,63,100,80s6 dw 0s7 dw 0s8 dw 0s9 dw 0s10 dw 0DSEG ENDSCSEG SEGMENTassume cs:CSEG, ds:DSEG start: mov ax, dsegmov ds, axmov bx,offset gradecall accountmov ah,4chint 21haccount proc nearcompare:mov ax, [bx]cmp ax,60jl fivecmp ax,70jl sixcmp ax,80jl sevencmp ax,90jl eightcmp ax,100jne nineInc s10jmp short change_addr nine: inc s9jmp short change_addr eight: inc s8jmp short change_addr seven: inc s7jmp short change_addr six: inc s6jmp short change_addr five: inc s5change_addr:ADD bx,2Dec cxJnz compareaccount endpCSEG ENDSend start2.实验步骤1)认真阅读程序,自己编写子程序account,将程序补充完整,然后汇编、链接、生成可执行文件。
微机原理实验3分支程序设计
物理与机电工程系(2015——2016 学年第一学期)《分支程序设计》上机实验报告专业:电子信息工程学号: 55姓名:不同人任课教师:规范和实验地点:实验楼368项目编号:实验三开始结束小于否?大与否?取Y=0偏移地址送DX取Y=-1偏移地址送DX取Y=1偏移地址送DX定义段和输出字符串存入自变量X初始化X 送AL与0比较返回DOS 功能调用调用9号功能键输出N开始定义段和输出字符串Y初始化调用1号功能键输入字符X送AL与61H比较大于等于否?与7AH比较小于等于否?AL减20H取Y的偏移地址送DL调用9号功能键调用2号功能键输出Y输出DL中的值返回DOS功能调用结束11 开始结束定义段和输出字符串调用1号功能键初始化X 送AL输出shuzi返回DOS 功能调用输入字符与30H 比较取shuzi 偏移地址调用9号功能键大于等于否?与39H 比较小于等于否?取qita 的偏移地址调用9号功能键输出qita大于等于否?小于等于否?取zimu 的偏移地址调用9号功能键输出zimu小于等于否?小于等于否?与7AH 比较与41H 比较与5AH 比较与61H 比较NYY NNYY NYNNY12。
微机实验--子程序设计
微机实验三分支和循环程序设计实验一、分支程序设计实验1.实验目的1.掌握分支程序的结构。
2掌握分支程序的设计、调试方法。
2.实验设备微机一台3.内容设计一数据块间的搬移程序设计思想:程序要求把内存中一数据区(称为源数据块)传送到另一存贮区(称为目的数据块)。
源数据块和目的数据块在存贮中可能有三种情况。
对于两个数据块分离的情况,数据的传送从数据块的首址开始,或者从数据块的末址开始均可,但对于有部分重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭破坏。
可以得出以下结论:当源数据块首址〉目的块首址时,从数据块首址开始传送数据。
当源数据块首址〈目的块首址时,从数据块末地址开始传送数据。
流程图:结果:在源数据块中存入6个数,分别使SI大于、等于、小于DI均发觉数据正确传送。
可见程序正确。
实现代码如下:DATA SEGMENTORG 3500HSRC_MESS DB 1,2,3,4,5,6ORG 3510HNEW_LOC DB 20 DUP(0)DATA ENDS;CODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATASTART: MOV AX,DATAMOV DS,AXMOV ES,AXLEA SI,SRC_MESSLEA DI,NEW_LOCMOV CX,6CLD ;DF置0CMP SI,DI ;源数据块首址〈目的块首址时,从数据块末地址开始传送数据。
JL NEXT1 ;如果SI小于DI,则跳转到NEXT1(否则直接执行NEXT2) NEXT2: REP MOVSBNEXT1: ADD SI,CX ; SI=SI+CX-1 从末地址开始传递数据DEC SI ;ADD DI,CX ;DI+=DI+CX-1DEC DI ;STD ; DF置1JMP NEXT2 ;CODE ENDSEND START结果显示:将3500H开始的1,2,3,4,5,6复制到3510H开始的地址。
西安交大微机原理实验三循环程序的设计
实验三循环程序的设计一、实验目的1.掌握提示信息的使用方法和从键盘键入信息的用法2.掌握循环程序的设计方法二、实验内容编写程序,从键盘分别键入两个字符串,进行比较,若相同,则显示“MATC”H,否则,显示“NOMATC”H 。
三、实验原理强迫cpu 重复执行一指令序列的程序结构是循环程序。
循环程序结构分四部分:1、初始化部分2、循环处理部分3、循环控制部分4、结束部分。
四、程序代码CRLF MACROMOV AH,02HMOV DL,0DHINT 21HMOV AH,02HMOV DL,0AHINT 21HENDMDATA SEGMENTMESS1 DB'INPUT STRING1:',0DH,0AH,'$'MESS2 DB'INPUT STRING2:',0DH,0AH,'$'MESS3 DB'NO MATCH',0DH,0AH,'$'MESS4 DB'MATCH',0DH,0AH,'$'MAXLEN1 DB 81 ACTLEN1 DB ?STRING1 DB 81 DUP(?)MAXLEN2 DB 81ACTLEN2 DB ?STRING2 DB 81 DUP(?)DATA ENDSSTACK SEGMENT PARA STACK 'STACK'STA DB 50 DUP(?)TOP EQU LENGTH STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV SP,TOPMOV DX,OFFSET MESS1 MOV AH,09HINT 21HMOV AH,0AHMOV DX,OFFSET MAXLEN1 INT 21HCRLFMOV DX,OFFSET MESS2 MOV AH,09HINT 21HMOV AH,0AHMOV DX,OFFSET MAXLEN2 INT 21HCRLFMOV SI,OFFSET ACTLEN1 MOV BX,OFFSET ACTLEN2 MOV AL,[SI]CMP AL,[BX]JNE NOMA NOMATCH: MOV CX,[SI] AND CX,0FHNEXT:INC SIINC BXMOV AL,[SI]CMP AL,[BX]JNE NOMADEC CXCMP CX,0JNE NEXTMOV AH,09HMOV DX,OFFSET MESS4 INT 21HJMP DENDNOMA:MOV AH,09HMOV DX,OFFSET MESS3 INT 21HDEND:MOV AX,4C00HINT 21HEND START五、头验调试过程 1•调试字符串输入功能在edit 中输入代码,编译、链接后,用debug 的-u 命令反汇编生成的可执行文件 shiyan3.exa 首先调试字符串输入是否正确,设置断点如下所示:110778:0000 B06AG? MOU AX P G?6A U778:00G8 BED8 MOU DS, AX 077G :0GQ5 8EC0 ruu ES.AXGT?78:0OGV B88O07 MOU AX P 6?B00778: 0O0A BED0 rou SS,AX 0778:0OGC BC3Z0O MOU SF,G0QZ 0778:0OGF BAO0GG MOU DX.0000 Qf?78:001Z B409 MQU AH.09 0778:0614 CDZ1 IHT Z1 0778:0016 B4GA MOU AH (0A O7?a :O0ia BA35O0 MOU DX R6035 0778:001® CDZ1 IHT 21 O77O :0O1D B402 MOU AH 题 Q7?0: Q01T B20D MOU DLpOD -g43INPUT STHING1: xjtuINPUT 31H1INGZ : bjtuAX=0£GA BX=0OGG CX=0158 DX=O0GA SF=003ZBF=0O0G SI=0000 DI=0000DS=076A ES=G76A SS=O70e CS=Q776 IF=0GH3MU UP El PL HZ NA FO NC阴76:0643 EE3606MOUSI ,0036用-d 命令查看如下以上说明字符串输入部分工作正常。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三 子程序设计实验
一、实验目的
1.学习子程序的定义和调用方法。
2.掌握子程序的程序设计、编制及调用。
二、实验设备
TDN86/88教学实验系统一台
三、实验内容及步骤
1.求无符号字节序列中的最大值和最小值
设有一字节序列,其存储首址为3000H ,字节数为08H 。
利用子程序的方法编程求出该序列中的最大值和最小值。
实验程序及流程如下:
主程序
STACK1 SEGMENT STACK
DW 64 DUP(?)
STACK1 ENDS CODE SEGMENT
ASSUME CS:CODE
START: MOV SI,3000H
MOV CX,0008H CALL branch
A1: JMP A1 branch: JCXZ A4
PUSH 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,BH
A1: LODSB
CMP AL,BH
JBE A2
MOV BH,AL
JMP A3
A2: CMP AL,BL
JAE A3
MOV BL,AL
A3: LOOP A1
MOV AX,BX
POP BX
POP CX
POP SI
A4: RET
CODE ENDS
END START
作由子程序来实现。
程序:
STACK1 SEGMENT STACK DW 64 DUP(?)
STACK1 ENDS
CODE SEGMENT ASSUME CS:CODE START: MOV SI,3000H MOV CX,0008H
XOR AX,AX
CALL branch
A5: JMP A5
branch: JCXZ A4
PUSH SI
PUSH CX
A1:
ADD AL,[SI]
INC SI
A3: LOOP A1
POP CX
POP SI
A4: RET
CODE
ENDS
END START
8个01,总和为08。