汇编程序学习与程序调试方法实验
- 格式:ppt
- 大小:44.00 KB
- 文档页数:5
实验一、汇编语言程序的上机过程及调试<i>汇编程序调试过程</i>实验一、汇编语言程序的上机过程及调试<i>汇编程序调试过程</i>一、实验目的熟练掌握汇编语言上机汇编、连接和装入运行。
学会使用调试程序DEBUG或TD来进行程序调试。
<i>汇编程序调试过程</i>二、实验内容(一)汇编程序建立过程a.建立汇编源程序─通过b.编译为目标文件d.连接为可执行文件c.不通过,重新修改(语句错误)f.不正确,用调试工具调试,重新修改(逻辑错误)e运行正确g.完成<i>汇编程序调试过程</i>汇编语言的源程序需要编译和连接后才能在计算机上执行。
汇编语言源程序扩展名规定为.ASM。
用MASM编译源程序后,将产生源程序的目标程序文件,其扩展名为.OBJ。
再经过连接程序(LINK)把目标程序文件与库文件或其他目标文件连接在一起形成可执行文件(扩展名为.EXE)。
这时就可以运行该程序了。
DOS下可直接键入可执行程序的文件名从而运行该程序。
<i>汇编程序调试过程</i>(二)过程详细说明步骤a: 建立汇编源程序如果现在的根目录不是E盘,写入E :然后回车,再打入cd *** (***是你新建的文件夹名),例如电气031班的同学,现在你的DOS界面根目录为:E\dq031 。
打入edit然后回车,EDIT的操作画面便会出现在屏幕上,alt键可以控制工具栏操作,←↑→↓箭头控制阴影选择的上下移动。
我们现在按alt键,选中flie, 按↓选中open,回车,找到刚刚拷贝的asm 文件,回车。
选择存盘并给你输入的文件起一个文件名,形式:*** . asm ;然后回到dos环境。
<i>汇编程序调试过程</i>步骤b: 编译目标文件在DOS提示符下键入MASM *** .asm回车,(其中***为你刚才在*****RE a 中建立的文件名)这时汇编程序的输出文件可以有三个(分别:.obj .lst .crf),便会出现三次提问,在这可以一路回车即可。
实验一汇编语言环境一、实验目的1.熟悉汇编语言的上机环境,学习EDIT,MASM,LINK程序的使用,掌握建立、汇编、链接、运行汇编语言程序的过程。
2.熟悉DEBUG有关命令的使用方法。
二、实验原理建立、汇编、链接、运行汇编语言程序的过程方法。
三、主要仪器及耗材计算机、MASM软件包。
四、实验内容与步骤内容:1.输入、编辑汇编语言程序。
2.对汇编语言程序进行汇编、连接和运行。
步骤:1.在DOS提示符下,进入MASM目录。
2. 在MASM目录下启动EDIT编辑程序,输入源程序,并对其进行汇编、连接和运行。
1) 调用edit输入、编辑源程序并保存在指定的目录中;例:edit no1.asm,进入编辑窗口code segmentassume cs:codestart:mov ah,08hint 21hmov ah,4chint 21hcode endsend start编辑完后,何在退出edit窗口2) 用汇编程序masm对源程序汇编产生目标文件obj。
例:masm no1不断修改错误,直至汇编通过为止,产生no1.obj。
3) 用连接程序link产生执行文件exe.例:link no14) 执行程序:可直接从DOS执行程序,即在DOS环境中,输入文件名no1即可。
再次熟悉汇编连接,运行过程。
1.在DOS提示符下,进入MASM目录。
2. 在MASM目录下启动EDIT编辑程序,输入源程序,并对其进行汇编、连接和运行。
1) 调用edit输入、编辑源程序并保存在指定的目录中;例:edit no2.asm,进入编辑窗口DATAS SEGMENTbuf db 'I am a student!$' ;此处输入数据段代码DATAS ENDSSTACKS SEGMENTdb 200 dup(0);此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXlea dx,bufmov ah,9int 21h;此处输入代码段代码MOV AH,4CHINT 21HCODES ENDSEND START编辑完后,何在退出edit窗口2) 用汇编程序masm对源程序汇编产生目标文件obj。
微机原理与应用实验一、仿真软件使用与汇编程序调试方法学习实验重点:读懂程序、调试程序、数据分析并规范记录实验难点:编写简单程序仿真软件使用与汇编程序调试方法学习实验内容理解实验仪器设备熟悉(电脑操作)仿真软件使用(编辑/编译/调试)数据分析并记录编写实验报告1 )从3500H内存单元开始建立0-15共16个数据. (将以上存贮块清0,或者®定值,程序如何设计?)2 )将内存3500H 单元开始的0-15共16个数传递到3600H 单元 开始的数据区中.2、实验目的熟悉CmasmW. Code View 、emu$086. LCA88ET 软件 使用方法;熟悉简单程序编写的方法及上机调试的方法.实脸内容理解仿真软件使用与汇编程序调试方法学习1、实验内容(红弱色字部分要求同学们自主完成)4.实验步骤检查实验设置外接电源,开启PC 机.进入软件集成操作环境主界面,按NEW 建立新PC 机.einu8086仿真软件.a.b.文件,即可开始输入源程序.C.输入程序后,按CtTi+S保存程序(规定扩展名为*, asm源程序文件).实检设备仿真软件使用d. 对原程序进行汇编与链接,通过观察输出 窗口的信息,确定对汇编程序的修改.有错误, 进行修改,随即汇编与链接,直到无错误为止, 形成•. CXC 可执行的文件。
e. 在调试界面中采用不同方式调试程序(采用 单步、连续等运行方式,调试程序),通过**aux-memory"功能,观察各类数据变化,查 看3500H-350FH 单元中的内容是否为00-OF 共 16个数,以及程序执行情况.数*分析并记录>5、程序设计1)工作原理块移动是单片机常用操作之一,多用于大量 的数据复制和图象操作.本程序是给出起始地址, 用地址加一方法:^^动块,将指定源地址和长度的 存储块移到指定目标地址为起始地址的单元中去, 移动3500H 到3600H 偏移地址起16字节.仿真软件使用与汇编程序调试方法学习仿真软件使用与汇编程序调试方法学习-CODE SEGMENT' ASSUME CS: CODEMOV SI, 3500H ;建立源地址指针 MOV DI. 3600H ;建立目标地址指针 MOV CX, OOlOH ;字数送入CX 寄存器中 MOVAL, [SI];取源数据一字送入AX 中 MOV [DI], AL ;将源数据送入目标地址单元中 INC SI;修正指针 INC DIDEC CX ;判靳是否传送完毕 JNZ Al JMP A2数*分析并记录4 2)参考程序CODE SEGMENT ASSUME CS : CODE MOV SI,3500H MOV CX,OOlOH MOV AL,00 MOV INC INC DEC JNZ JMPSTART : Al:[SI], AL SI ALCX A1 A2A2: CODE ENDSEND START建立源地址指针 字节数送入CX 寄存器中 写入一字节 修正指针;判断是否传送完毕“LOOP Al^^ 数*分析并记录START : Al : A2: CODE ENDSEND STARTMOV CX, OOlOH ;字数送入CX 寄存器中 MOV AL. [SI];取源数据一字送入AX 中MOV [DI], AL ;将源数据送入目标地址单元中 INC SI;修正扌旨针INC DIDEC CX ;判斷是否传送完毕 JNZ AOJMP A2以下求和程序供同学们练习软件操作DATA SEGMENT ; 两数相加 X DV 1234H Y DW 2 345H Z DW ?DATA ENDS CODE SEGMENTASSUME DS: DATA, CS: CODESTART: MOV AX, DATAMOV DS, AX LEA SbX LEA DI, Y MOV AX, [SI] ADD AX, [DI] MOV Z, AX MOV AH. 4CH INT 21HCODE ENDSEND STARTCODE SEGMENT ASSUME CS: CODESTART: MOV SI, 3500H ;建立源地址扌旨针MOV CX, OOlOH ;字节数送入CX 奇存器中MOV AL. 00 ;MOV [SI], AL ;写入一字节INC INC DEC JNZ MOV MOVAl:SI AL CX A1;修正指针 内容2)操作方法之一««操作方法之二;判晰是否传送完毕“LOOP Al” SI, 3500H ;建立源地址扌旨针 DI, 3600H ;建立目标地址指针 数据分析并记录AO:A2:CODE ENDS数据(部分)建立执行情况表单步*行r 数据建 --第1次 循环第2次 循环 第3次 循环 第4次 循环 第5次 循环 第6次 循环 ♦ • •ST. 3500(1 SI-MOV ex. OOlOH cx=MOV AU OOHAL=BACK* MOV [SIL AL[SI]= [SI]= [SI> [SIX[SIX [SI]=INCSI SI- S 【H SA s 【・SI® SI®INC AL AL= AL= AL= AL= AL= AL=DEC exCX=CX=CX=cx=CX=CX=JNZ BACKSTOP* J IIP STOP编写实检报告6、实验报告要求(见附录)1) 实验报告要求有实验目的、要求、设备或仪 器、程序设计、步骤、数据分析.数据分析填 在报告本的原始数据栏・2) 画出实验内容1)2)程序设计流程图、写出程 序清单并有简要注释.3)写出实验过程中所遇到的问题与解决的办法.分析并记录仿真软件使用与汇编程序调试方法学习附录 实验抿吿写作格式及基木S 求・编写实脸报告编坊实脸报告歸1作格式基本9求名称亭认書验的名称•如2实鲨1仿真软件便用与汇编程序调试SsS 习2.实验目的 本次实检的主要目的.鑫考每次的实验教材3.实验环境 实验用到的硬件(仪》与设备).软件 <程序调试软件)环 境4.实鲨内容与步《 实现实验目的而进行的实验内容•如果有步鼻要求则简要列 出步》 5•实验总结1) 简述本次实验的基本R 理2) 血出碘件电路应理图(包括实际连线说明)和程序滅程图3) 參照本次实验的主程序.重新设计主程序并给出详尽注释 4〉对本次实验的结果.比如,现象■者ft 据或者应用等进行 分析•并作出規范性的记录5)本次实验得到了什么?收获是什么?有些什么想法?6.建议与意见对于本次实验内容或在实验过程中有任何间《或建议•以及 对于改菁实验效果有什么建议.均可提出・在书写实验报吿 的过程中.主要是帝助自已回顾和总绪实验.重点放在第5項. 前4项可以十分简要地列写・第6项有则提出•无则不写・,如2实蛍1仿真软件便用与汇編程序Z.实验目的 3.实验环境 本次实验的主要目的,參考每次的实验教材4.实检内容与步 5•实验总结6.建议与意见实验用到的咚件(仪器与设备)、软件(程序调试软件〉 环境 _____________________________________________________ 实现实验目的而进行的实鲨内容.如果有步鼻要求则简 要列出步骤 _________________________________________________1) 简述本次实验的基本原理 2) iffi 出程序流程图3) 参照本次实验的主程序.a 新设计主程序并给出详尽 注释 4) 对本次实验的结果• fctin :现鮫、者数据或*应用等 进行分析・并作出规范性的记录5〉本次实验得到了什么?收获是什么?有些什么想法? 对于本次实验内容或在实捡过程中有任何问题或建0U 以及对于改善实验效果有什么ft 议.均可提出.在书写 实验报吿的过程中,主5悬《助自已回顾和总结实验・ 重点放在第5项・前4项可以十分W 要地列写・第6项有则 提出.无则不写・实验报告写作格式及基本要求习附录实验报告写作格式及基本要求。
软件实验一汇编语言程序的调试与运行一.实验目的1.学习数据传送和算术运算指令的用法2.熟悉在PC机上编辑、汇编、连接、调试和运行汇编语言程序的过程。
二.实验内容将两个多位十进制数相加,要求被加数和加数均以ASCII码形式各自顺序存放在DATA1和DA TA2为首的5个内存单元中,结果送回DATA1处。
三.程序框图图1.1两个多位十进制相加程序流程图四.程序清单DISP MACRO XMOV DL,X;要显示的字符送DL寄存器MOV AH,02H;DOS功能调用号是02HINT21H;21H中断程序是DOS功能调用ENDMDATA SEGMENTDATA1DB'12732'DATA2DB'06815'N EQU$-DA TA2DATA ENDSSTACK SEGMENT STACKSTA DB20DUP(?)TOP EQU$-STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA,SS:STACK,ES:DA TA START:MOV AX,DA TAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXLEA SI,DA TA1;☆MOV BX,0MOV CX,NCALL DISPL;显示被加数DISP'+'LEA SI,DA TA2MOV BX,0MOV CX,NCALL DISPL;显示加数DISP'='LEA DI,DA TA1MOV CX,NCALL ADDA;调用加法子程序LEA SI,DA TA1MOV BX,0MOV CX,NCALL DISPL;显示运算结果DISP0DHDISP0AHMOV AX,4C00HINT21HDISPL PROC;显示子程序DS1:MOV AH,02HMOV DL,[SI+BX]INT21HINC BXLOOP DS1CALL DISPL;显示被加数DISP'+'LEA SI,DA TA2MOV BX,0MOV CX,NCALL DISPL;显示加数DISP'='LEA DI,DA TA1MOV CX,NCALL ADDA;调用加法子程序LEA SI,DA TA1MOV BX,0MOV CX,NCALL DISPL;显示运算结果DISP0DHDISP0AHMOV AX,4C00HINT21HDISPL PROC;显示子程序DS1:MOV AH,02HMOV DL,[SI+BX]INT21HINC BXLOOP DS1RETDISPL ENDPADDA PROC;加法子程序PUSH CXMOV BX,0AD1:SUB BYTE PTR[SI+BX],30HSUB BYTE PTR[DI+BX],30HINC BXLOOP AD1POP CXPUSH CXMOV BX,N-1;☆☆CLCAD2:MOV AL,[SI+BX]ADC AL,[DI+BX]AAAMOV[DI+BX],ALDEC BXLOOP AD2POP CXPUSH CXMOV BX,0;☆☆☆AD3:ADD BYTE PTR[DI+BX],30HINC BXLOOP AD3POP CXRET;☆☆☆☆ADDA ENDPCODE ENDSEND START2.简单叙述上机步骤,调试方法。
实验二汇编语言程序的运行与调试一.实验目的: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,生成目标代码文件。
实验一汇编语言程序的调试与运行一、实验目的1.熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。
2.掌握数据在内存中的存放方式和内存操作数的寻址方式。
3.掌握汇编语言源程序的组成格式。
4.掌握8086/8088指令及伪指令的格式及用法。
5.掌握汇编语言源程序的编辑、调试及运行方法。
二、实验准备知识1.DEBUG程序的启动DEBUG是专门为汇编语言设计的一种汇编语言调试工具,它通过单步执行,设置断点连续执行等方式为汇编语言程序员提供了非常有效的调试手段。
在DOS提示符下,可输入命令:C>DEBUG [d:][path][文件名][ 参数1][参数2]其中文件名是被调试文件的名称,它必须是执行文件(.EXE),两个参数是运行被调试文件时所需要的命令参数,在DEBUG程序调入后,出现提示符“–”,此时,可键入所需的DEBUG命令。
在启动DEBUG时,如果输入了文件名,则DEBUG程序把指定文件装入内存。
用户可以通过DEBUG的命令对指定文件进行修改,显示和执行。
如果没有文件名,则是以当前内存的内容进行工作。
2.DEBUG的主要命令1)汇编命令A格式:– A [起始地址]功能:该命令从指定地址开始允许输入汇编语句,把它们汇编成机器代码相继存放在从指定地址开始的存储器中。
2)反汇编命令U(1)格式1:– U [起始地址]功能:该命令从指定地址开始,反汇编32个字节,若地址省略,则从上一个U命令的最后一条指令的下一个单元开始显示32个字节。
(2)格式2:– U [起始地址终止地址]格式3:– U [起始地址 L 字节数]功能:该命令对指定范围的内存单元进行反汇编。
例如:3)运行命令G格式:– G [= 起始地址1][断定点地址2[断点地址3……]]功能:从指定地址开始执行程序。
在设定的断点处程序暂停,并显示全部寄存器内容和下一条要执行的指令。
一般设置断点前最好用U命令查看一下指令开始的地址。
断点数最多为10个。
实验一__汇编语言程序的编辑与调试实验一汇编语言程序的编辑与调试【实验目的】练习源程序的编辑、编译、链接和调试。
了解汇编语言的语法规则。
【实验1.1】阅读附录一的内容,根据附录一【例1.1】的步骤,将例程输入并完成编译、链接等工作;按照【例1.1】后面的提示,启动TD并进行各项动态调试,逐步熟悉TD的用法;在实验报告上为源程序增加注释。
【例1.1】显示5行HELLO。
; FILENAMEzHELLO . ASMDATA SEGMENTMESG DB ‘HELLO’DB 0 , 0 , 0 ; ①DATA ENDSCODE SEGMENT USE16ASSUME CS: CODE , DS: DATABEG: MOV AX , DATAMOV DS , AXMOV ES , AX ; ②MOV CX , 5LL1: MOV M ESG+5 , 0DH ; ③MOV MESG+6 , 0AH ; ④MOV MESG+7 , '$' ; ⑤CALL DISPMOV MESG+5 , 0 ; ⑥MOV MESG+6 , 0 ; ⑦MOV MESG+7 , 0 ; ⑧LOOP LL1MOV AH , 4CHINT 21HDISP PROCMOV AH , 9MOV DX , OFFSET MESGINT 21HRETDISP ENDPCODE ENDSEND BEG以上是待调试程序的源文件,该程序执行后,在屏幕上显示5行‘HELLO'。
下面以此为例来介绍调试过程。
1. 调试前的准备工作调用TASM和TLINK生成有调试信息的EXE文件,即C:>TASM HELLO / zi 生成HELLO . OBJC:>TLINK HELLO / v / 3 生成HELLO . EXE2. 启动TD键入:C:>TD HELLO成功启动TD之后,TD进入MODULE显示模式,屏幕上显示HELLO-ASM源程序,一个三角形符号指示出了标号为BEG的那条指令是启动指令。
微机原理与接口技术课程作业班级:目录一、实验目的:汇编语言是一种用助记符表示的程序设计语言.用汇编语言编写的源程序生成的目标代码短,占内存少,执行速度快,适合于系统软件、实时限制软件、I/O接口驱动等程序设计.通过本次实验,熟练掌握汇编程序的调试,深入了解MASM:编语言及其程序设计方法.、实验环境EDIT编辑器、MASM:编程序、LINK连接程序、TD调试程序三、实验过程〔一〕根底知识储藏1.了解微处理器80486的内部结构、存放器组、工作模式等根本知识.2,熟练掌握微处理器指令系统的相关知识,重点掌握80486的寻址方式和常用的指令格式及功能.3, 了解MASME编语言及其程序设计方法.掌握MASMC编语言的语句格式、语法规那么、常用伪指令及DOS*能的调用等.了解顺序结构、分支结构、循环结构和子程序的设计方法.〔二〕汇编语言程序设计1.分析问题,明确要解决的问题和要求2,确定解决问题的思路和方法.3 .将解决问题的方案编制成程序流程图.4 .根据流程图,逐条编写程序.5 .上机调试,验证程序是否正确.(三)汇编程序调试MASM:编程序的主要功能是:把源文件转换成用二进制代码表示的目标文件,并生成列表文件;在转换过程中汇编程序将对源程序进行扫描,检查源程序是否有语法错误并指出源程序的语法错误.汇编语言源程序的调试过程需要经过编辑、汇编、连接、运行、调试等几个步骤:1 .编辑:使用编辑程序,将编写好的程序输入计算机,建立一个扩展名为ASM的汇编语言源文件*.ASM.2 .汇编:使用汇编程序,将*.ASM文件经汇编后生成扩展名为*.OBJ.3 .连接:使用连接程序,把一个或多个目标程序连接成可执行文件*.EXE.4 .运行:运行可执行文件,验证程序是否正确.5 .调试:如果运行中有问题,可使用编辑或调试程序进行修改和调试,重复上述步骤, 直到运行正确为止.四、调试实例(一)实例一要求:编写程序,将MBUF;起始单元的5个数按相反次序传送到NBUFF始的存储单元中. 实验思路:本例采用顺序结构和循环结构,合理利用堆栈,通过堆栈实现数据根据相反次序传送.源程序:DATA SEGMENT ; 数据段开始MBUF DB 0,1,2,3,4 ; 每个数据分配一个存储单元NBUF DB 5 DUP(0) ; 空5个存储单元备用DATA ENDS ; 数据段结束STACK SEGMENT PARA STACK ; 堆栈段开始,定位类型是PARA DB 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时跳转至LOP2LOP1: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(三)实例三要求:编写程序,从内存BLOCKF始,存放着10个字节的有符号数,从这些数中找出绝对值最大的那个最大的数,将其存入MA)#.源程序: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 BLOCKMOV MAX,0MOV CX,COUNTAGAIN:MOV AL,[SI] ;CMP AL,0 ;JS JDZ ; LOP:CMP AL,MAXJG BIG ;AL JMP LOP1JDZ:NEG AL ;JMP LOP1 ; BIG:MOV MAX,ALJMP LOP1LOP1:INC SI ;DEC CX ;MOV AH,MAX ;JNZ AGAIN ;MOV AH,4CHINT 21HCODE ENDSEND START〔四〕实例四数据首地址为计数器将第一个数据存在AL中判断正负小于0转至ij JDZ比拟数据与最大值大转到BIG求补,即绝对值跳转至LOP1指针加1,指向下一个数计数值减1最大值存入AH跳转至AGAIN要求:编写程序,将内存中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 ; LOP1:MOV SI,CXMOV DI,1 ;MOV BX,OFFSET BUFLOP2:MOV AL,[BX] ;CMP AL,[BX+1] ;JAE LOP3 ;XCHG AL,[BX+1] ;MOV [BX],ALMOV DI,0 ; LOP3:INC BX ;LOOP LOP2 ;CMP DI,0 ;束JNZ OK ;MOV CX,SILOOP LOP1 ;OK:MOV CX,COUNTMOV BX,OFFSET BUF;B XLOP4:MOV DL,[BX] ;BXMOV AH,06H ;INT 21HINC BX ;LOOP LOP4 ;MOV AH,4CH ;INT 21H ;CODE ENDSEND START置计数器外层循环减1交换标志DI=1取数组中第一个偏移地址第一个数据送到AL中两数进行比拟大于等于转到LOP3小于交换两数位置,AL存大数交换标志DI=0数据指针指向下一位循环LOP2交换标志为0继续,交换标志为1结不等于0转到OK结束等于0循环LOP1为BUF首地址的偏移地址中的数放在DL中输出显示指针指向下一字符循环LOP4结束进程返回DOS五、实验总结本次实验,虽然花费时间较长,但通过实验的完成,我的收获也很多.〔一〕实验收获无论是知识方面还是水平方面,本次实验都让我得到了很大提升.知识方面,本次实验需要编写符合要求的程序.首先要进行程序的设计,明确实验目的和设计思路,画出程序框图,然后进行程序的编写.通过程序的设计与编写,使我能够更加深入的了解和掌握80486 了指令系统.程序编写完成后,便需要进行调试,最初编写的程序中出现了很多错误,在编译过程中发现错误后,不断进行修正,直到程序正确, 可以实现所需功能.在这一过程中,我逐渐熟悉了汇编程序编辑、编译、连接、调试的过程,并能通过这些软件的功能找到自己的错误加以改正,最终实现实验目的.水平方面,由于系统原因,不能直接在电脑当前系统中进行汇编程序的调试,因此我安装了虚拟机,在虚拟机安装过程中遇到很多问题,通过对搜索引擎的有效利用,我解决了安装过程中的问题并成功安装了XP系统,建立了实验所需环境,为实验的完成打下基础.本次实验,提升了我分析问题和解决问题的水平, 能够通过查阅资料获得所需信息, 解决实验过程中所遇到的各种问题.〔二〕实验感悟本次实验对知识和水平的要求都比拟高,开始完成实验室,遇到了很多阻碍,但通过资料的查找和优秀视频的参考,我逐渐找到问题的解决方法,最终实现了实现所需的功能, 完成了这项任务.在这一过程中,我更深刻地体会到,任何知识的学习和掌握都是时间和汗水的积累.只有真正认真思考,坚决完成任务的信念,找到解决问题的方法,才能学会知识和技能.。