F9:运行程序 F10:激活主菜单
Ctrl+Break:终止程序执行 Alt+X:退出TD Tab:切换焦点区域
? 当焦点区域在寄存器显示区中时:
Ctrl+R:切换16位/32位通用寄存器并显示 Ctrl+I:使光条指示寄存器的内容加1 Ctrl+D:使光条指示寄存器的内容减1 Ctrl+Z:使光条指示寄存器的内容清零 Ctrl+C:手动修改光条指示寄存器的内容 ? 当焦点区域在数据显示区中时:
Ctrl+D:修改数据显示格式
Ctrl+G:指定需要显示的内存区域首地址 Ctrl+S:查找指定的字节值表
Ctrl+C:修改光标当前指示存储单元的内容 ? 当焦点区域在代码显示区中时:
Ctrl+G:指定需要显示的代码区域首地址 Ctrl+S:查找指定的指令
数字键/字符:修改光标当前指示指令
五.
1.
实验内容及说明
实验内容:数据传送实验
1) 编程将数据段中的一个字符串传送到附加段中,并输出附加段中的目标字符串到屏
幕上。参见示例出程序。
2) 修改此程序,采用字符串传送指令完成。 2. 实验中使用DOS功能调用(INT 21H):
参见教材《32位微型计算机原理与接口技术》89页 (1)显示字符串
入口:AH=09H
调用参数:DS:DX=串首地址,‘$’为结束字符。
(2)返回DOS系统
入口:AH=4CH
调用参数:AL=返回码
3.有关字符串的操作指令
参见教材《32位微型计算机原理与接口技术》62页 4. 实验目的:通过对该程序进行调试,查看程序段、数据段、附加段装入内存后的分配情况。单步执行数据传送指令后,观察各个寄存器及数据区的内容。
六.
1. 2. 3. 4.
实验步骤
运行Tddebug软件,选择Edit菜单编写实验程序
使用Compile菜单中的Compile和Link对实验程序进行汇编、连接,生成执行文件。 使用Rmrun菜单中的Run运行程序,观察运行结果。
使用Rmrun菜单中的Debug调试程序,查看程序段、数据段、附加段装入内存后的分配情况。单步执行数据传送指令后,观察各寄存器及数据区的内容。过程如下:
6
1) 按F7单步执行,在代码区中有一个三角,表示正在执行的指令。每一条指令的执行
一定会使目标寄存器和状态寄存器发生变化,从相关窗口看结果。 2) 检查内存数据区的内容,关键是找出用户程序的数据段和附加段:
? 方法1:在CPU窗口按Tab键使内存数据显示区成为活动区,按Ctrl+G键,输入:
“DS或ES寄存器的值:偏移地址”,即可显示用户指定的数据区 ? 方法2:选择菜单View| Dump,弹出内存数据显示窗口。 3) 查看执行结果:按Alt+F5,切换到用户窗口。 5.
更改数据区中的数据,考察、调试程序的正确性。
七. 参考程序清单
;数据传送实验,采用相对寻址方式 DDATA SEGMENT ;定义源数据段 MSR DB \LEN EQU $- MSR DDATA ENDS EXDA SEGMENT ;定义附加数据段 MSD DB LEN DUP(?) 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 ES,AX ;装载附加数据段寄存器 MOV SI,OFFSET MSR MOV DI,OFFSET MSD MOV CX,LEN MOV BX,0
NEXT: MOV AL,MSR[BX] ;开始传输数据 MOV ES:MSD[BX],AL INC BX LOOP NEXT PUSH ES
POP DS ;将附加段寄存器指向的段值赋给数据段寄存器 MOV DX,OFFSET MSD MOV AH,9 INT 21H ;显示字符串 MOV AH,4CH INT 21H ;返回DOS状态
7
CODE ENDS END START
8
实验二、I/O程序设计
一.
1. 2. 3. 4.
实验目的
理解软中断的调用方法及中断过程。
掌握INT 21H软件中断来调用DOS系统I/O子程序的方法。 掌握将存储在内存单元中的数据在屏幕上显示的方法。 掌握从键盘输入信息到内存的方法。
二. 实验设备
PC微机一台
三. 实验预习要求
1.复习DOS功能调用(INT 21H)中用于字符输入(功能号为01H)、字符输出(功能号为02H)、字符串输入(功能号为0AH)以及字符串输出(功能号为09H)的调用方法。参见教材《32位微型计算机原理与接口技术》89页。
2.阅读示例程序,掌握输入/输出方法。
3.从实验内容中任选一道题目,仔细阅读相关的实验要求及说明,编写程序,以便上机调试。
四. 实验内容
1.【示例】:将指定数据区中一个字节的数据以十六进制数形式显示在屏幕上。
设计思路:首先将该数以十六进制数形式分解,然后将每一位分别转换为ASCII码送屏幕显示。其中0H~9H之间的数加30H,即可得0H~9H的ASCII码,而AH~FH的ASCII码,则需再加7H,参见表5-1。参考程序流程如图2-1所示。示例程序参见参考程序清单。 2.编程由键盘输入任意一个字符,将该字符的ASCII码值显示在屏幕上。 3.从键盘输入两个1位十进制数,计算二者之和,并将结果显示在屏幕上。
4.编程由键盘输入任意一位数,将该数以二进制数形式显示在屏幕上,例:5=00000101B
五. 实验说明
存储在内存单元中的数据要显示在屏幕上,必须首先将一个数据区中的数分解为各位不同进制的数(参见表5-1),然后转换为字符,通过DOS功能调用(INT 21H)完成显示。例:
1) 显示单个字符
MOV AH, 02H
MOV DL, 待显示字符的ASCII码 INT 21H 2) 键盘输入并回显
MOV AH, 01H INT 21H
得到按键的ASCII码,存放于AL中
六.
1. 2. 3.
实验步骤
画出实验流程图。
运行Tddebug软件,选择Edit菜单编写实验程序
使用Compile菜单中的Compile和Link对实验程序进行汇编、连接,生成执行文件。
9
4. 5. 6. 使用Rmrun菜单中的Run运行程序,观察运行结果。
使用Rmrun菜单中的Debug调试程序。单步执行指令,观察各寄存器及数据区的内容。 更改数据区中的数据,考察程序的正确性。
七. 参考程序清单及流程
;将指定数据区SD的数据以十六进制数形式显示在屏幕上 DATA SEGMENT
MES DB 'Show a as hex:',0AH,0DH,'$' SD DB 'a' DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX
MOV DX,OFFSET MES;显示提示信息 MOV AH,09H INT 21H
MOV SI,OFFSET SD MOV AL,DS:[SI]
AND AL,0F0H ;取高4位 MOV CL,4 SHR AL,CL
CMP AL,0AH ;是否是A以上的数 JB C2 ADD AL,07H C2: ADD AL,30H
MOV DL,AL ;显示字符 MOV AH,02H INT 21H
MOV AL,DS:[SI]
AND AL,0FH ;取低4位 CMP AL,0AH JB C3 ADD AL,07H C3: ADD AL,30H
MOV DL,AL ;显示字符 MOV AH,02H INT 21H
MOV AH,4CH ;返回DOS INT 21H CODE ENDS END START
10
图2-1 一个字节数以十六进制数形式显示处理流程