想办法把25的十位和个位拆开,再分别变为ASCII,先显示 2 ,后显示 5
3、 将数据段中的10个个位数数据从显示器上输出。
从数据段中直接定义10个个位数据,取出数据后,变为变为ASCII,显示
二 实验过程参考步骤
题目
1、将数据段中2000H单元开始存放的10个数(8位数)传送到3000H开始的10个字节中。 源程序:数据定义 DATAS SEGMENT ORG 2000H DATA1 DB 1,2,3,4,5,6,7,8,9,10 ORG 3000H DATA2 DB 10 DUP (0) DATAS ENDS
CODES SEGMENT START: MOV AX,DATAS MOV DS, AX MOV SI, 2000H MOV DI, 3000H MOV CX, 10 NEXT:MOV AL, [SI] MOV [DI], AL INC SI INC DI DEC CX JNZ NEXT MOV AH, 4CH INT 21H CODES ENDS END START 运行前内存分布:
程序运行前 2000H: 01 02 03 04 05 06 07 08 09 0A 3000H: 00 00 00 00 00 00 00 00 00 00
程序运行后 2000H: 01 02 03 04 05 06 07 08 09 0A
3000H: 01 02 03 04 05 06 07 08 09 0A
程序调试过程:
第一步:输入源程序,如图1所示。
图1 输入源程序
第二步:保存源文件(注:保存到自己的目录中)。
第三步:将汇编源程序汇编成目标文件:执行菜单中“运行—编译成目标文件”命令,若无语法错误,则在下方窗口中显示“编译成功”,如图2所示;若有错误,可根据提示找出错误所在行,改正后,重新执行此命令。
图2 将汇编源程序编译成目标文件 图3 将目标文件连接成EXE文件
第四步:将第三步生成的目标文件连接成可执行文件:执行菜单中“运行—生成可执行文件”命令,若无连接错误,则在下方显示“生成EXE文件成功”,如图3所示 ;若有错误,可根据提示找出错误所在行,改正后,则从第三步开始继续调试。
第五步:对生成的EXE文件进行调试,查看结果,步骤如下:
(1) 执行菜单中的“运行—DEBUG调试”命令,打开DEBUG窗口,如图4所示。
图4 DEBUG调试窗口 (2)输入命令“U”,将EXE文件(二进制机器码)反汇编成汇编程序,如图5所示。
其中,最左边一列是代码段中指令的地址,为逻辑地址的形式,其段基址为汇编程序分配,段内偏移地址默认从零开始;第二列为二进制机器码(以十六进制形式显示),与第三列中的汇编语句相对应。
查看第三列,找到自己所有的程序,一般到结束语句MOV AH,4CH INT 21H 结束;若没
有反汇编完所有的程序,则再执行一个“U”命令,直到所有程序均被反汇编出来。
指令地址 二进制指令 汇编指令
(逻辑地址) (机器码)
图5 输入命令U对EXE文件进行反汇编,得到汇编程序
(3) 应用“G”命令运行程序,G命令格式:G=起始地址 断点地址;起始地址为开始执行指令的地址(若为段内,可只写偏移地址),断点地址为停止执行语句的地址。例如,执行例题代码段内所有程序时,命令可为G=0000 0017,0000为第一条指令的偏移地址,0017为指令MOV AH, 4CH的地址,到此处结束本程序的执行。如图6所示。 CPU内通用寄存器、CPU内标志寄存器的值 段寄存器及IP的值
图6 运行G命令执行程序
运行G命令后,程序即在断点处停止执行,此时显示出CPU内所有寄存器的当前值。若要查看运行后内存单元的值,可应用下面的命令D。
(4) 查看结果
(A) 查看内存单元存放的结果:
使用命令D,格式:D 段地址:偏移地址。例如,查看本程序的运行结果,如图7所示。
图7 D命令查看内存单元的值
其中,段地址和偏移地址均要以实际运行程序的状态来输入。
仅记录你的运行程序涉及的内存单元,及涉及到的CPU寄存器内容,不能记录屏幕显示的所有内容
(B)其它命令,请查询软件屏幕左边 提示信息
(5) 最后,输入命令Q退出DEBUG程序。如图8所示。