77范文网 - 专业文章范例文档资料分享平台

微机实验作业(2)

来源:网络收集 时间:2019-02-17 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

此命令将文件名格式化在CS:5CH的文件控制块内,以便使用L或W命令把文件装入内存进行调试或者存盘。

装入命令L,它有两种功能:

1)把磁盘上指定扇区的内容装入到内存指定地址起始的单元中,格式为: -L 地址 驱动器 扇区号 扇区数 2)装入指定文件,格式为: -L [地址]

此命令装入已在CS:5CH中格式化的文件控制块所指定的文件。 在用L命令前,BX和CX中应包含所读文件的字节数。 写命令W,有两种格式: 1)把数据写入磁盘的指定扇区: -W 地址 驱动器 扇区号 扇区数 2)把数据写入指定文件中: -W [地址] 此命令把指定内存区域中的数据写入由CS:5CH处的FCB所规定的文件中。在用W命令前,BX和CX中应包含要写入文件的字节数。

退出DEBUG命令Q,该命令格式为 Q 它退出DEBUG程序,返回DOS,但该命令本身并不把在内存中的文件存盘,如需存盘,应在执行Q命令前先执行写命令W。

三.操作步骤

1. 调用字处理程序建立源程序文件如图1-1所示。 DATA SEGMENT

STRING1 DB 'Move the cursor backward' STRING2 DB 'Move the cursor backward' MESS1 DB 'Match.',13,10,'$' MESS2 DB 'No Match.',13,10,'$' DATA ENDS

STACK SEGMENT STACK DB 40 DUP (?) STACK ENDS

PROGNAM SEGMENT

ASSUME CS:PROGNAM,DS:DATA,ES:DATA,SS:STACK MAIN PROC FAR START: XOR AX,AX PUSH AX PUSH DS MOV AX,DATA MOV DS,AX MOV ES,AX MOV AX,STACK MOV SS,AX

4

LEA SI,STRING1 LEA DI,STRING2 CLD

MOV CX,25 REPZ CMPSB JZ MATCH LEA DX,MESS2 JMP SHORT DISP MATCH: LEA DX,MESS1 DISP: MOV AH,09h INT 21H RET MAIN ENDP PROGNAM ENDS

END START

图1-1

2.在DOS环境下,用汇编程序MASM对源文件汇编产生目标文件OBJ,命令格式如下: D:\\ASM\\MASM 源程序文件名.asm

如汇编程序指示出错则需要重新调用编辑程序修改错误,直至汇编通过为止。 3. 用连接程序link产生执行文件exe D:\\ASM\\LINK 源程序文件名.obj 4.执行程序

可直接从DOS执行程序如下: D:\\ASM\\源程序文件名 Match

此时可看到程序的运行结果。为了调试程序的另一部分,可重新进行编辑程序修改两个字符串的内容,使它们互不相同,如修改后的数据段为

DATA SEGMENT

STRINT1 DB ‘Move the cursor backward.’ STRINT2 DB ‘Move the cursor fordward.’ Mess1 DB ‘Match.’,13,10,’$’ Mess2 DB ‘No Match.’,13,10,’$’ DATA ENDS

然后,重新汇编、连接、执行,结果为: No match!

至此,程序已调试完毕,运行结果正确。 5.用DEBUG调试程序

另一种调试程序的方法是使用DEBUG程序。调用格式如下: D:\\asm\\DEBUG 源程序文件名.exe

此时,DEBUG已将执行程序装入内存,可直接用g命令运行程序。 -g Match.

5

为了调试程序的另一部分,可在DEBUG中修改字符串内容。可先用u命令显示程序,以便了解指令地址。显示结果如图1-2所示

-u

14F0:0000 1E PUSH DS 14F0:0001 33C0 XOR AX,AX 14F0:0003 50 PUSH AX

14F0:0004 B8E814 MOV AX,14E8 14F0:0007 8ED8 MOV DS,AX 14F0:0009 8EC0 MOV ES,AX 14F0:000B B8ED14 MOV AX,14ED 14F0:000E 8ED0 MOV SS,AX 14F0:0010 8D360000 LEA SI,[0000] 14F0:0014 8D3E1800 LEA DI,[0018] 14F0:0018 FC CLD

14F0:0019 B91900 MOV CX,0019 14F0:001C F3 REPZ 14F0:001D A6 CMPSB

14F0:001E 7406 JZ 0026 -u

14F0:0020 8D163900 LEA DX,[0039] 14F0:0024 EB04 JMP 002A

14F0:0026 8D163000 LEA DX,[0030] 14F0:002A B409 MOV AH,09 14F0:002C CD21 INT 21 14F0:002E CB RETF 图1-2

将断点设置在程序的主要部分运行以前,并查看数据区的内容。如图1-3所示。 -g0b

AX=14E8 BX=0000 CX=00AF DX=0000 SP=FFFC BP=0000 SI=0000 DI=0000 DS=14E8 ES=14E8 SS=14E8 CS=14F0 IP=000B NV UP EI PL ZR NA PE NC 14F0:000B B8ED14 MOV AX,14ED -d0

14E8:0000 4D 6F 76 65 20 74 68 65-20 63 75 72 73 6F 72 20 Move the cursor 14E8:0010 62 61 63 6B 77 61 72 64-2E 4D 6F 76 65 20 74 68 backward.Move th 14E8:0020 65 20 63 75 72 73 6F 72-20 62 61 63 6B 77 61 72 e cursor backwar 14E8:0030 64 2E 4D 61 74 63 68 2E-0D 0A 24 4E 6F 20 4D 61 d.Match...$No Ma 14E8:0040 74 63 68 2E 0D 0A 24 00-00 00 00 00 00 00 00 00 tch...$......... 14E8:0050 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 14E8:0060 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 14E8:0070 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 图1-3

用e命令修改数据区的字符串,操作如下: -e29

14E8:0029 62.66 61.6f 63.72 6B.77 77.61 61.72 72.64

6

14E8:0030 64.2e 2E.20 再次用d命令查看修改结果。 -d0

14E8:0000 4D 6F 76 65 20 74 68 65-20 63 75 72 73 6F 72 20 Move the cursor 14E8:0010 62 61 63 6B 77 61 72 64-2E 4D 6F 76 65 20 74 68 backward.Move th 14E8:0020 65 20 63 75 72 73 6F 72-20 66 6F 72 77 61 72 64 e cursor forward 14E8:0030 2E 20 4D 61 74 63 68 2E-0D 0A 24 4E 6F 20 4D 61 . Match...$No Ma 14E8:0040 74 63 68 2E 0D 0A 24 00-00 00 00 00 00 00 00 00 tch...$......... 14E8:0050 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 14E8:0060 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 14E8:0070 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 图1-4 用g命令运行程序,结果为: -g

No Match....

用q命令退出debug. -q

至此,程序已调试完毕。为了进一步说明debug命令的使用方法,我们再次重复上述程序的调试过程,只是使用e、a、f来修改数据区的内容而已。必须注意,由于在用debug调试程序时,只能修改当时有关的内存单元内容,因此重新用debug装入执行程序时,仍是原来在磁盘文件中的内容。操作如下:

命令提示符:debug a1.exe -g0b

AX=14E8 BX=0000 CX=00AF DX=0000 SP=FFFC BP=0000 SI=0000 DI=0000 DS=14E8 ES=14E8 SS=14E8 CS=14F0 IP=000B NV UP EI PL ZR NA PE NC 14F0:000B B8ED14 MOV AX,14ED -d0

14E8:0000 4D 6F 76 65 20 74 68 65-20 63 75 72 73 6F 72 20 Move the cursor 14E8:0010 62 61 63 6B 77 61 72 64-2E 4D 6F 76 65 20 74 68 backward.Move th 14E8:0020 65 20 63 75 72 73 6F 72-20 62 61 63 6B 77 61 72 e cursor backwar 14E8:0030 64 2E 4D 61 74 63 68 2E-0D 0A 24 4E 6F 20 4D 61 d.Match...$No Ma 14E8:0040 74 63 68 2E 0D 0A 24 00-00 00 00 00 00 00 00 00 tch...$......... 14E8:0050 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 14E8:0060 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 14E8:0070 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ -e29 'forward.'20 -d0

14E8:0000 4D 6F 76 65 20 74 68 65-20 63 75 72 73 6F 72 20 Move the cursor 14E8:0010 62 61 63 6B 77 61 72 64-2E 4D 6F 76 65 20 74 68 backward.Move th 14E8:0020 65 20 63 75 72 73 6F 72-20 66 6F 72 77 61 72 64 e cursor forward 14E8:0030 2E 20 4D 61 74 63 68 2E-0D 0A 24 4E 6F 20 4D 61 . Match...$No Ma 14E8:0040 74 63 68 2E 0D 0A 24 00-00 00 00 00 00 00 00 00 tch...$......... 14E8:0050 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 14E8:0060 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

7

14E8:0070 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 图1-5

可见这种e命令方式避免使用ASCII码进入,对用户是比较方便的。其中最后一个20是空格争的ASCII码,以补足原来的字节数。

也可使用a命令把数据区恢复原状,具体如下: -d0

14E8:0000 4D 6F 76 65 20 74 68 65-20 63 75 72 73 6F 72 20 Move the cursor 14E8:0010 62 61 63 6B 77 61 72 64-2E 4D 6F 76 65 20 74 68 backward.Move th 14E8:0020 65 20 63 75 72 73 6F 72-20 66 6F 72 77 61 72 64 e cursor forward 14E8:0030 2E 20 4D 61 74 63 68 2E-0D 0A 24 4E 6F 20 4D 61 . Match...$No Ma 14E8:0040 74 63 68 2E 0D 0A 24 00-00 00 00 00 00 00 00 00 tch...$......... 14E8:0050 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 14E8:0060 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 14E8:0070 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ -a14e8:29

14E8:0029 db 'backward.' 14E8:0032 -d0

14E8:0000 4D 6F 76 65 20 74 68 65-20 63 75 72 73 6F 72 20 Move the cursor 14E8:0010 62 61 63 6B 77 61 72 64-2E 4D 6F 76 65 20 74 68 backward.Move th 14E8:0020 65 20 63 75 72 73 6F 72-20 62 61 63 6B 77 61 72 e cursor backwar 14E8:0030 64 2E 4D 61 74 63 68 2E-0D 0A 24 4E 6F 20 4D 61 d.Match...$No Ma 14E8:0040 74 63 68 2E 0D 0A 24 00-00 00 00 00 00 00 00 00 tch...$......... 14E8:0050 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 14E8:0060 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 14E8:0070 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 图1-6

由于a是汇编命令,因此信息是用汇编格式进入的。如果修改的是程序中的语句,方法也是相同的,下面我们还会看到这类的操作。

为了进一步说明程序的调试过程,现假设程序编制错误:在源文件中把 jz match 改为 jnz match。该程序经过汇编、连接后,进入debug调试如下:

-g

No match!

结果是错误的(因为源文件中两个字符串是相同的)。为检查程序的错误,将断点设在比较串之前。

-g19

AX=14DF BX=0000 CX=0019 DX=0000 SP=FFFC BP=0000 SI=0000 DI=0019 DS=14DF ES=14DF SS=14DF CS=14E4 IP=0019 NV UP EI PL NZ NA PO NC 14E4:0019 A6 CMPSB

用t命令再执行一条指令以观察ZF标志的状况。 -t

AX=14DF BX=0000 CX=0019 DX=0000 SP=FFFC BP=0000 SI=0001 DI=001A DS=14DF ES=14DF SS=14DF CS=14E4 IP=001A NV UP EI PL ZR NA PE NC 14E4:001A 7506 JNZ 0022

8

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库微机实验作业(2)在线全文阅读。

微机实验作业(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/478318.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: