汇编程序调试实验报告
汇编实验报告(-)调试程序DEBUG的使用

汇编实验报告(-)调试程序DEBUG的使用《汇编语言程序设计》实验报告实验一调试程序DEBUG 的使用一、实验目的通过实验掌握下列知识:1、DEBUG命令:A,T,D,F,G;2、数据在内存中的存放方式和内存操作数的几种寻址方式;3、汇编指令:INC,DEC,LOOP,INT 3的应用;4、汇编语言伪指令:BYTE PTR和WORD PTR的应用。
二、内容及步骤1.DEBUG 命令使用表 1.1 DEBUG命令****命令的使用中注意:****①字母不分大小写;②②只使用16 进制数,没有后缀字母;③分隔符(空格或逗号)只在两个数值之间是必须的,命令和参数间可无分隔符;④每个命令只有按了回车键后才有效,可以用Ctrl+Break中止命令的执行;⑤命令如果不符合Debug 的规则,则将以“error”提示,并用“^”指示错误位置。
许多命令的参数是主存逻辑地址,形式是“段基地址: 偏移地址”。
其中,段基地址可以是段寄存器或数值;偏移地址是数值。
如果不输入段地址,则采用默认值,可以是缺省段寄存器值。
如果没有提供偏移地址,则通常就是当前偏移地址。
1、开机后,切换到命令提示符窗口下,出现提示符后键入命令DEBUG, 进入调试环境,显示提示符 '- '。
2、用命令 F 200 220 'AB' 将'AB'的两个ASCII码循环填入内存。
注:第一个参数200是当前段的起始偏移地址,第二个参数220是终了偏移地址,第三个参数‘AB’是被填入的数值,若不给出第二个参数则填入128(8行)个字节。
3、用命令 D200 观察内存中的十六进制码及屏幕右边的ASCII字符。
图1-1 Fill、Dump命令调用对主存操作的命令还支持地址范围这种参数,它的形式是:“开始地址结束地址”(结束地址不能具有段地址),或者是:“开始地址L 字节长度”。
D(Dump)命令显示主存单元的内容,它的格式如下(分号后的部分用于解释命令功能,不是命令本身):D [地址] ;显示当前或指定开始地址的主存内容D [范围] ;显示指定范围的主存内容图1-2 D命令调用左边部分是主存逻辑地址,中间是连续16 个字节的主存内容(16进制数,以字节为单位),右边部分是这16个字节内容的ASCII字符显示,不可显示字符用点“.”表示。
汇编程序及接口技术实验报告

微机汇编程序及接口技术实验报告汇编程序实验:一、实验目的1、熟悉汇编程序调试过程2、掌握算术运算指令运用3、掌握分支程序的编程和调试方法二、实验设备80X86微型计算机三、实验内容1、编程并调试显示“Hello Word!”字符串的汇编程序TITLE HELLODA TA SEGMENTSTR DB'Hello World!$'DA TA ENDSCODE SEGMENTASSUME DS:DATA,CS:CODESTART:MOV AX,DATAMOV DS,AXMOV DX,OFFSET STRMOV AH,9HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START2、A、B、C、D、W是互不相等的在数据段中定义的16位有符号数,并假设加减运算不产生溢出。
编写一个完整段定义的汇编语言程序,计算W=(A+B)×(C—D)。
title asmprogram1_1DA TA SEGMENTA DW 1HB DW 3HC DW 4HD DW 2HW DW 2 DUP(?)DA TA ENDS;CODE SEGMENTASSUME DS:DATA,CS:CODESTART:MOV AX,DATAMOV DS,AXMOV AX,AADD AX,BMOV BX,CSUB BX,DIMUL BXMOV W,AXMOV W+2,DXMOV AH,4CHINT 21HCODE ENDSEND START3、设X、Y为在数据段中定义的有符号字变量。
编写一个完整段定义的汇编语言程序(包含必要的伪指令,给出必要的注释)完成以下操作:若0<X且Y<1000,则AX=2000,BX=0;否则AX=0,BX=2000。
STACKS SEGMENT STACK;DEFINE STACKDW 128 DUP(?)STACKS ENDSDA TAS SEGMENTX DW 11HY DW 22HDA TAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASSTART:MOV AX,DATASMOV DS,AXSUB X,0JNG L1SUB Y,1000JAE L1JMP L2L1:MOV AX,2000MOV BX,0L2:MOV AX,0MOV BX,2000MOV AH,4CHINT 21HCODES ENDSEND START4DA TA SEGMENTBLOCK1 DW 1200H,2000H,3200H,0H,5612H,23H,45H,89H,09H,10H BLOCK2 DW 100 DUP(?)DA TA ENDSCODE SEGMENTASSUME CS:CODE, DS:DA TASTART:MOV AX,DATAMOV DS,AXLEA SI,BLOCK1LEA DI,BLOCK2MOV CX,100REPT:MOV AX,[SI]CMP AX,0JZ NEXTMOV [DI],AXADD DI,2NEXT:ADD SI,2LOOP REPTMOV AH,4CHINT 21HCODE ENDSEND START5DA TA SEGMENTBLOCK1 DW 1200H,2000H,3200H,0H,5612H,23H,45H,89H,09H,10H BLOCK2 DW 100 DUP(?)DA TA ENDSCODE SEGMENTASSUME CS:CODE, DS:DA TASTART:MOV AX,DATAMOV DS,AXLEA SI,BLOCK1LEA DI,BLOCK2MOV CX,100REPT:MOV AX,[SI]CMP AX,0JZ NEXTMOV [DI],AXADD DI,2NEXT:ADD SI,2LOOP REPTMOV AH,4CHINT 21HCODE ENDSEND START微机原理及接口技术实验:实验一 8255并行接口实验一、实验目的1、学习并掌握8255的工作方式及其应用。
【实验】汇编实验报告

【关键字】实验实验一汇编程序的汇编及运行1.实验目的和要求(1)熟悉汇编程序的汇编、连接、执行过程(2)生成LST文件,查看LST文件(3)生成OBJ文件,修改语法错误(4)生成EXE文件(5)执行2.实验环境IBM—PC机及其兼容机实验的软件环境是:操作系统:DOS 2.0以上;调试程序:;文本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.EXE(或ASM .EXE);连接装配程序:LINK .EXE;交叉引用程序:CREF.EXE(可有可无)。
3.实验内容及实验数据记录(1)将数据段输入,取名1.txt,保存在MASM文件夹下。
生成LST文件,(不必连接、运行)用EDIT查看1.LST文件。
试回答:DA1,DA2的偏移量分别是多少?COUNT的值为多少?DA TA SEGMENTORG 20HNUM1=8NUM2=NUM1+10HDA1 DB ‘IBM PC’DA2 DB 0AH, 0DHCOUNT EQU $-DA1DATA ENDSEND(2)输入有错误的文件,修改错误语句。
(MASM没有出现错误即可。
不必连接、运行。
)DA TA SEGMENTV AR1 DB 0, 25, ODH, 300V AR2 DB 12H, A4H, 6BHV AR3 DB ’ABCDEF’V AR4 DW 1234H, 5678HV AR5 DW 10H DUP(?)DATA ENDSCODE SEGMENTASSUME CS: CODE, DE: DA TABEING MOV AX, DA TAMOV DS, AXLEA SI, V AR5MOV BX, OFFSET V AR2MOV [SI], 0ABHMOV AX, V AR1+2MOV [BX], [SI]MOV V AR5+4, V AR4MOV AH, 4CHINT 21HCODE ENDSEND START(3)输入正确的程序,汇编、连接、运行STACKS SEGMENT STACKDW 128 DUP(?)STACKS ENDSDATAS SEGMENTSTRING DB ‘WELCOME!’, 13, 10, ‘$’DATAS ENDSCODES SEGMENTASSUME CS: CODES, DS: DATAS START:MOV AX, DA TASMOV DS, AXLEA DX, STRINGMOV AH, 9INT 21HMOV AH, 4CHINT 21HCODES ENDSEND START 1.算法描述及实验步骤1.(1)生成1.st文件(2)用EDIT查看文件2.修改后正确算法:DATA SEGMENTV AR1 DB 0, 25, 0DH, 30V AR2 DB 12H, 0A4H, 6BHV AR3 DB 'ABCDEF'V AR4 DW 1234H, 5678HV AR5 DW 10H DUP(?)DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATA BEING: MOV AX, DATAMOV DS, AXLEA SI, V AR5MOV BX, OFFSET V AR2MOV byte ptr[SI], 0ABHMOV AL, V AR1+2MOV AX, [SI]MOV [BX], AXMOV AX, V AR4MOV V AR5+4, AXMOV AH, 4CHINT 21HCODE ENDSEND BEING5.调试过程1.程序没有错误,结果:2.程序运行出现错误:问题及改正:(1). 2.asm(2): error A2009: Symbol not defined: ODH 表示没有定义ODH;出错语句VAR1 DB 0, 25, ODH, 300,这里的 ODH应该为 16进制数的0DH。
实验一 利用 DEBUG 调试汇编语言程序段

实验名称实验一利用 DEBUG 调试汇编语言程序段一、实验目的1.熟悉 DEBUG 有关命令的使用方法;2.利用 DEBUG 掌握有关指令的功能;3.利用 DEBUG 运行简单的程序段。
二、实验要求1.仔细阅读有关 DEBUG 命令的内容,对有关命令,要求事先准备好使用的例子;三、实验环境DOS 操作系统四、实验内容1.进入和退出 DEBUG 程序;1)开始—运行点确定进入DOS命令窗口图1进入DOS命令窗口2)在命令窗口中输入 dubug 进入 debug 程序图2进入 debug 程序3)进入 debug 窗口后,输入 q 命令退出 debug图3退出 debug2.学会 DEBUG 中的1)D 命令(显示内存数据 D 段地址:偏移地址)例 1:-D100 ;显示 DS 段, 0100 开始的 128 个字节内容-D ;默认段寄存器为 DS,当前偏移地址(刚进入 debug 程序偏移地址为 0100H)图4默认显示 DS 段内容-D DS:100 ;显示 DS 段, 0100H 开始的 128 个字节内容图5显示 DS 段内容-D CS:200 ;显示 CS 段, 0200H 开始的 128 个字节内容图6显示 CS 段内容-D 200:100 ;显示 DS 段, 0200:0100H 开始的 128 个字节内容图7显示 DS段0200:0100H内容-D 200 ;显示 DS 段, 0200H开始的128个字节内容图8显示 DS段0200H开始的内容-D 100 L 10 ;显示 DS 段, 100H 开始的 100H 个字节内容图9显示 DS段100H开始的100H字节内容2)E 命令(修改指定内存)例 1:-E100 41 42 43 44 48 47 46 45-D 100,L08结果:073F:0100 41 42 43 44 48 47 46 45-e 100 修改内存内容-d 100,L08 查看刚才修改的内存内容图10 修改和查看DS段100H开始的80H字节内容例 2: -E 100073F:0100 41. 42 : 42 是操作员键入此命令是将原 100 号内存内容 41 修改为 42,用 D 命令可察看。
实验一 汇编程序学习与程序调试方法实验

四、实验说明 通过本实验,同学们可以了解仿真软件使用、 通过本实验 , 同学们可以了解仿真软件使用 、 简单程序编写和汇编程 序调试的方法,同时了解单片机存储器结构及读写存储器的方法。 序调试的方法,同时了解单片机存储器结构及读写存储器的方法。 五、实验步骤 启动计算机,打开伟福仿真软件,进入仿真环境。 1、启动计算机,打开伟福仿真软件,进入仿真环境。首先进行仿真器的设 点击主菜单的仿真器选项,选择仿真器设置, 置 , 点击主 菜 单的仿真器选项 , 选择仿真器设置 , 或者直接点击仿真器设 置快捷按钮打开仿真器设置窗口, 置快捷按钮打开仿真器设置窗口 , 在仿真器标签里选择使用伟福软件模拟 器。 2、在编辑窗口输入源程序,保存,文件名为T11-A.ASM, 在编辑窗口输入源程序,保存,文件名为T11- ASM, 11- ASM源程序进行编译 点击项目菜单,选择全部编译。 源程序进行编译。 3 、 对 T11-A.ASM 源程序进行编译 。 点击项目菜单 , 选择全部编译 。 编译无 误后,打开数据窗口,选择外部数据存储器窗口XDATA 拖动XDATA XDATA, XDATA窗口的 误后 , 打开数据窗口 , 选择外部数据存储器窗口 XDATA , 拖动 XDATA 窗口的 滚动条,使地址8000 出现在窗口上,观察8000 起始的256 8000H 8000H 256个字节单元的内 滚动条,使地址8000H出现在窗口上,观察8000H起始的256个字节单元的内 执行程序,点击全速执行快捷按钮,点击暂停按钮, 容 。 执行程序 , 点击全速执行快捷按钮 , 点击暂停按钮 , 观察存储块数据 变化情况,256个字节全部清零 红色) 点击复位按钮,可再次运行程序。 个字节全部清零( 变化情况,256个字节全部清零(红色)。点击复位按钮,可再次运行程序。 打开CPU窗口,选择单步或跟踪执行方式运行程序,观察CPU CPU窗口 CPU窗口各寄存 4、打开CPU窗口,选择单步或跟踪执行方式运行程序,观察CPU窗口各寄存 器的变化,可以看到程序执行的过程,加深对实验的了解。 器的变化,可以看到程序执行的过程,加深对实验的了解。 12.ASM源程序进行 源程序进行2 操作,增加断点调试方法练习, 5、对T12.ASM源程序进行2、3、4操作,增加断点调试方法练习,观察片内 及片外数据窗口的数据变化。 及片外数据窗口的数据变化。
实验二 汇编语言程序的运行与调试一

实验二汇编语言程序的运行与调试一.实验目的:1、掌握汇编语言源程序的书写格式。
2、掌握EDIT、MASM、LINK、DEBUG等软件的使用方法。
3、掌握上机编辑、汇编、连接及运行汇编语言程序。
二&实验环境:微型计算机一台DOS或WINDOWS操作系统,MASM开发套件。
三.实验原理:1、完整的段定义伪操作data segment;定义数据段…data endsextra segment;定义附加段…extra endsstack segment stack;定义堆栈段…stack endscode segment;定义代码段assume cs:code,ds:data,es:extrastart:mov ax,datamov ds,ax;段地址 段寄存器...…;在代码段填入指令序列mov ah,4chint21h;程序终止,返回DOS code endsend start;汇编结束2、汇编语言源程序的汇编过程汇编语言源程序的汇编过程是是利用汇编程序(MASM)对已编辑好的源程序文件(.ASM)进行汇编,将源程序文件中的助记符指令逐条翻译成机器码指令,并完成源程序中的伪指令所指出的各种操作,最后可以建立3个文件:扩展名为.OBJ的目标文件、扩展名为.LST的列表文件和扩展名为.CRF的交叉索引文件。
目标文件(.OBJ)是必须建立的,列表文件(.LST)和交叉索引文件(.CRF)两个文件可有可无,可以通过汇编时的命令加以选择。
3、目标程序的连接过程汇编后产生的目标程序(OBJ文件)并不是可执行程序文件(EXE文件),还不能直接运行,它必须通过连接程序(LINK)连接成一个可执行程序(EXE 文件)后,才能运行。
连接程序给出的“无堆栈段的警告性错误”并不影响程序的运行。
4、为运行汇编语言程序至少要在磁盘上建立以下文件:(1)编辑程序,如EDIT.EXE,编辑汇编源程序(2)汇编程序,如MASM.EXE,生成目标代码文件。
汇编实验报告_wwb

汇编第一次集中实验报告要求:实验一:汇编语言运行环境及方法、简单程序设计1、绘制程序流程图2、结合你的调试过程,整理其中用到的debug命令的使用方法和效果截图,并解释每一步骤的结论Debug中常用到的指令有:用—g命令来运行程序;用—u命令来显示程序;用—d查看数据段情况;用—e或—f命令来修改需要改正的部分;用—t指令来逐步执行程序;用—r指令来查看寄存器和修改器的值;用—q命令用来退出debug程序。
在这些命令的后面加上地址,可以将命令执行到相应的地方。
实验代码:DSEG SEGMENTSTRING1 DB 'move the cursor backward'STRING2 DB 'move The cursor backward'MESS1 DB 'Match!',0DH,0AH,'$'MESS2 DB 'No match!',13,10,'$'DSEG ENDSCSEG SEGMENTMAIN PROC FARASSUME CS:CSEG,DS:DSEG,ES:DSEGSTART:PUSH DSSUB AX,AXPUSH AXMOV AX,DSEGMOV DS,AXMOV ES,AXLEA SI,STRING1LEA DI,STRING2CLDMOV CX,24REPZ CMPSBJZ MATCHLEA DX,MESS2JMP SHORT DISPMATCH:LEA DX,MESS1DISP:MOV AH,9INT 21HRETMAIN ENDPCSEG ENDSEND STAR-g命令运行程序:-用u命令显示程序:将端点设置在程序的主要部分以前。
-g0b:根据其中指示的ds寄存器内容查看数据段的情况如下:-d0可用可用e命令修改数据区的字符串,操作如下:由图可知,已把0020行中backward改为了forward了。
汇编程序及接口技术实验报告

汇编程序及接口技术实验报告
一、实验目的
本实验的主要目的是了解汇编语言程序的编写和调试方法,并掌握接口技术的应用。
二、实验内容
1.编写一个求给定数的阶乘的汇编程序。
2.利用串口实现汇编程序的输入输出。
三、实验步骤
1.阅读8086汇编语言的使用手册,了解汇编语言的基本语法和指令集。
2.编写一个求阶乘的汇编程序。
程序的基本思路是利用循环和累加的方法来实现阶乘的计算。
3.编写串口输入输出的汇编程序。
使用串口的输入输出功能,实现程序与外部设备的交互。
4.将阶乘程序与串口输入输出程序进行整合,测试程序的功能是否正常。
五、实验结果与分析
经过调试和测试,本实验成功实现了求阶乘的功能,并能通过串口与外部设备进行交互。
实验结果与预期一致。
六、实验总结
通过本次实验,我对汇编语言的编写和调试方法有了更深的了解。
同时,我们也学会了如何利用接口技术来实现程序与外部设备的交互。
这对我们以后的学习和工作都将有很大的帮助。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微机原理与接口技术课程作业班级:目录一、实验目的: (3)二、实验环境 (3)三、实验过程 (3)(一)基础知识储备 (3)(二)汇编语言程序设计 (3)(三)汇编程序调试 (3)四、调试实例 (4)(一)实例一 (4)(二)实例二 (5)(三)实例三 (6)(四)实例四 (7)五、实验总结 (8)(一)实验收获 (8)(二)实验感悟 (9)一、实验目的:汇编语言是一种用助记符表示的程序设计语言。
用汇编语言编写的源程序生成的目标代码短,占内存少,执行速度快,适合于系统软件、实时控制软件、I/O 接口驱动等程序设计。
通过本次实验,熟练掌握汇编程序的调试,深入了解MASM 汇编语言及其程序设计方法。
二、实验环境EDIT编辑器、MASM汇编程序、LINK连接程序、TD调试程序三、实验过程(一)基础知识储备1.了解微处理器80486的内部结构、寄存器组、工作模式等基本知识。
2.熟练掌握微处理器指令系统的相关知识,重点掌握80486的寻址方式和常用的指令格式及功能。
3.了解MASM汇编语言及其程序设计方法。
掌握MASM汇编语言的语句格式、语法规则、常用伪指令及DOS功能的调用等。
了解顺序结构、分支结构、循环结构和子程序的设计方法。
(二)汇编语言程序设计1.分析问题,明确要解决的问题和要求。
2.确定解决问题的思路和方法。
3.将解决问题的方案编制成程序流程图。
4.根据流程图,逐条编写程序。
5.上机调试,验证程序是否正确。
(三)汇编程序调试MASM汇编程序的主要功能是:把源文件转换成用二进制代码表示的目标文件,并生成列表文件;在转换过程中汇编程序将对源程序进行扫描,检查源程序是否有语法错误并指出源程序的语法错误。
汇编语言源程序的调试过程需要经过编辑、汇编、连接、运行、调试等几个步骤:1.编辑:使用编辑程序,将编写好的程序输入计算机,建立一个扩展名为ASM的汇编语言源文件*.ASM。
2.汇编:使用汇编程序,将*.ASM文件经汇编后生成扩展名为*.OBJ。
3.连接:使用连接程序,把一个或多个目标程序连接成可执行文件*.EXE。
4.运行:运行可执行文件,验证程序是否正确。
5.调试:如果运行中有问题,可使用编辑或调试程序进行修改和调试,重复上述步骤,直到运行正确为止。
四、调试实例(一)实例一要求:编写程序,将MBUF为起始单元的5个数按相反次序传送到NBUF开始的存储单元中。
实验思路:本例采用顺序结构和循环结构,合理利用堆栈,通过堆栈实现数据按照相反次序传送。
源程序:DATA SEGMENT ;数据段开始MBUF DB 0,1,2,3,4 ;每个数据分配一个存储单元NBUF DB 5 DUP(0) ;空5个存储单元备用DATA ENDS ;数据段结束STACK SEGMENT PARA STACK ;堆栈段开始,定位类型是PARADB 100 DUP(0)STACK ENDSCODE SEGMENT ;代码段开始ASSUME CS:CODE, DS:DATA,SS:STACK ;段分配伪指令START:MOV AX,DATA ;数据传送MOV DS,AX ;存储器数据传送到段寄存器中MOV SI,OFFSET MBUF ;取第一组操作数的偏移地址MOV DI,OFFSET NBUF ;取第二组操作数的偏移地址MOV CX,5 ;数据个数5传送到CX中LOP1:MOV AX,[SI] ;数据传送PUSH AX ;数据入栈INC SI ;指针加1LOOP LOP1 ;循环LOP2:POP AX ;数据出栈MOV [DI],AX ;数据传送INC DILOOP LOP2MOV AH,4CH ;终止进程INT 21HCODE ENDSEND START(二)实例二要求:编写程序,将内存中某数据块中的正数和负数分开,并分别将这些正数和负数送同一数据段的两个缓冲区中,并在屏幕上显示正数和负数的个数。
实验思路:本例中要求将正数和负数分开,因此应先判断数据块中数据的正负,然后将不同符号的数分别传送到两个缓冲区中,同时分别计数。
利用分支结构和循环结构解决问题。
源程序:DATA SEGMENT ;数据段BUF DB 5,2,7,-4,-2,-3,4,9,-6COUNT EQU $-BUF ;等值语句,COUNT等于BUF数据长度ZS DB ?FS DB ?STR1 EQU BUF+20 ;正数首地址STR2 EQU BUF+30 ;负数首地址DATA ENDSSTACK SEGMENT STACK ;堆栈段DB 100 DUP(0)STACK ENDSCODE SEGMENT ;代码段ASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AX ;初始化MOV BX,OFFSET BUF ;取BUF中操作数的偏移地址MOV CX,COUNTMOV ZS,0MOV FS,0MOV SI,OFFSET STR1MOV DI,OFFSET STR2LOP:MOV AL,[BX]CMP AL,0 ;带符号数比较JG LOP1 ;数据大于0时跳转至LOP1JL LOP2 ;数据小于0时跳转至LOP2 LOP1:INC ZS ;正数计数加1MOV [SI],AL ;正数数据存入SI寄存器中INC BXINC SILOOP LOPJMP LASTLOP2:INC FSMOV [DI],AL ;负数数据存入DI中INC BXINC DILOOP LOPLAST:MOV DL,ZSMOV AH,06H ;显示字符INT 21HMOV DL,FSMOV AH,06HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START(三)实例三要求:编写程序,从内存BLOCK开始,存放着10个字节的有符号数,从这些数中找出绝对值最大的那个最大的数,将其存入MAX中。
源程序:DATA SEGMENTBLOCK DB 1,-1,2,-3,4,5,3,-1,2 ;设置数据COUNT EQU $-BLOCK ;置计数值MAX DB ? ;存最大值DATA ENDSSTACK SEGMENT STACKDB 100 DUP(0)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV SI,OFFSET BLOCK ;数据首地址MOV MAX,0MOV CX,COUNT ;CX为计数器AGAIN:MOV AL,[SI] ;将第一个数据存在AL中 CMP AL,0 ;判断正负JS JDZ ;小于0转到JDZ LOP:CMP AL,MAX ;比较数据与最大值JG BIG ;AL大转到BIGJMP LOP1JDZ:NEG AL ;求补,即绝对值JMP LOP1 ;跳转至LOP1BIG:MOV MAX,ALJMP LOP1LOP1:INC SI ;指针加1,指向下一个数 DEC CX ;计数值减1MOV AH,MAX ;最大值存入AHJNZ AGAIN ;跳转至AGAINMOV AH,4CHINT 21HCODE ENDSEND START(四)实例四要求:编写程序,将内存中N个无符号数从大到小排序后输出显示。
源程序:DATA SEGMENTBUF DB 1H,9H,6H,15H,10HCOUNT EQU $-BUFDATA ENDSSTACK SEGMENT STACKDB 100H DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AX ;初始化MOV CX,COUNT ;置计数器DEC CX ;外层循环减1 LOP1:MOV SI,CXMOV DI,1 ;交换标志DI=1MOV BX,OFFSET BUF ;取数组中第一个偏移地址LOP2:MOV AL,[BX] ;第一个数据送到AL中 CMP AL,[BX+1] ;两数进行比较JAE LOP3 ;大于等于转到LOP3 XCHG AL,[BX+1] ;小于交换两数位置,AL存大数MOV [BX],ALMOV DI,0 ;交换标志DI=0LOP3:INC BX ;数据指针指向下一位 LOOP LOP2 ;循环LOP2CMP DI,0 ;交换标志为0继续,交换标志为1结束JNZ OK ;不等于0转到OK,结束MOV CX,SILOOP LOP1 ;等于0循环LOP1OK:MOV CX,COUNTMOV BX,OFFSET BUF ;BX为BUF首地址的偏移地址LOP4:MOV DL,[BX] ;BX中的数放在DL中MOV AH,06H ;输出显示INT 21HINC BX ;指针指向下一字符LOOP LOP4 ;循环LOP4MOV AH,4CH ;结束进程INT 21H ;返回DOSCODE ENDSEND START五、实验总结本次实验,虽然花费时间较长,但通过实验的完成,我的收获也很多。
(一)实验收获无论是知识方面还是能力方面,本次实验都让我得到了很大提升。
知识方面,本次实验需要编写符合要求的程序。
首先要进行程序的设计,明确实验目的和设计思路,画出程序框图,然后进行程序的编写。
通过程序的设计与编写,使我能够更加深入的了解和掌握80486了指令系统。
程序编写完成后,便需要进行调试,最初编写的程序中出现了很多错误,在编译过程中发现错误后,不断进行修正,直到程序正确,可以实现所需功能。
在这一过程中,我逐渐熟悉了汇编程序编辑、编译、连接、调试的过程,并能通过这些软件的功能找到自己的错误加以改正,最终实现实验目的。
能力方面,由于系统原因,不能直接在电脑当前系统中进行汇编程序的调试,因此我安装了虚拟机,在虚拟机安装过程中遇到很多问题,通过对搜索引擎的有效利用,我解决了安装过程中的问题并成功安装了XP系统,建立了实验所需环境,为实验的完成打下基础。
本次实验,提高了我分析问题和解决问题的能力,能够通过查阅资料获得所需信息,解决实验过程中所遇到的各种问题。
(二)实验感悟本次实验对知识和能力的要求都比较高,开始完成实验室,遇到了很多阻碍,但通过资料的查找和优秀视频的参考,我逐渐找到问题的解决办法,最终实现了实现所需的功能,完成了这项任务。
在这一过程中,我更深刻地体会到,任何知识的学习和掌握都是时间和汗水的积累。
只有真正认真思考,坚定完成任务的信念,找到解决问题的办法,才能学会知识和技能。