收藏 分销(赏)

实验一汇编语言运行环境及方法.doc

上传人:pc****0 文档编号:7783199 上传时间:2025-01-16 格式:DOC 页数:10 大小:121.50KB 下载积分:10 金币
下载 相关 举报
实验一汇编语言运行环境及方法.doc_第1页
第1页 / 共10页
实验一汇编语言运行环境及方法.doc_第2页
第2页 / 共10页


点击查看更多>>
资源描述
实验一 汇编语言运行环境及方法、简单程序设计   一、 实验目的 1.         熟悉汇编语言运行环境和方法 2.         了解如何使用汇编语言编制程序 3.         熟悉DEBUG有关命令的使用方法 4.         利用DEBUG掌握有关指令的功能 5.         利用DEBUG运行简单的程序段 二、 实验内容 1.         学会输入、编辑汇编语言程序 2.         学会对汇编语言程序进行汇编、连接和运行 3.         进入和退出DEBUG程序 4.         学会DEBUG中的D命令、E命令、R命令、T命令、A命令、G命令等的使用。对于U命令、N命令、W命令等,也应试一下。 三、 实验准备 1.         仔细阅读有关汇编语言环境的内容,事先准备好使用的例子。 2.         准备好源程序清单、设计好调试步骤、测试方法、对运行结果的分析。 3.         编写一个程序:比较2个字符串所含的字符是否相同。若相同则显示’Match.’,否则显示’No match!’;(1)仔细阅读有关DEBUG命令的内容,对有关命令,都要事先准备好使用的例子。 四、 实验步骤 1.         在DOS提示符下,进入MASM目录。 2.         在MASM目录下启动EDIT编辑程序,输入源程序,并对其进行汇编、连接和运行。 1) 调用edit输入、编辑源程序并保存在指定的目录中;例: edit abc.asm 2) 用汇编程序masm对源程序汇编产生目标文件obj。例: masm abc 不断修改错误,直至汇编通过为止。 3) 用连接程序link产生执行文件exe.例:link abc 4) 执行程序        可直接从DOS执行程序,即在DOS环境中,输入文件名即可。 3.         详细记录每一步所用的命令,以及查看结果的方法和具体结果。 五、 实验方法 有关汇编语言程序的上机过程请读者参阅清华大学出版社1991年出版的《IBMPC 汇编语言程序设计》的4.4节。在这里,我们举例简要说明该过程以及程序的调试方法。 例1.1  比较字符串sample     试编写一程序:比较两个字符串string1和string2所含的字符是否相同。若相同则显 示'Match',否则,显示'Nomatch'。     我们可以用串比较指令来完成程序所要求的功能。上机过程如下: 1.     调用字处理程序wordstar建立asm文件     当然也可以用其它编辑程序如pced或行编辑程序edlin来建立源文件。        C>WS     使用非文本文件方式(n命令)建立以sample.asm为文件名的源文件如图1.1所示。然后用CTRL K X命令将文件存入磁盘,并使系统返回DOS。     ;PROGRAM TITLE GOES HERE--Compare string     ;******************************************************************     datarea segment    ;define data segment     stringl    db    'Move the cursor backward.'     string2    db    'Move the cursor backward.'     ;     mess1    db    'Match.',13,10,'$'     mess2    db    'No match!',13,10,'$'     datarea ends     ;*******************************************************************     prognam segment    ;define code segment     ;-------------------------------------------------------------------------------------------------     main    proc    far     assume cs:prognam,ds:datarea,es:datarea     start:     ;starting execution address     ;set up  stack for return     push    ds    ;save old data segment     sub     ax,ax    ;put zero in AX     push    ax    ;save it on stack     ;set DS register to current data segment     mov     ax,datarea    ;datarea segment addr     mov     ds,ax      ;into DS register     mov     es,ax      ;into ES register     ;MAIN PART OF PROGRAM GOES HERE     lea     si,stringl     lea     di,string2     cld     mov     cx,25     repz    cmpsb     jz      match     lea     dx,mess2     jmp     short disp     match:     lea     dx,mess1     disp:             mov ah,09             int    21h     ret    ;return to DOS     main    endp    ;end of main part of program     ;------------------------------------------------------------------------------------------------     prognam ends    ;end of code segment     ;****************************************************************     end    start    ;end assembly                         图1.1例1的原文件sample.asm 2.     用汇编程序masm(或asm)对源文件汇编产生目标文件obj     C:\>masm sample;                                                                Microsoft (R) Macro Assembler Version 5.00                                      Copyright (C) Microsoft Corp 1981-1985, 1987.  All rights reserved.                                                                                                                                                                               51520 + 423584 Bytes symbol space free                                                                                                                              0 Warning Errors                                                                0 Severe  Errors  3.     用连接程序link产生执行文件exe C:\>link sample;                                                                                                                                                Microsoft (R) Overlay Linker  Version 3.60                                       Copyright (C) Microsoft Corp 1983-1987.  All rights reserved.                                                                                                   LINK : warning L4021: no stack segment                                          4.     执行程序 C:\>sample                                                                      Match.                                                                          终端上已显示出程序的运行结果。为了调试程序的另一部分,可重新进编辑程序修改两个字符串的内容,使它们互不相同。如修改后的数据区为: ;******************************************************************     datarea segment    ;define data segment     stringl    db     'Move the cursor backward.'     string2    db    'Move the cursor backward.'     ;     mess1    db    'Match.',13,10,'$'     mess2    db    'No match!',13,10,'$'     datarea ends ;******************************************************************** 然后,重新汇编、连接、执行,结果为: C>sample No mateh! 至此,程序已调试完毕,运行结果正确。 另一种调试程序的方法是使用debug程序。可调用如下: C>debug sample.exe 此时,debug已将执行程序装入内存,可直接用g命令运行程序。 -g Match. Program terminated normally 为调试程序的另一部分,可在debug中修改字符串内容。可先用u命令显示程,以便了 解指令地址。显示结果如图1.2所示。 -u                                                                               0D36:0000 1E            PUSH    DS                                              0D36:0001 2BC0          SUB     AX,AX                                           0D36:0003 50            PUSH    AX                                               0D36:0004 B8310D        MOV     AX,0D31                                         0D36:0007 8ED8          MOV     DS,AX                                           0D36:0009 8EC0          MOV     ES,AX                                            0D36:000B 8D360000      LEA     SI,[0000]                                       0D36:000F 8D3E1900      LEA     DI,[0019]                                       0D36:0013 FC            CLD                                                      0D36:0014 B91900        MOV     CX,0019                                         0D36:0017 F3            REPZ                                                    0D36:0018 A6            CMPSB                                                    0D36:0019 7406          JZ      0021                                            0D36:001B 8D163B00      LEA     DX,[003B]                                       0D36:001F EB04          JMP     0025                                            -u                                                                               0D36:0021 8D163200      LEA     DX,[0032]                                       0D36:0025 B409          MOV     AH,09                                           0D36:0027 CD21          INT     21                                              0D36:0029 CB            RETF                                                    0D36:002A 8A4608        MOV     AL,[BP+08]                                      0D36:002D 98            CBW                                                      0D36:002E 50            PUSH    AX                                              0D36:002F 8B4604        MOV     AX,[BP+04]                                      0D36:0032 03C6          ADD     AX,SI                                            0D36:0034 50            PUSH    AX                                              0D36:0035 E858FF        CALL    FF90                                            0D36:0038 83C406        ADD     SP,+06                                           0D36:003B 8BF8          MOV     DI,AX                                           0D36:003D 83FFFF        CMP     DI,-01                                          0D36:0040 750C          JNZ     004E    图1.2例1.1用debug调试时,u命令的显示情况 将端点设置在程序的主要部分以前。                                       -g0b                                                                                                                                                            AX=0D31  BX=0000  CX=007A  DX=0000  SP=FFFC  BP=0000  SI=0000  DI=0000          DS=0D31  ES=0D31  SS=0D31  CS=0D36  IP=000B   NV UP EI PL ZR NA PE NC           0D36:000B 8D360000          LEA     SI,[0000]                   DS:0000=6F4D 根据其中指示的ds寄存器内容查看数据段的情况如下: -d0                                                                             0D31:0000  4D 6F 76 65 20 74 68 65-20 63 75 72 73 6F 72 20   Move the cursor    0D31:0010  62 61 63 6B 77 61 72 64-2E 4D 6F 76 65 20 74 68   backward.Move th   0D31:0020  65 20 63 75 72 73 6F 72-20 62 61 63 6B 77 61 72   e cursor backwar   0D31:0030  64 2E 4D 61 74 63 68 2E-0D 0A 24 4E 6F 20 6D 61   d.Match...$No ma   0D31:0040  74 63 68 21 0D 0A 24 00-00 00 00 00 00 00 00 00   tch!..$.........   0D31:0050  1E 2B C0 50 B8 31 0D 8E-D8 8E C0 8D 36 00 00 8D   .+.P.1......6...   0D31:0060  3E 19 00 FC B9 19 00 F3-A6 74 06 8D 16 3B 00 EB   >........t...;..   0D31:0070  04 8D 16 32 00 B4 09 CD-21 CB 8A 46 08 98 50 8B   ...2....!..F..P.   可用e命令修改数据区的字符串,操作如下: -e29                                                                             0D31:0029  62.66   61.6f   63.72   6B.77   77.61   61.72   72.64                0D31:0030  64.2e   2E.20                                                        再次用d命令查看修改结果。 -d0                                                                              0D31:0000  4D 6F 76 65 20 74 68 65-20 63 75 72 73 6F 72 20   Move the cursor    0D31:0010  62 61 63 6B 77 61 72 64-2E 4D 6F 76 65 20 74 68   backward.Move th   0D31:0020  65 20 63 75 72 73 6F 72-20 66 6F 72 77 61 72 64   e cursor forward   0D31:0030  2E 20 4D 61 74 63 68 2E-0D 0A 24 4E 6F 20 6D 61   . Match...$No ma   0D31:0040  74 63 68 21 0D 0A 24 00-00 00 00 00 00 00 00 00   tch!..$.........   0D31:0050  1E 2B C0 50 B8 31 0D 8E-D8 8E C0 8D 36 00 00 8D   .+.P.1......6...   0D31:0060  3E 19 00 FC B9 19 00 F3-A6 74 06 8D 16 3B 00 EB   >........t...;..   0D31:0070  04 8D 16 32 00 B4 09 CD-21 CB 8A 46 08 98 50 8B   ...2....!..F..P.   用g命令运行程序,结果为: -g No match!   Program terminated normally 用q命令退出debug。 -q 至此,程序已调试完毕。为了进一步数名debug命令的使用方法,我们再次重复上述程序的调试过程,只是使用e、a和f命令来修改数据区的内容而已。必须注意,由于在用debug调试程序时,只能修改当时有关的内存单元内容,因此重新用debug装入程序时,仍是原来在磁盘中的内容。操作如下: C:\>debug sample.exe                                                            -g0b                                                                                                                                                             AX=0D31  BX=0000  CX=007A  DX=0000  SP=FFFC  BP=0000  SI=0000  DI=0000          DS=0D31  ES=0D31  SS=0D31  CS=0D36  IP=000B   NV UP EI PL ZR NA PE NC           0D36:000B 8D360000      LEA     SI,[0000]                          DS:0000=6F4D -d0                                                                             0D31:0000  4D 6F 76 65 20 74 68 65-20 63 75 72 73 6F 72 20   Move the cursor    0D31:0010  62 61 63 6B 77 61 72 64-2E 4D 6F 76 65 20 74 68   backward.Move th   0D31:0020  65 20 63 75 72 73 6F 72-20 62 61 63 6B 77 61 72   e cursor backwar   0D31:0030  64 2E 4D 61 74 63 68 2E-0D 0A 24 4E 6F 20 6D 61   d.Match...$No ma   0D31:0040  74 63 68 21 0D 0A 24 00-00 00 00 00 00 00 00 00   tch!..$.........   0D31:0050  1E 2B C0 50 B8 31 0D 8E-D8 8E C0 8D 36 00 00 8D   .+.P.1......6...   0D31:0060  3E 19 00 FC B9 19 00 F3-A6 74 06 8D 16 3B 00 EB   >........t...;..   0D31:0070  04 8D 16 32 00 B4 09 CD-21 CB 46 FA 8B 5E FC C1   ...2....!.F..^..   -e29 'forward.'20                                                               -d0                                                                             0D31:0000  4D 6F 76 65 20 74 68 65-20 63 75 72 73 6F 72 20   Move the cursor    0D31:0010  62 61 63 6B 77 61 72 64-2E 4D 6F 76 65 20 74 68   backward.Move th   0D31:0020  65 20 63 75 72 73 6F 72-20 66 6F 72 77 61 72 64   e cursor forward   0D31:0030  2E 20 4D 61 74 63 68 2E-0D 0A 24 4E 6F 20 6D 61   . Match...$No ma   0D31:0040  74 63 68 21 0D 0A 24 00-00 00 00 00 00 00 00 00   tch!..$.........   0D31:0050  1E 2B C0 50 B8 31 0D 8E-D8 8E C0 8D 36 00 00 8D   .+.P.1......6...   0D31:0060  3E 19 00 FC B9 19 00 F3-A6 74 06 8D 16 3B 00 EB   >........t...;..   0D31:0070  04 8D 16 32 00 B4 09 CD-21 CB 46 FA 8B 5E FC C1   ...2....!.F..^..   -g                                                                              No match!                                                                                                                                                        Program terminated normally                                                     可见这种e命令的方式避免使用ASCII码进入,对用户是比较方便的。其中最后一个20是空格键的ASCII码,以补足原来的内容恢复原状,具体如下: -a0d31:29                                                                       0D31:0029 db 'backward.'                                                        0D31:0032                                                                        -d0                                                                             0D31:0000  4D 6F 76 65 20 74 68 65-20 63 75 72 73 6F 72 20   Move the cursor    0D31:0010  62 61 63 6B 77 61 72 64-2E 4D 6F 76 65 20 74 68   backward.Move th   0D31:0020  65 20 63 75 72 73 6F 72-20 62 61 63 6B 77 61 72   e cursor backwar   0D31:0030  64 2E 4D 61 74 63 68 2E-0D 0A 24 4E 6F 20 6D 61   d.Match...$No ma   0D31:0040  74 63 68 21 0D 0A 24 00-00 00 00 00 00 00 00 00   tch!..$.........   0D31:0050  1E 2B C0 50 B8 31 0D 8E-D8 8E C0 8D 36 00 00 8D   .+.P.1......6...   0D31:0060  3E 19 00 FC B9 19 00 F3-A6 74 06 8D 16 3B 00 EB   >........t...;..   0D31:0070  04 8D 16 32 00 B4 09 CD-21 CB 56 FA 89 7E EE 8B   ...2....!.V..~..   -g Match. 由于a命令是汇编命令,因此信息是用汇编格式进入的。如果修改的是程序中的语句,方法也是相同的,下面我们还会看到这类的操作。现在再看一下用f命令修改数据区的方法。 C:\>debug sample.exe                                                            -g0b                                                                                                                                                             AX=0D31  BX=0000  CX=007A  DX=0000  SP=FFFC  BP=0000  SI=0000  DI=0000          DS=0D31  ES=0D31  SS=0D31  CS=0D36  IP=000B   NV UP EI PL ZR NA PE NC           0D36:000B 8D360000      LEA     SI,[0000]                          DS:0000=6F4D -d0                                                                             0D31:0000  4D 6F 76 65 20 74 68 65-20 63 75 72 73 6F 72 20   Move the cursor    0D31:0010  62 61 63 6B 77 61 72 64-2E 4D 6F 76 65 20 74 68   backward.Move th   0D31:0020  65 20 63 75 72 73 6F 72-20 62 61 63 6B 77 61 72   e cursor backwar   0D31:0030  64 2E 4D 61 74 63 68 2E-0D 0A 24 4E 6F 20 6D 61   d.Match...$No ma   0D31:0040  74 63 68 21 0D 0A 24 00-00 00 00 00 00 00 00 00   tch!..$.........    0D31:0050  1E 2B C0 50 B8 31 0D 8E-D8 8E C0 8D 36 00 00 8D   .+.P.1......6...   0D31:0060  3E 19 00 FC B9 19 00 F3-A6 74 06 8D 16 3B 00 EB   >........t...;..   0D31:0070  04 8D 16 32 00 B4 09 CD-21 CB 56 FA 89 7E EE 8B   ...2....!.V..~..   -f29 l9 'forward.'20                                                            -g    
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 百科休闲 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服