微机原理实验报告
微机原理综合实验报告

滨江学院微机原理综合实验实验报告学生姓名学号专业信息工程班级2016级二O一八年十二月三十日微机原理综合实验实验一利用DEBUG调试程序调试程序段1、实验目的1)熟悉DEBUG有关命令的使用方法。
2)利用DEBUG掌握有关指令的功能。
3)利用DEBUG运行简单的程序段。
2、实验内容1)进入和退出DEBUG程序。
2)学会DEBUG中的D命令、E命令、R命令、T命令、A命令、G命令等的使用。
对于U命令、N命令、W命令等,也应试一下。
3)利用DEBUG,验证乘法、除法、加法、减法、带进位加、带借位减、堆栈操作指令、串操作指令的功能。
3、实验准备1)仔细阅读有关DEBUG命令的内容,对有关命令,都要事先准备好使用的例子。
2)作为例子,准备用A命令,输入在显示器上显示字符“S”的系统调用程序段。
3)阅读将AX左移9位的程序段。
4、实验步骤1)在DOS提示符下,进入DEBUG程序。
2)在DOS目录下启动DEBUG。
3)详细记录每一步所用的命令,以及查看结果的方法和具体结果。
5、实验报告要求1)如何启动和退出DEBUG程序。
2)整理每个DEBUG命令使用的方法,实际示例及执行结果。
3)启动DEBUG后,要装入某一个.EXE文件,应通过什么方法实现?实验结果:实验二分支程序实验1、实验目的1)掌握分支程序的设计方法。
2)掌握利用DEBUG修改参数、检查结果的方法。
3)掌握汇编语言源程序的编辑、汇编、连接及调试过程。
2、实验内容1)编写一个程序,显示AL寄存器中的两位十六进制数2)编写一个程序,判别键盘上输入的字符;若是1-9字符,则显示之;若为A-Z 或a-z字符,均显示“c”;若是回车字符<CR>(其ASCII码为0DH),则结束程序,若为其它字符则不显示,继续等待新的字符输入。
3、实验准备1)编写实验内容要求的两个程序。
2)写出调试以上程序,即修改程序参数,检查结果的操作方法。
3)熟悉源程序汇编、连接命令的使用方法即要回答的内容。
微机原理实验一报告

微机原理实验一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______。
微机原理实验报告_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. 实验心得通过本次并口实验,我们对微机系统的基本原理和结构有了更深入的了解。
微机原理实验报告

目录软件实验部分:实验一清零程序实验二拆字程序实验三拼字程序实验四数据区传送子程序实验五数据排序实验实验六查找相同数个数实验七无符号双字节快速乘法子程序实验八多分支程序实验九脉冲计数(定时/计数器实验)实验十电脑时钟(定时器、中断综合实验)硬件实验部分:实验一 P1口亮灯实验实验二 P1口转弯灯实验实验三 P3.3口输入,P1口输出实验四工业顺序控制实验五继电器控制实验六 8255控制交通灯实验七 LED16×16点阵显示实验实验八串并转换实验实验九 A/D转换实验实验十 D/A转换实验十一电子音响实验十二步进电机控制实验十三 8032串行口应用实验㈠——双机通信实验十四小直流电机调速实验软件实验部分本节共编了十个软件实验,通过这些实验程序的调试,使学生熟悉MCS-51的指令系统,了解程序设计过程,掌握汇编语言设计方法以及如何使用实验系统提供的调试手段来排除程序错误。
本节提供的软件实验,涉及外部数据存储器扩展寻址操作,因此需按下图连接实验线路。
1.将存储器单元的D0—D7总线接口用8芯扁平线与数据总线单元D0—D7的任一接口相连,存储器单元的A0—A7地址接口与地址总线单元(低8)A0—A7的任一接口相连,存储器单元的A8—A12地址接口与地址总线单元(高8)A8—A12的任一接口相连。
注意外部扩充的数据区的有效范围。
2.存储器单元的WE/PGM插孔与六位LED左下方的IOWE插孔相连。
3.存储器单元的OE插孔与六位LED左下方的IORD插孔相连。
4.存储器单元的CS1插孔与六位LED右下方的IOWE插孔相连。
实验一清零程序一、实验目的掌握汇编语言设计和调试方法,熟悉键盘操作。
二、实验内容把2000H-20FFH的内容清零三、程序框图四、实验步骤用连续或单步方式运行程序,检查2000-20FF中执行程序前后的内容变化。
五、思考假使把2000H-20FFH中的内容改成FF,如何修改程序。
微机原理(单片机汇编)实验报告

软件实验报告软件实验一一、实验目的1.熟悉软件实验的基本步骤和汇编程序的调试方法;2.了解内存块的移动方法;3.了解将十六进制数转换成ASCII值的方法。
二、实验原理用MOV和MOVX指令可以进行数据的赋值和移动,用循环可以完成大量数据的复制。
三、实验内容及步骤1、软件设置为模拟调试状态,在所建的Project文件中添加例程1的源程序进行编译,编译无误后,可以选择单步或跟踪执行方式或全速运行程序。
打开CPU窗口,观察CPU窗口各寄存器的变化。
打开View菜单中的Memory Window,可以观察内部RAM、外部RAM的数据和程序存储器中的程序。
在Address窗口输入X:8000H后回车,观察8000H-800FF起始的256个字节单元的内容。
2、新建一个Project文件,添加例程2的源程序进行编译,编译无误后,可以选择单步或跟踪执行方式或全速运行程序。
打开View菜单中的Memory Window,在Address 窗口的Memory#1输入X:3000H后回车,点击运行按钮后, 在Memory#2输入X:4000H后回车,观察外部RAM3000H和4000H中的内容。
3、添加将片内30H-3FH单元的内容复制片外片外1030H~103FH中的源程序,编译运行,观察比较30-3FH单元中的内容和片外1030H-103FH中的内容。
4、添加将30H、31H单元中的十六进制数,转换成ASCII码,存放到40H开始的4个单元中的源程序,编译运行,观察结果。
5、添加求内部RAM 30H—37H单元中8个无符号数的算术和的源程序,8个无符号数设定为25H,36H,4AH,65H,7FH,82H,9BH,1DH,观察39H,38H中的数字是否分别为02H,C3H。
四、实验结果1.步骤1的结果为8000H-80FFH的内容都为1.2.步骤2的结果为3000H起始的256个字节存储块与4000H起始的256个字节存储块各单元内数据对应相同。
微机原理实验报告

微机原理实验报告实验⼀DEBUG 调试实验类型:实验课时:指导教师:时间:2013 年⽉⽇课次:第节教学周次:第周实验分室:实验台号:实验员:⼀、实验⽬的1.练习使⽤DEBUG,调试简单汇编程序。
⼆、实验要求1.掌握DEBUG的使⽤,调试程序。
2.读懂程序中各条指令,说明程序功能。
三、实验内容1.启动DEBUG,⽤A命令输⼊并汇编下列程序段。
100 MOV SI,200103 MOV CX,10106 MOV AL,0108 MOV [SI ],AL10A INC SI10B INC AL10D DEC CX10E JNZ 108110 INT 3四、实验结果及分析实验⼆简单汇编语⾔设计实验类型:实验课时:指导教师:时间: 2012 年⽉⽇课次:第节教学周次:第周实验分室:实验台号:实验员:⼀、实验⽬的1.巩固DEBUG及宏汇编的使⽤。
2.加深对指令的理解。
⼆、实验要求1.设堆栈指针SP=2000H,(AX)=3000H,(BX)=5000H。
请编⼀程序将AX的内容和BX的内容进⾏交换。
请⽤堆栈作为两寄存器交换内容的中间存储单元,⽤DEBUG调试程序进⾏汇编与调试。
2.设DS=当前段指地址,(BX)=0300H,(SI)=0002H,请⽤DEBUG的命令将存储器偏移地址300H~304H连续单元顺序装⼊0AH、0BH、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将两个寄存器的内容进⾏交换时,必须有⼀个中间寄存器才能进⾏内容的交换,如果⽤堆栈做为中间存储单元,必须遵循先进后出的原则。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
大学科技学院实验报告课程名称:微机原理实验实验一数据转换实验一、实验目的(1)初步掌握在PC机上建立、汇编、链接和运行8086/88汇编语言程序的过程。
(2)通过对两个验证性试验的阅读、调试、掌握不同进制数及编码相互转换的程序设计方法。
(3)完成程序设计题,加深对数码转换的理解,了解简单程序设计方法。
二、实验内容1.十六进制数转换为ASCII码设二字节十六进制数存放于其实地址为3500H的内存单元中,把他们转换成ASCII码后,再分别存入起始地址为350A的四个内存单元中。
从书上ASCII码表中可知十六进制数加30H即可得到0H~9H的ASCII码,而要得到AH~FH 的ASCII码,则需再加7H。
请根据所给流程图理清思路,总结出对应的若干要点。
将流程图与参考程序相互。
根据分析的结果将运行时内存的变化列写出来。
学习并使用MASM或WAVE仿真软件分析程序运行过程中相关寄存器及相应内存的变化情况来验证自己的猜想,以巩固命令的学习,提高编程能力。
图1-1-1DATAS SEGMENT;此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AX;此处输入代码段代码MOV CX,0004H;根据转换个数设定循环次数;(两字节十六进制数如6B2C对应有四个用十六进制表示的ASCII码表示,即四个字节)MOV DI,3500H;指向该两字节十六进制数起始地址,此时在调试窗口修改内存字节MOV DX,[DI];将地址3500H中的内容(6B2C)给DXA1: MOV AX,DX;第一次时DX=6B2C,;因为想顺序取C、2、6、B,所以需要一个中间变量AND AX,000FH;取低四位,第一次取到C,CMP AL,0AH;判断AL属于0~9,还是A~FJB A2;如果是0~9,则跳转到A2ADD AL,07H;若属于A~F,再加上07H后也是再加上30H即得到转换。
A2: ADD AL,30H;0~9的ASCII码对应的十六进制比其;本身(注意:亦是十六进制)大30HMOV [DI+0AH],AL;将转码后的C,即43H给350AINC DI;将DI指向下一字节,用于存储转码后的值,第一次自增后要存‘2’PUSH CX;功能是接下来要用到CX作为一个中间变量,;而刚才已经使用并且接下来还会用到CX的值,;也可以不用CX,用其他不用的寄存器或者直接立即数形式的。
MOV CL,04H;若直接用立即数,可能不稳定,(原因不详)用一个中间变量。
SHR DX,CL;右移四位,如第一次转码后,DX=6B2C,;为下一次取低四位的2做好前提,将0010b移到低四位POP CX;执行完后,CX又用于计数LOOP A1;每一次转码后,执行完此句后,CX的值都要变化,;分别是3,2,1,0;正好四次。
MOV AH,4CHINT 21HCODES ENDSEND START1.3 实验过程与心得1.3.1 编程要点1.数据在内存空间中的存储情况要清晰;图1-1-2 图1-1-3如上图所示图1-2为处理前的存储情况,通过调试中的内存修改来实现并检查,图1-3为最后期待的转码结果,通过查询内存来检查。
2.基本功能的实现:分两种情况去转码。
中间涉及到比较选择语句,可以通过标志位来理解学习JB的实现条件是由于标志位的变化。
3.取与存两个“指针”的变化(1)取时通过一个中间变量取经过右移四位后的低字节来依次选择C、2、B、6;使用软件时,看AX经过“AND AX,000FH”后是否取到了这些数。
(2)每一次转码后存储时将指针在存储空间305A不断移动。
每次存储后,可查询内存。
(3)每一次循环过后,CX都要变化,也可同时学习PUSH、POP 功能。
1.3.2 软件使用简介1.W A VE软件它可以将内存的变化及寄存器的变化实时展示出来,红色数据是新变化的值。
查找内存时可通过右键转到地址即可,但需要输入物理地址。
如此时偏移地址为3500H,而通过观察DI赋值前一状态ds为20H,则通过计算可知在3700H输入2C,3701H输入6B即可,双击修改。
可以与硬件连接做接口实验,但没有人机对话功能。
在使用之前需要建立新项目。
过程简介如下:选择8086仿真--右击模块文件--新建项目--假如已编ASM文件(最好一个文件夹中)--保存项目--全部编译--单步执行(F8)--观查内存变化。
2.MASM软件它可以通过DEBUG调试窗口来进行观察,但需要有不同的命令输入去修改内存,查询内存,并且更新情况也不如W A VE直白,若有其他未考虑的某值变化,不宜观测。
单步跟踪(“t”)是先执行上一条语句,并显示执行后的状态,即显示上一语句执行后的状态。
而末尾的命令语句还未执行。
它不需要计算物理地址。
如找3500H时,直接输入“d ds:3500”即可查询。
另外,标志位的查询尽管每次单步跟踪都显示,但是需要先记住各个符号代表的意思。
修改内存较W A VE繁琐,需要输入e 3500,然后会提示修改,但一次只能改一个字节的内容。
其余命令可以在左侧DEBUG调试里双击在右侧得到。
另外,状态的显示没有记录。
MASM有人机对话功能,但在使用时,无法调试查看内存变化。
过程简介:编程--保存(.asm)--编译成目标文件--生成可执行文件--DEBUG调试。
1.3.3 使用过程1.将二字节十六进制数存放于起始地址为3500H的内存单元中图1-1-42.查看内存的变化--注意DX的变化图1-1-53. (1)注意AX的变化,已取低四位(2)标志位的变化:0CH比0AH大,NC表示CF=0,不执行JB后的命令,即继续执行+07H。
图1-1-64.(1)结合图1-7和1-8观察确定内存变化的时刻,了解调试指令t的运行情况;(2)DI的变化图1-1-7图1-1-85.(1)结合图1-8和图1-9观察DX的变化;(2)在调试过程中发现AX有非预期的变化,而原先也是有的,只是没注意到。
这个对于代码段的思路学习是没太大关系的。
图1-1-96.(1)注意CX的变化;(2)标志位CF由NC变成了CY,判断为JB成立,执行A2图1-1-107.(1)存储顺序的检查,确定指针指在350B,即确定可以往后存储;(2)压栈的变量(CX)变化时间,PUSH后并没有改变CX的值;图1-1-118.(1)出栈的变量(CX)变化,出栈后CX的值还原。
(在这里才提到是因为第一次循环中CX都是0004H,看不出变化)(2)g命令的使用,它可以全部运行,方便查看最后的结果。
因为至此关于编程的几个要点已全部明确。
图1-1-129.(1)检查执行结果,存储结果与预期相符。
(2)检查CX是否为预期的0,应用跟踪执行指令(‘t’),发现g 只是一个断点,用于显示验证。
但内存已发生了改变。
图1-1-1310. 由于内存已变化,无法确定后续命令是否对内存产生效果,虽从内存上不知350C是否再一次得到赋值,但AX的变化也可知。
但更改350D的值,观察350D的变化也可以明显确定,形成对比。
图1-1-1311.通过图1-14和图1-15可知,LOOP指令CX的计数方式。
图1-1-14图1-1-152.程序设计:将十进制的ASCII码转换为BCD设从键盘输入的五位十进制数的ASCII码存放在2000H起始的内存单元内。
若输入的不是十进制数的ASCII 码,则对应存放结果的单元内容为“FF”。
完成相应程序的编制,进行调试并验证结果。
2.1 程序流程图2.2 程序DATAS SEGMENT;此处输入数据段代码 DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码 STACKS ENDS CODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START :MOV AX,DATAS MOV DS,AX;此处输入代码段代码 MOV CX,05hMOV BX,2000H ;存十进制数的ASCII 码的起始位置 GET: MOV AH,01H ;键入十进制数 INT 21H ; mov al,31h MOV [BX],AL ;比较输入的所对应的ASCII 码是否在0~9内 CMP AL,30H JB error CMP AL,39H JA error JMP crec ;不经过errorerror: ;不是十进制数时,将FFH 存入对应内存。
push cxmov cx,0ffh MOV [BX+1000H],cx pop cx MOV DL,[BX+1000H];直接将FF 做为ASCII 码所对应的符号显示出来,用以检验 MOV AH,02H INT 21H JMP endd crec: SUB AL,30H ;如若属于0~9,则图1-2-1-30H即可得到对应的十进制数于内存中MOV[BX+1000H],AL;将每一次翻过来的值放到3000H,3001H...3004H 中MOV DL,[BX+1000H];显示用以检查验证add dl,30hMOV AH,02HINT 21Hendd:INC BXLOOP GET ;这种显示是一次输入对应两个地方的存储并分别显示。
MOV AH,4CHINT 21HCODES ENDSEND START2.3 程序运行结果若为0~9,则输入一个数显示一个数;若是除此之外的,则显示FFH做为ASCII所对应的字符,如图2-2所示。
另外,这种演示的前提是确定显示语句是正确的。
图2-2实验二数据处理实验一、实验目的(1) 进一步掌握在PC机上建立、汇编、链接和运行8086/88汇编语言程序的过程。
(2) 通过阅读并调试数据处理的示例程序,完成程序设计题,掌握简单程序的结构。
二、实验内容1. 寻找最大数和最小数的程序设在内存缓冲区BUF+1单元开始,存放8个单字节数,其数据长度在BUF单元,要求找出最大数送MAX单元,最小输送MIN单元。
假如第一个数是最大数,并送到MAX单元中,依次把余下的数送到MAX单元中,否则取下一个数,最后MAX单元中即为最大数。
同理可求出最小数。
1.1 参考程序DATAS SEGMENT;此处输入数据段代码ORG 100H ;定义偏移首地址,方便寻找内存BUF db 8,22,33,12,-1,-50,-32,97,127MAX db?MIN db?DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AX 1.2 实验流程图;此处输入代码段代码MOV CH,0MOV CL,BUF ;存个数数DEC CX ;后面要循环比较七(8-1)次,先变成七MOV AL,BUF+1 ;拿出第一个数放到最大数和最小数中,用于比较和更新MOV MAX,AL ;放到最大数MOV MIN,ALMOV BX,OFFSET BUF+2 ;拿第二个数与现有的最大最小值比较LAST:MOV AL,[BX] ;AL作为暂时存储的寄存器代表新来的要比较的值CMP AL,MAX ;判断是否更大JG GREAT ;若大(用于有符号比较),则跳转CMP AL,MIN ;判断是否更小,也可将相等的情况视作小于,则可省去,直接跳转至LESS即可JL LESS ;若小,也相应跳转JMP NEXT ;若相等,则直接跳过GREAT:MOV MAX,AL;大数更新JMP NEXTLESS:MOV MIN,AL;小数更新NEXT:INC BX ;BX取的是第二个数(用于排序)的地址,现在要指向下一个,即要判断下一个LOOP LAST ;第一次循环后,执行此句前cx为7,然后自减,判断是否继续。