手机版 | 登陆 | 注册 | 留言 | 设首页 | 加收藏
当前位置: 网站首页 > 音响设备技术 > 文章 当前位置: 音响设备技术 > 文章

汇编语言程序设计操作性实验Debug、Emu8086、MASM的使用

时间:2009-08-13    点击: 次    来源:本站原创    作者:佚名 - 小 + 大

汇编语言程序设计编程源代码操作性实验Debug Emu8086 MASM的使用|汇编语言实验指导|汇编程序|汇编语言程序设计指令|汇编调试器的使用|

实验内容:

1.           实验/作业题目:

 

DebugEmu8086MASM的使用

 

2.实验/作业课时:2课时

 

3.实验过程(包括实验环境、实验内容的描述、完成实验要求的知识或技能)

 

试验环境:Windos 2000Debug程序、Emu8086程序、MASM 6.15程序

实验内容的描述:汇编调试器的使用

完成实验要求的知识或技能:汇编调试器的使用

 

4.程序结构(程序中的函数调用关系图)

 

无函数调用,只有主过程

 

5.算法描述、流程图或操作步骤:

 

无算法描述

 

流程图:若图片无法显示请联系站长QQ3249114

习题2.36

习题2.37

操作步骤:

 

Debug

1:使用-e命令写入数据

2:使用-a命令写入代码,跳转语句先设定为原地跳转,记下行号,以便以后更改

3:全部代码输入完毕后,修正代码中的所有跳转语句

4:使用-r命令检查CSIP寄存器的值,将其修正到正确的函数入口

5:使用-t命令单步执行程序或使用-g命令直接运行

 

Emu8086  

1:输入程序代码

2:运行或单步运行

 

MASM 6.15

1:建立源代码的纯文本文件

2:使用命令行方式,Make32Make16命令建立可执行文件

3:运行(没办法单步运行)

 

6.实验数据和实验结果(用屏幕图形表示,可另加附页):

 

习题2.36输入数据:  第一次:u

 

                     第二次:7

 

习题2.36输出结果图:若图片无法显示请联系站长QQ3249114

习题2.37输入数据:ABCDabcd1234?!@

 

习题2.37输出结果图:

7.改进建议:

 

我的程序和老师上课给的有几点不同:一是在建立输入缓冲区时,将全部的内存单元初始化为’$’,免得后面还要专门在字符串后面加这个结束符;二是在字符串的检索过程当中考虑了非字母的字符的问题,并加入了跳出机制,不至于每一次输入即时输入几个字符都要检索缓冲区内的所有内容。算是改进吧。

Debug,我觉得还是比较难操作的,主要是它不支持软指令和标识符,输入源程序特别麻烦,相对的Emu8086简单的多。在用Debug进行调试的过程当中,我觉得罪应该注意的是要记得在运行前修正CSIP寄存器的值,我有因为疏忽出现了程序狂飙不受控制的情况,今后我会注意的。至于Emu8086,好像不支持.exit的关闭进程的方式,我都改为中断关闭的方式了,只是有点搞不清.exit的方式应该在什么情况下使用。MASM我主要是试着改成了32位汇编程序,因为用了很长时间比较熟悉了,没出现什么大问题,但由于PC中断对32位不是很支持(比如输入字符串时要从DX寄存器中传递字符串缓冲区的EA地址,但32位汇编的EA32位数据),所以我使用的是Windows API的控制台操作来代替中断操作。

这次运行的程序,结果和过程上没有太大的问题,但是在输入输出提示上好像还不那么完善,今后的上机中我会注意的。

 

评分标准      --报告格式规范,文字清晰       观察能力--正确描述和理解需要操作的问题

操作能力--正确输入程序,熟悉编程环境   调试能力--熟练使用调试功能解决程序错误

附源代码

习题2.36(80x86版)

.model small
.data
displayPutin DB "Input Number:0~9:$"
displayError DB "Error!",0dh,0ah,'$'
.code
main PROC
    mov ax,@data
    mov ds,ax
AGAIN:
    mov ah,09h
    mov dx,OFFSET displayPutin
    int 21h
    mov ah,00h
    int 21h
    cmp al,30h
    js ERRORLEABE
    cmp al,3ah
    jns ERRORLEABE
    mov dl,0dh
    mov ah,01h
    int 21h
    mov dl,0ah
    int 21h
    mov dl,al
    int 21h
    jmp QUIT
ERRORLEABE:
    mov ah,09h
    mov dx,OFFSET displayError
    int 21h
    jmp AGAIN
QUIT:
    mov ah,4ch
    int 21h
main ENDP
END main

习题2.37(80x86版)

.model small
.data
String DB 255,0,255 DUP('$'),'$'
.code
main PROC
    mov ax,@data
    mov ds,ax
    mov ah,0ah
    mov dx,OFFSET String
    int 21h
    mov si,OFFSET String+2
AGAIN:
    cmp [si],'$'
    jz DISPLAY
    cmp [si],'a'
    js DONOTHING
    cmp [si],7bh
    jns DONOTHING
    sub [si],20h
DONOTHING:
    inc si
    jmp AGAIN
DISPLAY:
    mov ah,09h
    mov dx,OFFSET String +2
    int 21h
    mov ah,4ch
    int 21h
main ENDP
END main

上一篇:汇编,ASM,80x86,汇编文章,汇编源码,汇编教程,x86,汇编技术

下一篇:俺也汇编一下:EMU8086

备案ICP编号  |   QQ:285250603  |  地址:湛江市  |  电话:15322199012  |  
Copyright © 2026 天人文章管理系统 版权所有,授权www.yajiupc.top使用 Powered by 55TR.COM