实验一、认识Tddebug集成操作软件
一.实验内容
(一) 实验题目:数据传送实验
1. 编程将数据段中的一个字符串传送到附加段中,并输出附加段中的目标字符串到屏幕上。
2. 修改此程序,采用字符串传送指令完成。
(二) 实验目的:通过对该程序进行调试,查看程序段、数据段、附加段装入内存后的分配情况。单步执行数据传送指令后,观察各个寄存器及数据区的内容。
(三) 实验步骤:
1. 运行Tddebug软件,选择Edit菜单编写实验程序
2. 使用Compile菜单中的Compile和Link对实验程序进行汇编、连接,生成执行文
件。
3. 使用Rmrun菜单中的Run运行程序,观察运行结果。
4. 使用Rmrun菜单中的Debug调试程序,查看程序段、数据段、附加段装入内存后
的分配情况。单步执行数据传送指令后,观察各寄存器及数据区的内容。过程如下: 1) 按F7单步执行,在代码区中有一个三角,表示正在执行的指令。每一条指令的执行一定会使目标寄存器和状态寄存器发生变化,从相关窗口看结果。 2) 检查内存数据区的内容,关键是找出用户程序的数据段和附加段:
? 方法1:在CPU窗口按Tab键使内存数据显示区成为活动区,按Ctrl+G键,?
输入:“DS或ES寄存器的值:偏移地址”,即可显示用户指定的数据区 方法2:选择菜单View| Dump,弹出内存数据显示窗口。
3) 查看执行结果:按Alt+F5,切换到用户窗口。 5. 更改数据区中的数据,考察、调试程序的正确性。
二.分析设计思想,绘制实验原理图、流程图。
汇编语言程序的开发过程如图1.1所示,这个过程主要有编辑、编译、链接几个步骤构成。
三.程序清单及相关注释。
DDATA SEGMENT
MSR DB \LEN EQU $- MSR
DDATA ENDS EXDA SEGMENT MSD DB LEN DUP(?)
;定义源数据段
;定义附加数据段
1
EXDA ENDS
;定义堆栈段
MYSTACK SEGMENT STACK DW 20 DUP(?) MYSTACK ENDS
CODE SEGMENT
;定义代码段
ASSUME CS:CODE,DS:DDATA,ES:EXDA START: MOV AX,DDATA
MOV DS,AX MOV AX,EXDA MOV MOV MOV MOV MOV
ES,AX SI,OFFSET MSR DI,OFFSET MSD CX,LEN BX,0
;装载数据段寄存器
;装载附加数据段寄存器
NEXT: MOV AL,MSR[BX] ;开始传输数据 MOV ES:MSD[BX],AL
INC LOOP PUSH
BX NEXT ES
;将附加段寄存器指向的段值赋给数据段寄存器
POP DS MOV DX,OFFSET MSD
MOV AH,9
INT 21H MOV AH,4CH INT 21H
;显示字符串 ;返回DOS状态
CODE ENDS END START
四.实验结果并分析。
五.收获体会及实验中遇到的问题和解决方法。
在这次试验中主要是掌握tddebug的开发环境,了解汇编语言的基本程序。由于刚
2
刚接触汇编语言和开发环境,各项知识都显的比较薄弱,遇到了很多操作上的基本问题。比如使用快捷键进行界面操作不太熟练等。由于代码段相对比较长,很多地方还需在老师的指导下才能看懂,直接将代码程序打出来会出现很多由于不理解粗心等造成的失误使之不能编译成功。后来尝试将程序代码复制并另存为ASM格式之后就可以直接编译方便了很多灵活了很多。今后还需在理论课堂上多下功夫,进一步对汇编深入学习。
实验二、I/O程序设计
一.实验内容:I/O程序设计 (一)实验内容:
1.编程由键盘输入任意一个字符,将该字符的ASCII码值显示在屏幕上。
2.从键盘输入两个1位十进制数,计算二者之和,并将结果显示在屏幕上。
3.编程由键盘输入任意一位数,将该数以二进制数形式显示在屏幕上,例:5=00000101B
(二) 实验步骤:
1. 画出实验流程图。
2. 运行Tddebug软件,选择Edit菜单编写实验程序
3. 使用Compile菜单中的Compile和Link对实验程序进行汇编、连接,生成执行文件。
4. 使用Rmrun菜单中的Run运行程序,观察运行结果。
5. 使用Rmrun菜单中的Debug调试程序。单步执行指令,观察各寄存器及数据区的
内容。
6. 更改数据区中的数据,考察程序的正确性。
二. 分析设计思想。
设计思路:首先将该数以十六进制数形式分解,然后将每一位分别转换为ASCII码送屏幕显示。其中0H~9H之间的数加30H,即可得0H~9H的ASCII码,而AH~FH的ASCII码,则需再加7H,参见表5-1。参考程序流程如图2-1所示。示例程序参见参考程序清单。
三. DATA
程序清单及流程 SEGMENT
MES DB 'Show a as hex:',0AH,0DH,'$'
SD DB 'a' DATA CODE
ENDS SEGMENT
MOV AX,DATA MOV DS,AX MOV MOV
DX,OFFSET MES ;显示提示信息 AH,09H
SI,OFFSET SD AL,DS:[SI]
3
ASSUME CS:CODE,DS:DATA START:
INT 21H MOV MOV
AND AL,0F0H ;取高4位
MOV CL,4 SHR AL,CL CMP AL,0AH ;是否是A以上的数 JB C2 ADD AL,07H C2: ADD AL,30H
MOV MOV INT MOV AND CMP JB
21H
AL,DS:[SI] AL,0FH ;取低4位 AL,0AH C3
;显示字符
DL,AL AH,02H
ADD AL,07H C3: ADD AL,30H
MOV MOV INT MOV INT
DL,AL AH,02H 21H
AH,4CH 21H
;显示字符
;返回DOS
CODE ENDS END START
四.
实验结果。
五. 收获体会。
在实验中,加强了对理论知识的掌握,由于堂上的知识太多平时不能很好的理解,在具
体的实践中更加巩固了我对理论知识的认识,增强了汇编语言的编程语感。汇编语言是底层的硬件语言,和C语言有类似的地方,也有不一样的地方,所以在实际编程的过程中写给代码段测试结果,加深对理论知识的灵活掌握,为今后逐步增加难度的编程序学
4