太原理工大学微机原理实验报告
太原理工大学微机原理实验报告课案

本科实验报告课程名称:微机原理及应用实验项目:实验地点:专业班级:机械xxx班学号:xxxxxxxxxx 学生姓名:xx指导教师:2016年12月28日实验一汇编语言程序开发环境与程序调试一、实验要求和目的1.熟悉在微机上编辑、汇编、连接、调试和运行汇编语言程序的过程,掌握PC 环境下命令行方式的特点。
2.熟悉汇编过程中一些常见出错信息。
3.熟悉程序调试的方法, DOS命令窗口的debug的常用命令。
二、实验内容1、项目要求:在屏幕上显示字符串‘Hello,world!’。
2、程序设计思想:运用DOS系统功能调用(INT 21H)的9号功能。
DOS系统功能调用的9号功能是显示字符串,它调用的参数DS:DX=串地址,且字符串以“$”结束。
程序流程图如图1-1:图1-1 程序流程图3、程序清单:完整指令代码如下(简化段定义格式):.model small ;定义程序的存储模式.486 ;说明使用的80x86微处理器指令.stack ;定义堆栈段.data ;定义数据段String db 'Hello, world!','$'.code ;定义代码段.startup ;程序执行开始Mov ax, seg String ;把String的段地址送axMov ds,ax ;ax送ds,ds取得string的段地址mov dx,offset String ;String的偏移地址送dxmov ah,9 ;字符串显示功能int 21h ;DOS功能调用mov ax,4c00hint 21h ;返回DOS.exitend三、结果与分析指导教师:年月实验二内存数据的移动一、实验要求与目的:1、实验要求:编写程序实现把数据段的字符串数据移动到附加段中。
2、实验目的:通过项目学习汇编的数据传送指令和串处理类指令,巩固寻址方式,学习汇编程序设计。
二、实验内容:1、项目要求:把数据段中以dstring地址标号为开始地址的“hello world!”字符串移动到附加段以sstring地址标号为开始地址中去。
微机原理实验报告册(3篇)

第1篇一、实验目的1. 理解和掌握微机的基本组成和工作原理;2. 熟悉微机硬件设备和实验仪器的使用方法;3. 提高动手实践能力,培养解决实际问题的能力;4. 深入理解微机原理课程内容,为后续课程学习奠定基础。
二、实验内容1. 微机系统认识实验2. 微机硬件组成实验3. 微机指令系统实验4. 微机寻址方式实验5. 微机程序设计实验6. 微机接口技术实验三、实验仪器与设备1. 微机原理实验箱2. 示波器3. 数字万用表4. 计算机一台5. 实验指导书四、实验步骤与内容1. 微机系统认识实验(1)观察实验箱的结构,了解各个模块的功能;(2)熟悉实验箱的电源、复位、运行等按钮的使用方法;(3)学习微机系统的工作流程,包括加电、复位、启动等过程;(4)观察微机系统启动后的运行状态,了解各个模块的协同工作。
2. 微机硬件组成实验(1)观察实验箱的CPU、内存、I/O接口等硬件模块;(2)学习CPU的内部结构,包括寄存器、控制单元、运算单元等;(3)学习内存的存储原理,了解ROM、RAM等存储器的特点;(4)学习I/O接口的工作原理,了解中断、DMA等传输方式。
3. 微机指令系统实验(1)学习微机指令系统的基本格式,包括操作码、地址码等;(2)掌握微机指令系统的寻址方式,包括立即寻址、直接寻址、间接寻址等;(3)编写简单的汇编语言程序,实现加、减、乘、除等运算;(4)学习微机中断处理过程,了解中断向量表、中断服务程序等概念。
4. 微机寻址方式实验(1)学习微机寻址方式的基本概念,包括直接寻址、间接寻址、寄存器寻址等;(2)编写程序,实现不同寻址方式下的数据访问;(3)观察不同寻址方式对程序执行速度的影响。
5. 微机程序设计实验(1)学习汇编语言程序设计的基本方法,包括数据定义、指令编写、程序结构等;(2)编写简单的程序,实现数据交换、排序等操作;(3)学习微机程序的调试方法,包括单步执行、断点设置等。
6. 微机接口技术实验(1)学习微机接口技术的基本概念,包括并行接口、串行接口等;(2)观察实验箱中的并行接口、串行接口等模块,了解其工作原理;(3)编写程序,实现数据在并行接口、串行接口之间的传输;(4)学习微机中断处理在接口技术中的应用。
微机原理实验报告

微机原理实验报告概述:微机原理是计算机科学与技术专业中的一门重要课程,通过实验学习,可以加深对计算机内部运行原理的理解,提高软硬件的开发和调试能力。
本实验报告将介绍我对微机原理实验的学习和思考。
实验一:二进制转换实验在这个实验中,我首先了解了二进制数的概念以及其和十进制数的转换方法。
通过实际操作,我加深了对计算机内部数据表示方式的理解。
这对于后续学习计算机系统结构和编程语言至关重要。
实验二:逻辑门电路实验逻辑门电路是计算机硬件的基础组成部分,通过实验,我学会了使用逻辑门芯片构建各种逻辑电路,并能够通过真值表分析和验证逻辑电路的正确性。
这对于理解计算机内部的数据处理和控制逻辑有着直接的帮助。
实验三:运算器设计实验在这个实验中,我通过学习和设计算术逻辑单元(ALU),了解了计算机的算术操作过程,并能够通过运算器实现基本算术运算。
这对于理解计算机内部数据的处理和计算机指令的执行有着重要的意义。
实验四:存储器与外设实验存储器是计算机系统的重要组成部分,通过实验,我深入了解了存储器的类型、组织结构和访问方式,并通过外设与存储器的交互,实践了计算机系统的输入和输出过程。
实验五:微处理器实验微处理器是计算机系统中最核心的部件,通过实验,我学习了微处理器的基本运行原理,能够通过汇编语言编写程序,并通过微处理器执行程序实现特定的功能。
这个实验为我今后学习计算机体系结构和操作系统打下了坚实的基础。
实验总结:通过这几个实验,我深入了解了微机原理课程的实践内容和相关知识。
实验的过程中,我不仅学会了使用仪器设备和工具,还培养了自己的动手能力和团队合作精神。
通过不断的实践,我对计算机内部结构和运行原理有了更深刻的理解,也提高了我的问题解决能力和创新思维。
未来展望:微机原理实验的学习只是计算机科学与技术专业中的一小部分。
我希望在今后的学习过程中能加深对计算机体系结构、操作系统、编程语言等方面的学习,并不断深入钻研,成为一名优秀的计算机科学与技术专业人才。
太原理工大学 微机原理 实验四 直流电机测速实验

本科微型计算机原理及应用实验报告课程名称:微型计算机原理及应用实验名称:直流电机测速实验实验地点:微机原理实验室实验四 直流电机测速实验一. 实验目的(1).掌握8254的工作原理和编程方法(2).了解光电开关的使用方法,掌握用光电传感器测量电机转速的方法。
二. 实验内容光电测速的基本电路由光电传感器、计数器和定时器组成。
测量时在被测电机主轴上固定一个圆盘,圆盘的边缘上打上小孔。
传感器的红外发射端和接收端装在圆盘的两测,电机带动圆盘转到有孔的位置时,红外光通过,红外接收管导通,输出低电平。
红外光被挡住时接收管截止,输出高电平。
用计数器记录在一定时间内传感器发出的脉冲个数就可以计算出电机转速。
三. 线路连接接线方法:8254计数器/定时器0和2作为定时器,确定测速时间,定时器0的CLK0接1MHZ 脉冲频率,OUT0作为定时器2的输入,与CLK2相连,输出OUT2与8255的PA0端相连。
GATE0、GATE2均接+5V ,8254计数器/定时器1作为计数器,输入CLK1与直流电机计数端相连,GATE1与8255的PC0相连。
电机DJ 端与+5V~0V 模拟开关SW1相连。
四. 编程提示8254计数器/定时器1作为计数器,记录脉冲个数,计数器/定时器0和2作为定时器,组成10~60秒定时器,测量脉冲个数,算出电机每分钟的转速并显示288H~28FH280H~287H PA 0PC 0 CSOUT 0GATE 0 CLK 0 OUT 1 GATE 1 CLK 1 OUT 2 GATE 2 CLK 2 CS直 流 电 机DJ计数 +5VSW11MHz+5V +5V8255 8254在屏幕上。
8255的PA0根据OUT2的开始和结束时间,通过PC0向8254计数器/定时器1发出开始和停止计数信号。
五.流程图六.参考程序DATA SEGMENTIOPORT EQU 0D880H-0280HIO8255K EQU IOPORT+283HIO8255A EQU IOPORT+280HIO8255C EQU IOPORT+282HIO8254K EQU IOPORT+28BHIO82542 EQU IOPORT+28AHIO82541 EQU IOPORT+289HIO82540 EQU IOPORT+288HMESS DB 'STRIKE ANY KEY,RETURN TO DOS!', 0AH, 0DH,'$' COU DB 0COU1 DB 0COUNT1 DB 0COUNT2 DB 0COUNT3 DB 0COUNT4 DB 0DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATASTART: MOV AX, DATAMOV DS, AXMOV DX, OFFSET MESSMOV AH, 09HINT 21HMOV DX, IO8254KMOV AL, 36HOUT DX, ALMOV DX, IO82540MOV AX, 50000OUT DX, ALNOPNOPMOV AL, AHOUT DX, ALMOV DX, IO8255KOUT DX, ALMOV DX, IO8255C MOV AL, 00OUT DX, ALLL: MOV AH, 01HINT 16HJNZ QUIT1MOV DX, IO8254K MOV AL, 70HOUT DX, ALMOV DX,IO82541 MOV AL,0FFHOUT DX,ALNOPNOPOUT DX, ALMOV DX, IO8254K MOV AL, 90HOUT DX, ALMOV DX, IO82542 MOV AL, 100OUT DX, ALMOV DX, IO8255C MOV AL, 01HOUT DX, ALJMP A0QUIT1: JMP QUITA0: MOV DX, IO8255AAND AL, 01HJZ A1MOV DX, IO8255C MOV AL, 00HOUT DX, ALMOV DX, IO8254K MOV AL, 70HOUT DX, ALMOV DX, IO82541 IN AL, DXMOV BL, ALIN AL, DXMOV BH, ALMOV AX, 0FFFFH SUB AX, BXCALL DISPMOV DL, 0DHMOV AH,02INT 21HMOV DL, 0AHMOV AH, 02INT 21HJMP LLDISP PROC NEARMOV DX, 0000H MOV CX, 03E8H DIV CXMOV COUNT1, ALMOV AX, DXMOV CL, 64HDIV CLMOV COUNT2, AL MOV AL, AHMOV AH, 00HMOV CL, 10DIV CLMOV COUNT3, AL MOV COUNT4, AH MOV AL, COUNT1 CALL DISP1MOV AL, COUNT2 CALL DISP1MOV AL, COUNT3 CALL DISP1MOV AL, COUNT4 CALL DISP1RETDISP ENDPDISP1 PROC NEARAND AL, 0FHCMP AL, 09HJLE NUMADD AL, 07H NUM: ADD AL, 30HMOV DL, ALMOV AH,02INT 21HRETDISP1 ENDPQUIT: MOV AH, 4CHINT 21HCODE ENDSEND START七.实验步骤及结果1、在windows环境下,打开“开始”菜单,选择“运行”项,然后输入”CMD”,按“确定”进去DOS环境。
微机原理实验报告_2

实验一汇编语言的编译、链接和调试一、实验目的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的文件。
微机原理的实验报告

一、实验目的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. 实验目的本次实验的目的是通过并口实验,了解并实践如何使用并行口控制外部设备。
并口是计算机上常见的接口之一,用于与外部设备进行数据交互,例如打印机、键盘、LED灯等。
通过本次实验,我们将学会如何通过编程的方式控制并口输出信号,进而控制外部设备的工作。
3. 实验步骤(1)准备工作:首先,我们需要准备一台支持并口的计算机,并确保系统已经安装了合适的驱动程序。
然后,我们需要连接一根并口数据线,将计算机与外部设备连接起来。
(2)编程环境搭建:我们要使用的编程语言是C语言,所以需要在计算机上配置相应的编译器和开发环境。
(3)编写代码:接下来,我们需要编写一段简单的代码,来控制并口输出信号。
这段代码通常包括对并口寄存器的读写操作。
我们可以使用IO口的寄存器来设置输出状态和控制外部设备的工作。
(4)测试与调试:在编写完代码后,我们需要进行测试和调试。
通过观察外部设备的反应,可以判断代码是否正确地控制了并口输出信号。
如果出现问题,我们可以通过查看代码和调试信息来找出问题的原因。
4. 实验结果我们按照上述步骤完成了实验,并取得了如下实验结果:(1)成功控制外部设备:通过编写控制代码,我们成功地控制了与计算机连接的外部设备。
例如,我们可以在LED灯上显示相应的图案和文字。
(2)了解并口寄存器操作:通过本次实验,我们对并口寄存器的操作有了更深入的了解。
我们学会了如何设置输出状态和控制外部设备的工作模式。
(3)掌握数据传输方法:在实验过程中,我们还掌握了一些基本的数据传输方法。
例如,我们可以通过并口将数据传输给外部设备或从外部设备接收数据。
5. 实验心得通过本次并口实验,我们对微机系统的基本原理和结构有了更深入的了解。
微机原理实验报告

微机原理实验报告一、实验目的本次微机原理实验的主要目的是通过实际操作和观察,深入理解微机系统的工作原理和组成结构,掌握微机系统的编程和调试方法,提高我们对微机原理的实际应用能力。
二、实验设备1、计算机一台2、微机原理实验箱一套三、实验内容1、 8255 并行接口实验了解 8255 芯片的工作原理和编程方法。
通过编程实现 8255 芯片的 A 口、B 口、C 口的输入输出控制。
2、 8253 定时/计数器实验掌握 8253 芯片的工作方式和编程要点。
利用 8253 芯片实现定时和计数功能。
3、 8259 中断控制器实验学习 8259 芯片的中断管理机制。
编写中断服务程序,实现中断响应和处理。
四、实验原理1、 8255 并行接口8255 是一种可编程的并行接口芯片,具有 A、B、C 三个 8 位端口。
通过对控制字的编程,可以设置各个端口的工作方式为输入或输出。
2、 8253 定时/计数器8253 包含三个独立的 16 位计数器,每个计数器可以工作在不同的方式下,如方式 0 到方式 5。
通过对计数器的初值设置和控制字编程,可以实现定时和计数功能。
3、 8259 中断控制器8259 用于管理外部中断请求,可实现中断优先级的判断和中断嵌套。
通过对 8259 的初始化编程,可以设置中断触发方式、中断向量等。
五、实验步骤1、 8255 并行接口实验连接实验电路,将 8255 芯片与实验箱上的相关引脚连接好。
编写程序,设置 8255 的控制字,使 A 口为输出,B 口为输入。
向 A 口输出数据,从 B 口读取数据,并观察实验结果。
2、 8253 定时/计数器实验连接实验电路,将 8253 芯片与实验箱上的相关引脚连接好。
编写程序,设置 8253 计数器 0 的工作方式为方式 2,初值为 1000。
启动计数器,观察输出引脚的波形变化。
3、 8259 中断控制器实验连接实验电路,将 8259 芯片与实验箱上的相关引脚连接好。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本科实验报告课程名称:微机原理及应用实验项目:实验地点:专业班级:机械xxx班学号:xxxxxxxxxx 学生姓名:xx指导教师:2016年12月28日实验一汇编语言程序开发环境与程序调试一、实验要求和目的1.熟悉在微机上编辑、汇编、连接、调试和运行汇编语言程序的过程,掌握PC 环境下命令行方式的特点。
2.熟悉汇编过程中一些常见出错信息。
3.熟悉程序调试的方法, DOS命令窗口的debug的常用命令。
二、实验内容1、项目要求:在屏幕上显示字符串‘Hello,world!’。
2、程序设计思想:运用DOS系统功能调用(INT 21H)的9号功能。
DOS系统功能调用的9号功能是显示字符串,它调用的参数DS:DX=串地址,且字符串以“$”结束。
程序流程图如图1-1:图1-1 程序流程图3、程序清单:完整指令代码如下(简化段定义格式):.model small ;定义程序的存储模式.486 ;说明使用的80x86微处理器指令.stack ;定义堆栈段.data ;定义数据段String db 'Hello, world!','$'.code ;定义代码段.startup ;程序执行开始Mov ax, seg String ;把String的段地址送axMov ds,ax ;ax送ds,ds取得string的段地址mov dx,offset String ;String的偏移地址送dxmov ah,9 ;字符串显示功能int 21h ;DOS功能调用mov ax,4c00hint 21h ;返回DOS.exitend三、结果与分析指导教师:年月实验二内存数据的移动一、实验要求与目的:1、实验要求:编写程序实现把数据段的字符串数据移动到附加段中。
2、实验目的:通过项目学习汇编的数据传送指令和串处理类指令,巩固寻址方式,学习汇编程序设计。
二、实验内容:1、项目要求:把数据段中以dstring地址标号为开始地址的“hello world!”字符串移动到附加段以sstring地址标号为开始地址中去。
2、设计思想:从源串中取一个字符到AL中,然后把刚取到的字符放到目的串指定位置,重复这样的过程,把源串的字符取完为止。
程序流程如图2-1所示。
图2-1 程序流程图3、程序设计清单:实现这样功能的程序方法很多,下面给出了实现这一功能的完整程序清单(完整段定义格式)。
方案一(无聊版):采用的是loop指令,CX为循环次数,当CX为0时退出循环。
加入了换行指令。
用字符串常量’$’改变字符串,提前终止字符串的输出。
程序如下:DSEG SEGMENTdstring DB 'HELLO,WORLD!',33,33, '$' ;15个字节HELLO,WORLD!!!dstring_1 db ' 数据段的字符串:' , '$' ;一定要加'$',表示一个字符串的结束dstring_2 db ' 附加段的字符串:' , '$' ;在屏幕上显示的字符串DSEG ENDSESEG SEGMENTsstring DB 15 DUP(?) ;附加段预留15个字节空间ESEG ENDSCODE SEGMENTASSUME CS:CODE, DS:DSEG, ES:ESEGstart: MOV AX, DSEG ;程序开始执行的地方MOV DS, AX ;将DSEG的段地址给dsMOV AX, ESEGMOV ES, AX ;将SSEG的段地址给esLEA SI, dstring ;将dstring的首地址给siLEA DI, sstring ;将sstring的首地址给diMOV CX, 15 ;CX存放loop指令的循环次数S: MOV AL, [SI]MOV ES:[DI], ALINC DIINC SILOOP Smov dX,offset dstring_1MOV AH,09hINT 21H ;输出字符串‘数据段的字符串:’MOV DL,0AH ;输出换行MOV AH,02HINT 21Hmov dX,offset dstringMOV AH,09hINT 21H ;输出字符串:HELLO,WORLD!!!MOV DL,0AHMOV AH,02HINT 21H ;输出换行mov dX,offset dstring_2MOV AH,09hINT 21H ;输出字符串dstring_2MOV DL,0AHMOV AH,02HINT 21H ;输出换行mov al,'$'mov es:[di-3],al ;将第二个'!'改成'$'以终止字符串的继续输出MOV AX,ESMOV DS,AX ;将附加段的段地址附给数据段mov dX,offset sstringMOV AH,09hINT 21H ;显示字符串HELLO,WORLD!注意不是!!!MOV AX, 4C00HINT 21H ;返回DOSCODE ENDS ;代码段结束END start ;程序结束方案二:采用字符串操作指令movsb,执行[di]=[si]。
Si与di自动地址改变方向,由std,cld控制。
Cx作为计数器,前面应用rep指令重复。
程序如下:DSEG SEGMENTdstring DB 'HELLO,WORLD!','$' ;13个字节HELLO,WORLD!!! DSEG ENDSESEG SEGMENTsstring DB 13 DUP(?) ;附加段留13个字节空间ESEG ENDSCODE SEGMENTASSUME CS:CODE, DS:DSEG, ES:ESEGstart: MOV AX, DSEG ;程序开始执行的地方MOV DS, AX ;将DSEG的段地址给dsMOV AX, ESEGMOV ES, AX ;将SSEG的段地址给esLEA SI, dstring ;将dstring的首地址给siLEA DI, sstring ;将sstring的首地址给diMOV CX, 13 ;CX存放rep指令的重复次数cld ;将DF位清零,则di与si自增rep movsb ;执行[di]=[si]MOV AX,ESMOV DS,AX ;将附加段的段地址附给数据段mov dX,offset sstringMOV AH,09hINT 21H ;显示字符串HELLO,WORLD!!!MOV AX, 4C00HINT 21H ;返回DOSCODE ENDS ;代码段结束END start ;程序结束方案三:采用是cmp与ja跳转指令来实现数据的移动。
程序如下:DSEG SEGMENTdstring DB 'HELLO,WORLD!', '$' ;13个字节HELLO,WORLD!!!DSEG ENDSESEG SEGMENTsstring DB 15 DUP(?) ;附加段留13个字节空间ESEG ENDSCODE SEGMENTASSUME CS:CODE, DS:DSEG, ES:ESEGstart: MOV AX, DSEG ;程序开始执行的地方MOV DS, AX ;将DSEG的段地址给dsMOV AX, ESEGMOV ES, AX ;将SSEG的段地址给esLEA SI, dstring ;将dstring的首地址给siLEA DI, sstring ;将sstring的首地址给diMOV CX, 13 ;CX存放循环次数S: MOV AL, [SI]MOV ES:[DI], ALINC DIINC SIDEC CXCMP CX,0JA SMOV AX,ESMOV DS,AX ;将附加段的段地址附给数据段mov dX,offset sstringMOV AH,09hINT 21H ;显示字符串HELLO,WORLD!MOV AX, 4C00HINT 21H ;返回DOSCODE ENDS ;代码段结束END start ;程序结束附简化段定义格式如下:.model small ;定义程序的存储模式.486 ;说明使用的80X86微处理指令.data ;定义数据段开始dstring db 'hello,world!','$'sstring db 13 dup(0) ;使用的同一个数据段.code ;定义代码段.startup ;程序开始执行的地方mov ax,seg dstring ;=mov ax,@datamov ds,ax ;将dstring的段地址附给dsmov es,ax ;为了使用movsb指令,由于两个字符串都在数据段,所以令es=dslea si,dstringlea di,sstringmov cx,13 ;循环次数cldrep movsbmov dx,offset sstringmov ah,9int 21hmov ax,4c00hint 21h.exitEnd4、调试过程:(在win7x32下调试的方案二)第1步:进入debug:命令debug+file.exe。
第2步:用r命令查看cpu寄存器内容,这一步基本没用。
看注意点即可注意:此时并未给ds,es赋值,在ds,es赋值之前有ds=es,cs=ds+10h。
第3步:用U命令查看汇编指令。
直接暴力输入g 001a 也可,但只适用本程序。
第四步:用T命令执行一条机器指令。
这里了执行四次。
此时可以看到ds和es已经赋值了,此时来查看内存的内容。
注意cs没变。
第五步:用d命令查看内存的内容。
即查看DS:0 和ES:0输入d 0bc6:0和d 0bc7:0。
可以看出已经完成移动了。
三、结果与分析没仔细去看为什么0bc6:0010处也有hello,world。
我调试过了发现还有,猜测可能与ss的栈有关。
四、拓展用q命令退出debug。
用p命令一次执行完循环。
用g+偏移地址(ip),可以直接执行到上一条指令,即此时IP=ip。
教师点评:指导教师:年月日实验三分支程序结构一、实验要求与目的:1、实验要求:掌握分支结构程序设计的基本方法;掌握无条件转移指令和条件转移指令的使用;掌握分支结构程序设计的两种基本结构的使用。
2、实验目的:通过分支程序的设计掌握结构化程序设计方法和常用算法设计。
二、实验内容:1、项目要求:编写程序实现:在数据段中,有一个按从小到大顺序排列的无符号数组,其首地址存放在SI寄存器中,数组中的第一个单元存放着数组长度。
在key单元中有一个无符号数,要求在数组中查找是否存在[key]这个数,如找到,则使CF=0,并在DI中给出该单元在数组中的偏移地址;如未找到,则使CF=1。