欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    南昌大学汇编语言实验报告.pdf

    • 资源ID:75950454       资源大小:3.02MB        全文页数:43页
    • 资源格式: PDF        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    南昌大学汇编语言实验报告.pdf

    .实 验 报 告 实验课程:IBM-PC 汇编语言程序设计 学生姓名:刘昌盛 学 号:7101310013 专业班级:电气信息类 III 101 班 2011 年 12 月 15 日.汇编语言实验指导 前 言 汇编语言是计算机专业的一门重要的专业基础课,主要介绍汇编语言程序设计的基本原理和方法。汇编语言是一门理论性和实践性较强的课程,辅助课堂教学的实验有助于帮助学生理解汇编语言的基本原理,锻炼学生的动手能力,提高学生的综合应用知识的能力。本实验指导按照汇编语言程序设计的教学大纲要求编写。依据循序渐进、由浅入深的规律,通过实例复习巩固所学知识,借助实例开展汇编语言程序设计。通过这种既具有构造性又具有创造性的学习活动,更便于初学者的理解和掌握,通过上机实验,并在实验后完成实验报告,又能进一步加深和拓宽所学知识。为了帮助老师和学生开展实验,我们特编了这本实验指导,希望能对我校的汇编语言教学工作有所帮助。本实验指导所有实例均在 PC 机上调试通过。.目录 (1)利用 DEBUG 调试汇编语言程序段(2)初级程序的编写与调试实验(一)(3)初级程序的编写与调试实验(二)(4)汇编语言程序上机过程(5)分支程序实验(6)循环程序实验(7)子程序实验 .实验 1 利用 DEBUG 调试汇编语言程序段 一实验目的 1熟悉 DEBUG 有关命令的使用方法;2利用 DEBUG 掌握有关指令的功能;3利用 DEBUG 运行简单的程序段。二实验内容 1进入和退出 DEBUG 程序;1)开始运行,输入 cmd,点确定进入命令窗口 2)在命令窗口中输入 dubug 进入 debug 程序 .3)进入 debug 窗口后,输入 q 命令退出 debug 2学会 DEBUG 中的 1)D 命令(显示内存数据 D 段地址:偏移地址)例 1:-D100 ;显示 DS 段,0100 开始的 128 个字节内容 说明:指定要显示其内容的内存区域的起始和结束地址,或起始地址和长度。D SEGREG起始地址 L 长度 ;显示SEGREG段中(缺省内默认为DS),以起始地址(缺省内为当前的偏移地址),开始的L 长度(缺省内默认为 128)个字节的内容.D SEGREG段地址:偏移地址 ;显示SEGREG段中(缺省内默认为DS),段地址:偏移地址 开始的L 长度(缺省内默认为128)个字节内容 D ;默认段寄存器为 DS,当前偏移地址(刚进入 debug 程序偏移地址为 0100H).D DS:100 ;显示 DS 段,0100H 开始的 128 个字节内容 D CS:200;显示 CS 段,0200H 开始的 128 个字节内容 D 200:100;显示 DS 段,0200:0100H 开始的 128 个字节内容 D 200;显示 DS 段,0200H 开始的 128 个字节内容 D 100 L 10;显示 DS 段,100H 开始的 100H 个字节内容 2)E 命令(修改指定内存)例 1:-E100 41 42 43 44 48 47 46 45 -D 100,L08 结果:08F1:0100 41 42 43 44 48 47 46 45 例 2:-E 100:08F1:0100 76 42:42 是操作员键入 此命令是将原 100 号内存内容 76 修改为 42,用 D 命令可察看。E 地址 ;从指定地址开始,修改(或连续修改)存储单元内容。DEBUG 首先显示指定单元内容,.如要修改,可输入新数据;空格键显示下一个单元内容并可修改,减号键显示上一个单元内容并可修改;如不修改,可直接按空格键或减号键;回车键结束命令。E 地址 数据表;从指定的地址开始用数据表给定的数据修改存储单元。E DS:100 F3 AB 8D;把 DS 段中 0100H 开始的四个字节修改为 F3 AB(A 和 B 的 ASCII 码)8D 也可以按下面的方式实现 3)R 命令(显示当前寄存器的内容)显示修改寄存器命令 R R;显示所有寄存器和标志位状态;显示当前 CS:IP 指向的指令。显示标志时使用的符号:标志 标志=1 标志=0 OF OV NV DF DN UP IF EI DI SF NG PL ZF ZR NZ AF AC NA PF PE PO CF CY NC 4)T 命令(设置陷井,单步执行)T;从当前 IP 开始执行一条指令。.T 数值;从当前 IP 开始执行多条指令,数值:执行的指令条数。T=地址;从给定的地址执行一条指令 T=地址 数值;从给定的地址执行多条指令,数值:执行的指令条数.T;从当前 IP 开始执行一条指令 T5;从当前 IP 开始执行 5 条指令 T=100 5;从当前 0100H 开始执行 5 条指令 5)A 命令(将指令直接汇编成机器码输入到内存中。)汇编命令 A A 地址;从指定的地址开始输入符号指令;如省略地址,则接着上一个 A 命令的最后一个单元开始;若第一次使用 A 命令省略地址,则从当前 CS:IP 开始(通常是 CS:100)。注释:在 DEBUG 下编写简单程序即使用 A 命令。每条指令后要按回车。不输入指令按回车,或按 Ctrl+C 结束汇编。支持所有 8086 符号硬指令,伪指令只支持 DB、DW,不支持各类符号名。使用 A 命令在 0100H 开始输入指令 mov ax,10 inc cx mov bl,al 单步执行上述指令 6)G 命令等的使用(执行 A 命中输入的汇编指令)运行程序命令 G G;从 CS:IP 指向的指令开始执行程序,直到程序结束或遇到 INT 3。G=地址;从指定地址开始执行程序,直到程序结束或遇到 INT 3。G 断点 1,断点 2,断点 10;从 CS:IP 指向的指令开始执行程序,直到遇到断点。G=地址 断点 1,断点 2,断点 10 G;从 CS:IP 指向的指令开始执行程序。G=100;从指定地址开始执行程序。G=100 105 110 120 使用 A 命令在 0100H 开始输入指令 mov ax,10 inc cx mov bl,al int 3 然后使用 g 命令执行.上面的例子设断点在 100H 处然后用 T 命令单步执行 3.用 DEBUG,验证乘法、除法、加法、减法、带进位加、带借位减、堆栈操作指令、串操作指令的功能。三实验要求 仔细阅读有关 DEBUG 命令的内容,对有关命令,要求事先准备好使用的例子;四实验环境 PC 微机 DOS 操作系统或 Windows 操作系统 MASM.EXE,LINK.EXE,DEBUG.COM 或宏汇编集成环境 五实验步骤 用 DEBUG 验证乘法、除法、加法、减法带进位加、带借位减、堆栈操作指令、串操作指令的功能:1.验证加法和带进位加,使用 A 命令,在 DEBUG 中键入以下代码:mov ax,f111 mov bx,f222 mov cx,2 mov dx,3 add ax,bx adc cx,dx 使用 G 命令查看结果.2.验证减法和带借位减法,使用 A 命令,在 DEBUG 中键入以下代码:mov ax,2 mov bx,3 mov cx,5 mov dx,2 sub ax,bx sbb cx,dx 使用 G 命令查看结果 3.验证乘法和除法,使用 A 命令,在 DEBUG 中键入以下代码:乘法:mov al,b4 mov bl,11 mul bl 使用 G 命令查看结果 除法:mov ax,400 mov bl,b4 div bl 使用 G 命令查看结果 4.验证堆栈操作指令,使用 A 命令,在 DEBUG 中键入以下代码:mov ax,1111.push ax mov ax,2222 使用 G 命令查看结果后在使用 A 命令,在 DEBUG 中键入以下代码:pop ax 使用 G 命令查看结果 5.验证串操作指令,使用 A 命令,在 DEBUG 中键入以下代码:org 1000 db hello mov si,1000 mov di,1500 mov cx,5 cld rep movsb 使用 G 命令查看结果 六实验报告要求 1如何启动和退出 DEBUG 程序;2整理每个 DEBUG 命令使用的方法,实际示例及执行结果。七思考题 启动 DEBUG 后,要装入某一个.EXE 文件,应通过什么方法实现?答:进入 DOS,输入 DEBUG xxx.exe,其中 xxx 为文件名。.实验 2 初级程序的编写与调试实验(一)一实验目的 1进一步熟悉DEBUG命令;2掌握数据在内存中的存放方式和内存操作数的几种寻址方式,段寄存器和物理地址计算;3熟悉数据传送指令、算术运算指令、逻辑指令、数据串传送程序和数据串传送指令MOVS、STOS及重复前辍REP;4掌握简单的汇编语言程序编写与调试。二实验内容 1内存操作数及各种寻址方式使用;2求累加和程序;3多字节加法程序;4数据串搬家程序;5段寄存器概念及字符串传送指令练习。三实验要求 1仔细阅读有关 DEBUG 命令的内容,对有关命令,要求事先准备好使用的例子;2阅读数据传送指令、算术运算指令、逻辑指令、数据串传送程序和数据串传送指令 MOVS、STOS及重复前辍 REP 的内容;3用 DEBUG 的有关命令调试本实验中的求累加和程序、多字节加法程序、数据串搬家程序段。四实验环境 PC 微机;DOS 操作系统或 Windows 操作系统;MASM.EXE,LINK.EXE,DEBUG.COM 或宏汇编集成环境。五实验步骤 1内存操作数及各种寻址方式使用 MOV AX,1234 MOV 1000,AX MOV BX,1002 MOV BYTE PTRBX,20 MOV DL,39 INC BX MOV BX,DL DEC DL MOV SI,3 MOV BX+SI,DL.MOV BX+SI+1,DL MOV WORD PTRBX+SI+2,2846 步骤:(1)用A命令键入上述程序,并用T命令逐条运行。(2)每运行一条有关内存操作数的指令,要用D命令检查并记录有关内存单元的内容并注明是什么寻址方式。注意D命令显示结果中右边的ASCII字符及双字节数存放法。.2求累加和程序:程序:MOV BX,1000 MOV CX,10 SUB AX,AX LOP:ADD AL,BX ADC AH,0.INC BX J:LOOP LOP INT3 步骤:(1)用A命令将程序键入到100H开始的内存中,在键入时记下标号LOP和J的实际地址,在键入LOOP指令时LOP用实际地址值代替;(2)用命令N AA 将此程序命名为文件AA(文件名可任取);(3)用R命令将BX:CX改为程序长度值(即最后一条指令后面的地址减去开始地址;(4)用命令W 100将此程序存到AA命名的磁盘文件中;(5)用命令Q退出DEBUG;(6)用命令DEBUG AA再次调入DEBUG和文件AA,可用U命令检查调入程序;若调入DEBUG时忘了加AA文件名,可用N命令和L命令将文件调入;(7)用E命令在内存地址1000H处键入16个数字;(8)用命令G=100 J(J用实际地址代替),使程序运行并停在断点J上,检查AX,BX的值是否符合你的预计值;(9)用T命令运行一步,观察程序方向(IP值)和CX值是否与你的估计一样,若不一样,检查程序是否有错;(10)重复G、J与T,再检查AX是否正确;(11)用G命令使程序运行到结束,检查AX值是否正确。.3多字节加法程序 程序:MOV DI,1000 MOV CX,8 MOV SI,2000 CLC LOP:MOV AL,SI ADC DI,AL INC SI INC DI LOOP LOP INT 20 步骤:(1)用命令键入此程序(2)用E命令在1000H开始处键入一个8字节被加数,在2000H开始处键入一个8字节加数,均为低字节在前面。分步计算并得到结果,如下图所示:.4数据串搬家程序(1)用A命令键入下列程序:MOV SI,1000 MOV DI,2000 MOV CX,0F LOP:MOV AL,SI MOV DI,AL INC SI INC DI LOOP LOP INT 20(2)用A命令DB伪指令在1000H键入下列字符串:IBM_PC COMPUTER(3)用G命令运行此程序,并用D命令检查目的地址处的字符与源串a是否一致。.5段寄存器概念及字符串传送指令练习(1)用A命令键入下列程序:MOV SI,0 MOV DI,0 MOV AX,1000 MOV DS,AX MOV AX,1500 MOV ES,AX MOV CX,0F CLD REP MOVSB INT 20(2)用A命令DB伪指令在1000:0000处键入字符串IBM_PC COMPUTER,并用D命检查之(3)用D命令检查0F00:1000处内容,看是否一样。为什么?(4)用G命令运行此程序,检查目的地址1500:0000处内容。并记下DS与ES值。(5)修改此程序,使ES与DS为同一值,以减少一条指令,而源物理地址和目的物理地址(是多少?)仍和原来一样。.6自编程序 用16位减法指令编一个32位(4字节)数减法程序,两个源数及结果存放地址同多字节加法程序,调试并.做记录。六实验报告要求 1各项实验记录;2要求你修改的程序的清单(修改后)和调试记录;3自编程序原稿及调试后修正稿,写出原稿错在那里。七思考题 1MOV BYTE PTRBX,20 MOV WORD PTRBX+SI+2,2846 上述指令中BYTE PTR及WORD PTR伪操作不加行不行?试一试。2用G命令运行多字节加法程序,并用D命令检查其结果(存放在哪里?),是否正确?3将多字节加法程序中的INT 20H指令改为INT 3,有何区别?若这条指令不加,行不行?试一试。.4数据串搬家程序中的目的地址改为1002H,再运行此程序,看能不能把1000H开始的字符串搬到1002H开始的地方去?修改程序以做到这一点。MOV SI,100E MOV DI,1010 MOV CX,0F LOP:MOV AL,SI MOV DI,AL DEC SI DEC DI LOOP LOP INT 20.或者 DB IBM_PC COMPUTER MOV SI,100E MOV DI,1010 MOV AX,137E MOV ES,AX MOV CX,0F STD REP MOVS INT 20.实验3 初级程序的编写与调试实验(二)一实验目的 1掌握无条件转移指令、条件转移指令;2掌握利用DOS功能调用INT21H的2号和9号功能进行屏幕显示的方法;3掌握直接向视频RAM送ASCII码进行屏幕显示的方法;4掌握屏幕字符显示程序编写与调试。二实验内容 1 字符、字符串的屏幕显示;2 直接向VRAM送ASCII码显示字符;3 用字符搜索法确定字符串长度;4 16进制数化ASCII码的一般方法(显示内存内容)。三实验要求 1 仔细阅读有关无条件转移指令、条件转移指令的内容;2 阅读利用 DOS 功能调用 INT21H 的 2 号和 9 号功能进行屏幕显示的内容;3阅读实验指导书中的字符串屏幕显示程序、字符屏幕显示程序、直接向 VRAM 送 ASCII 码显示字符程序、用字符搜索法确定字符串长度程序、16 进制数化 ASCII 码的一般方法的程序段,调试上述程序。四实验环境 PC 微机;DOS 操作系统或 Windows 操作系统;MASMEXE,LINKEXE,DEBUGCOM 或宏汇编集成环境。五实验步骤 1利用INT 21 0AH号功能调用显示字符串。(1)用A命令在100H处键入下列程序:MOV AH,9 MOV DX,110 INT 21 INT 20(2)用A命令在110H处键入下列字符串的ASCII码:DB This is a sample!$(3)用N命令和W命令将此程序(包括数据区)存入文件名为AACcOM的磁盘文件中。(存入前BX:CX必须置为文件长度值)。(4)用Q命令退出DEBUG。(5)在DOS命令下打AA,运行此程序,即在屏幕上显示This is a sample!字符串,若不出现,用DEBUG检查程序有无错误。.2利用INT 21H 2号功能显示字符(1)用A命令在100H处键入下列程序:XOR DL,DL MOV CX,100 LOP:MOV AH,2 INT 21 INC DL PUSH CX MOV CX,8 DELY:PUSH CX MOV CX,0 J:LOOP J POP CX LOOP DELY POP CX LOOP LOP INT 20(2)用G命令运行程序,即在屏幕上依次缓慢的显示256个ASCII字符。仔细观察每个字符,和IBM-PC ASCII码表对照,看07H-0DH处控制字符显示结果与表上有何不同?(3)按CTRL+BREAK退出此程序,若一次不行可多做几次。.3直接向VRAM送ASCII码显示字符(1)用A命令在100H处键入下列程序 MOV AX,B000 MOV DS,AX XOR AL,AL XOR BX,BX MOV CX,100 LOP:MOV BX,AL INC BX INC AL PUSH CX MOV CX,8 DELY:PUSH CX MOV CX,0 J:LOOP J POP CX LOOP DELY POP CX LOOP LOP INT 20(2)用N命令和W命令将此程序存入BB.COM文件中。(一定要先存入!)(3)用G命令运行此程序,仔细观察每一个ASCII码显示结果,并和字符表及上一道程序运行情况进行对照,其控制字符区(07-0DH)显示结果和INT 21H 2号功能调用有何不同?.控制字符在该程序中没有显示,在上一个程序中显示为笑脸 4用字符搜索法确定字符串长度(1)用A命令在100H开始的内存处键入下列程序 JMP START DB This is the program to measure DB the length of a string!$START:MOV BX,102 MOV AL,24 XOR CL,CL LOP:CMP AL,BX JZ EXIT.INC BX INC CL JMP LOP EXIT:INT3(2)用G命令运行此程序,并检查CL的统计长度是否与你自己统计的实际长度是否一样?CL的统计长度与实际长度相等,均为35H 5用字符搜索法确定字符串长度 (1)用A命令在100H处键入下列程序:MOVSI,0 MOVBL,10 LOP:MOVDL,SI MOVCL,4 SHRDL,CL CMPDL,0A JC J1 ADD DL,7 J1:ADD DL,30 MOV AH,2 INT 21 MOV DL,SI AND DL,0F CMP DL,0A JC J2 ADD DL,7 J2:ADD DL,30 MOV AH,2 INT 21 MOV DL,20 MOV AH,2 INT 21 INC SI.DEC BL JNZ LOP INT 20(2)用N,W命令将此程序用CCCOM文件名存入磁盘。(3)用Q命令退出DEBUG。(4)在DOS命令状态下直接运行CCCOM命令文件,应在屏幕上显示出内存从0000H开始的16个字节的内容,若有错误,用DEBUG检查之。(5)自编程序:修改上面程序,使除以16进制数形式显示内存内容外,还能在其右边显示该16进制码所对应的ASCII字符,07-0D的控制字符用代替。答:在DOS下输入DEBUG CC.COM打开程序,从最后一条指令INT 20(包括该指令)开始修改,修改方法如下:MOV CX,10 MOV SI,0 J3:MOV DI,SI MOV AH,2 CMP DL,0D JBE J5 J4:INT 21 INC SI.DEC CX JNZ J3 INT 20 J5:CMP DL,07 JNB J4 MOV DL,2E JMP J4 六实验报告要求 1、各项实验记录及观察体会。2、自编程序草稿及调试结果。七思考题 利用INT 21H 显示和直接向VRAM送ASCII码显示方法在显示结果上有什么不同?答:利用INT 21H显示时,07H-0DH的控制符会用笑脸之类的符号显示;直接向VRAM送ACSII码时,07H-0DH的控制符不显示。.实验 4 汇编语言程序上机过程 一实验目的 熟练掌握汇编语言程序的编辑、调试和运行的过程和方法。了解汇编语言程序的汇编、运行环境。二实验内容 1掌握常用的编辑工具软件(如WORD、EDIT)、MASM和LINK的使用;2伪指令:SEGMENT,ENDS,ASSUME,END,OFFSET,DUP;3利用的INT 21H的1号功能实现键盘输入的方法;三实验要求 1仔细阅读有关伪指令SEGMENT,ENDS,ASSUME,END,OFFSET,DUP的内容;2 了解利用的INT 21H的1号功能实现键盘输入的方法,了解.EXE文件和.COM文件的区别及用INT 21H 4C号功能返回系统的方法;3阅读下面程序段。四实验环境 PC 微机 DOS 操作系统或 Windows 操作系统 MASM。EXE,LINK。EXE,DEBUG。COM 或宏汇编集成环境 五实验步骤 程序:data segment message db This is a sample program of keyboard and disply db 0dh,0ah,Please strike the key!,0dh,0ah,$data ends stack segment para stack stack db 50 dup(?)stack ends code segment assume cs:code,ds:data,ss:stack start:mov ax,data mov ds,ax mov dx,offset message mov ah,9 int 21h;显示This is a sample program of keyboard and disply again:mov ah,1 int 21h;等待键盘输入,保存至AL.cmp al,1bh;1bh 字符ESC的ASCII je exit cmp al,61h ;61h字符a的ASCII jc(jb)nd;小于(CF=1有借位)转向ND原样显示 cmp al,7ah;ja nd ;大于转向ND原样显示 and al,11011111b;转化为大写字母 sub al,20h nd:mov dl,al mov ah,2 int 21h jmp again exit:mov ah,4ch int 21h code ends end start 实验步骤:1 用用文字编辑工具(记事本或EDIT)将源程序输入,其扩展名为ASM。2 用MASM对源文件进行汇编,产生OBJ文件和LST文件。若汇编时提示有错,用文字编辑工具修改源程序后重新汇编,直至通过。3 用TYPE命令显示1产生的LST文件。.4 用LINK将OBJ文件连接成可执行的EXE文件。5 在DOS状态下运行LINK产生的EXE文件。即在屏幕上显示标题并提示你按键。每按一键在屏幕上显示二个相同的字符,但小写字母被改成大写。按ESC键可返回DOS。若未出现预期结果,用DEBUG检查程序。.六实验报告要求 汇编,连接及调试时产生的错误,其原因及解决办法。答:汇编的程序的标点符号用得不对,在进行汇编时会出现很多错误。只能重新输入过,不能进行复制、粘贴。七思考题 1若在源程序中把INT 21H的H省去,会产生什么现象?修改后代码的IO.ASM编译连接均没有出现什么问题,一切正常,但是最后运行IO.EXE时造成无法输入输出,也无法退出返回到DOS状态。2.把 INT 21H 4CH号功能改为 INT 20H,行不行?再更改之后,io的编译连接、输入输出等都正常,但是在按下ESC退出时会出现上述对话框错误。.实验 5 分支程序实验 一实验目的 1 掌握分支程序的设计方法;2 掌握利用 DEBUG 修改参数、检查结果的方法;3 熟悉汇编语言源程序的编辑、汇编、连接及调试过程。二实验内容 1编写一个程序,显示 AL 寄存器中的两位十六进制数 2编写一个程序,判别键盘上输入的字符;若是 1-9 字符,则显示之;若为 A-Z 或 a-z 字符,均显示“c”;若是回车字符(其 ASCII 码为 0DH),则结束程序,若为其它字符则不显示,继续等待新的字符输入。三实验要求 1编写实验内容要求的两个程序;2写出调试以上程序,即修改程序参数,检查结果的操作方法;3熟悉源程序汇编、连接命令的使用方法即要回答的内容。四实验环境 PC 微机 DOS 操作系统或 Windows 操作系统 MASM.EXE,LINK.EXE,DEBUG.COM 或宏汇编集成环境 五实验步骤 1 用 EDIT 或其它编辑软件,编写.ASM 源程序,例如 HEXASC.ASM 及 DSPKEY.ASM。2对其进行汇编及连接,产生.EXE 文件。3对.EXE 文件进行调试运行。(1)用 DEBUG 调试运行,学会修改 AL 内容的方法;.(2)对 DSPKEY.EXE 键入不同的字符,分别进行调试;(3)在 MS-DOS 下运行这两个.EXE 文件。六实验报告要求 1画出两个程序的流程图,若要独立编写程序,应列出相应的程序清单。2说明本实验是如何利用 DEBUG 进行调试的。七思考题 编写显示 AX 中四位十六进制数程序,画出程序的流程图。实验参考程序清单(1)显示 AL 中两位十六进制数程序:;DISPHEX.ASM CODE SEGMENT ASSUME CS:CODE START:MOV AL,3EH MOV BL,AL MOV DL,AL MOV CL,4 SHR DL,CL CMP DL,9 JBE NEXT1 ADD DL,7 NEXT1:ADD DL,30H MOV AH,2 INT 21H ;显示高位 ASCII 码 MOV DL,BL.AND DL,0FH CMP DL,9 JBE NEXT2 ADD DL,7 NEXT2:ADD DL,30H MOV AH,2 INT 21H ;显示低位 ASCII 码 MOV AH,4CH INT 21H CODE ENDS ;返回 DOS END START(2)显示键入字符程序;DISPKEY.ASM CODE SEGMENT ASSUME CS:CODE START:MOV AH,1 INT 21H ;等待键入字符,送 AL CMP AL,0DH ;是否是回车符?JZ DONE ;是则转 DONE 退出程序 CMP AL,0 JB NEXT CMP AL,9 JA CHARUP MOV DL,AL MOV AH,2 INT 21H JMP START CHARUP:CMP AL,41H JB NEXT CMP AL,5AH JA CHRDN DISPC:MOV DL,C MOV AH,2 INT 21H NEXT:JMP START CHRDN:CMP AL,61H JB NEXT CMP AL,7AH JA NEXT JMP DISPC DONE:MOV AH,4CH INT 21H CODE ENDS END START.实验 6 循环程序实验 一实验目的 1掌握循环程序的设计方法;2学会针对不同的问题,选用不同的组织循环的方法;3进一步熟悉利用 DEBUG 程序修改参数的方法,并检查和验证结果的正确性。二实验内容 1编写一个程序,显示 BX 寄存器中的两位十六进制数;2编写一个程序,判别键盘上输入的字符;若是 1-9 字符,则显示之;若为 A-Z 或 a-z 字符,均显示“c”;若是回车字符(其 ASCII 码为 0DH),则结束程序,若为其它字符则不显示,继续等待新的字符输入。三实验要求 1编写实验内容要求的两个程序;2写出调试以上程序,即修改程序参数,检查结果的操作方法;3熟悉源程序汇编、连接命令的使用方法即要回答的内容。四实验环境 PC 微机 DOS 操作系统或 Windows 操作系统 MASM.EXE,LINK.EXE,DEBUG.COM 或宏汇编集成环境 五实验步骤 1用 EDIT 或其它编辑软件,编写.ASM 源程序,例如 HEXASC.ASM 及 DSPKEY.ASM;2对其进行汇编及连接,产生.EXE 文件;.3对.EXE 文件进行调试运行。(1)用 DEBUG 调试运行,学会修改 BL 内容的方法;(2)对 DSPKEY.EXE 键入不同的字符,分别进行调试;(3)在 MS-DOS 下运行这两个.EXE 文件。六实验报告要求 画出两个程序的流程图,若要独立编写程序,应列出相应的程序清单。七思考题 编写一循环程序,测量一字符串长度,并用 16 进制数显示之。.实验 7 子程序实验 一实验目的 1掌握主程序与子程序之间的调用关系及调用方法;2掌握子程序调用过程中近程调用与远程调用的区别;3掌握通过堆栈转送参数的方法。二实验内容 1将 BUF 开始的 10 个单元中的二进制数转换成两位十六进制数的 ASCII 码,在屏幕上显示出来。要求码型转换通过子程序 HEXAC 实现,在转换过程中,通过子程序 DISP 实现显示。2编写一个主程序,从键盘接收若干个字符,然后用远调用的方法,调用子程序统计字符串中字符b的个数.子程序的参数是字符串的首地址TABLE,字符串长度N 及字符”b”.子程序返回字符b”的个数.参数传送采用堆栈实现.主程序在子程序返回后,显示字符”b”及其个数(设为一位十六进制数)。三实验要求 1第一个实验程序用子程序的近程调用实现。由于在调用 HEXASC 子程序时,子程序又调用了 DISP子程序,这叫子程序的嵌套调用。实验过程中可以从堆栈的内容看到两个子程序的返回地址值。由于是近调用,地址值只包括返回地址的段内偏移量。在每个子程序的执行中,检查 CS 值是不变的。2第二个程序是利用远调用的方法调用子程序的。在远调用情况下,主程序与子程序处在不同的逻辑代码段中,可在子程序执行中查看 CS 值,它与主程序中的 CS 值是不同的。子程序调用后,堆栈中保留了返回地址的段地址及段内偏移量。3第二个程序中,主程序与子程序之间参数的传送是由堆栈实现的。一段是将参数(此处是串首址TABLE,串的长度 N 及待统计的字符“b”)顺序压如堆栈,在子程序调用后,通过 BP 指针对堆栈中的参数访问,并将统计的结果通过堆栈返回。有关该方法的原理此处不再介绍。4预习子程序设计的基本方法,根据实验内容要求,画出子程序及主程序的流程图;熟悉键盘键入字符串及用堆栈传送参数的程序段编制方法。四实验环境 PC 微机 DOS 操作系统或 Windows 操作系统 MASM.EXE,LINK.EXE,DEBUG.COM 或宏汇编集成环境 五实验步骤 1编辑、汇编两个源程序,生成相应的可执行文件(.EXE)2用 DEBUG 的 R 命令,T 命令或 G 命令和 D 命令检查远程调用及近程调用时堆栈的变化。特别是通过堆栈传送的参数和子程序取出的参数是返回参数的详细过程。3检查程序执行的结果是否正确。.实验内容 1 流程图:开始将数据段起始有效地址赋予BXCX=0AHAL=BX调用子程序HEXASCBX=BX+1CX=0?结束是否 开始DL=ALCL=4DL左移四位,使最高位移至最低位,PUSH CX,PUSH AX调用子程序DISPPOP AX,DL=AL,将 DL高四位置零调用子程序DISP,POP CX返回主程序 开始DL=9DL=DL+30HDL=DL+7HAH=2INT 21H返回程序HEXASC否是 主程序 子程序 HEXASC 子程序 DISP .六实验报告要求 1说明用堆栈传送参数的过程及其具体方法。2分析实验结果及所遇到问题,并说明解决的方法。七思考题 分析远程调用与近程调用的区别,在用 DEBUG 有关命令观察时,执行过程有何不同。参考程序清单 1码型转换程序清单:;CONV.ASM DATA SEGMENT BUF DB 0ABH,0CDH,0DEH,01H,02H,03H DB 3AH,4BH,5CH,6FH DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV CX,10 LEA BX,BUF AGAIN:MOV AL,BX CALL HEXASC.INC BX LOOP AGAIN MOV AH,4CH INT 21H HEXASC PROC NEAR MOV DL,AL PUSH CX MOV CL,4 SHR DL,CL POP CX CALL DISP ;显示高位 HEX 数 MOV DL,AL AND DL,0FH CALL DISP RET HEXASC ENDP DISP PROC NEAR CMP DL,9 JBE NEXT ADD DL,7 NEXT:ADD DL,30H MOV AH,2 INT 21H ;显示 RET DISP ENDP CODE ENDS END START 2统计并显示某键入字符的个数的程序:;COUNTER.ASM DATA SEGMENT CHAR DB b BUF DB 50H,?,50H DUP(?)DATA ENDS MCODE SEGMENT ASSUME CS:MCODE,DS:DATA START:MOV AX,DATA MOV DS,AX LEA DX,BUF MOV AH,9 INT 21H LEA SI BUF MOV CL,SI+1 MOV CH,0 ;CX 中为字符串长度 INC SI .INC SI ;SI 指向串首址 TABLE MOV AL,CHAR MOV AH,0 ;AX 中为待查字符 PUSH SI PUSH CX PUSH AX ;参数送堆栈 CALL CHECK POP AX :统计个数在 AL 中 MOV DL,CHAR MOV AH,2 INT 21H MOV DL,AL AND DL,0FH CMP DL,9 JBE NEXT ADD DL,7 NEXT:ADD DL,30H MOV AH,2 INT 21H ;显示统计个数 MOV AH,4CH INT 21H M CODE ENDS SCODE SEGMENT ASSUME CS:SCODE CHECK PROC FAR PUSH BP MOV BP,SP MOV SI,BP+10 MOV CX,BP+8 MOV AX,BP+6 XOR AH,AH AGAIN:CMP AL.SI JNE NEXT1 INC AH NEXT1:INC SI LOOP AGAIN MOV AL,AH MOV BP+10,AX POP BP RET 4 CHECK ENDP END START

    注意事项

    本文(南昌大学汇编语言实验报告.pdf)为本站会员(深夜****等你...)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开