您好,欢迎来到保捱科技网。
搜索
您的当前位置:首页汇编语言实验指导书

汇编语言实验指导书

来源:保捱科技网
汇编语⾔实验指导书

《汇编语⾔》实验指导书/实验报告2011年4⽉编制专业:班号:学号:姓名:哈尔滨华德学院计算机应⽤技术系

实验⼀DEBUG调试程序和汇编程序的上机操作A DEBUG调试程序的使⽤⼀、实验⽬的

学会在DOS环境下使⽤DEBUG调试程序⼆、DEBUG调试程序1.DEBUG调试程序的启动在运⾏菜单下单击DEBUG选项。2.退出DEBUG—Q↙(回车)

3.DEBUG的命令清单(1)显⽰内存单元内容的命令—D

格式: D 地址显⽰从指定地址开始的128个字节的内容。D 范围显⽰指定范围的内存内容。D 从上次D命令结束位置接着显⽰。

例1:从数据段偏移地址FF40H单元开始,显⽰40H个字节的内容。D FF40 L 40↙(回车)

(2)修改内存单元内容的命令—E

格式: E 地址表⽤表中内容替代指定地址开始的内存块内容。E 地址显⽰指定地址的1个字节的内容,输⼊新值按空格键进⼊到下⼀字节位置;按“—”键返回到上⼀字节;按回车键则结束E命令。(3)填充命令—F

格式: F 范围表⽤表中内容反复赋值以填充指定范围的内存块。

(4)显⽰修改寄存器—R

格式:R 显⽰并可修改指定寄存器的内容。R 寄存器名显⽰并可修改标志寄存器的内容。RF 显⽰并可修改标志寄存器的内容。(5)汇编命令—A

格式: A 地址从指定地址开始汇编,结果写⼊内存。A 若不指定地址则从上次A命令结束位置开始汇编。⾸次则从CS:100H开始汇编。

注:汇编语句中不能使⽤名字。A命令只识别指令和DB,DW伪指令。(6)反汇编命令—U

格式:U [地址] 从指定地址或上次U命令结束位置开始把内存16字节(40列显⽰格式)或32字节(80列显⽰格式)内容反汇编。U 范围把指定地址范围的内存块全部进⾏反汇编。(7)跟踪命令—T

格式:T [=地址] 从指定地址(缺省为当前CS:IP地址)执⾏⼀条指令,并显⽰寄存器内容,标志位的状态和下⼀条指令。T [=地址] 条数单步⽅式指定⾏指定条数的各条指令。(8)执⾏命令—G

格式:G =地址从指定地址开始执⾏直⾄程序结束。G 从当前CS:IP位置开始执⾏,直⾄程序结束。

G 地址断点地址从指定或当前地址开始执⾏,遇到断点则停⽌,并显⽰寄存器和标志的值以及断点处指令。(9)命名命令—N

格式:N ⽂件名为L命令和w命令指定要操作和⽂件。N ⽂件参数为要执⾏的⽂件指定参数。例:N file1.exeL

N file2.dat file3.datG

上述第⼀个N命令为随后的L命令指定⽂件名,L命令将⽂件file1.exe装⼊内存,第⼆个命令为执⾏file.exe⽂件指定参数,最后G命令运⾏file1.exe⽂件。(10)装⼊命令—L格式:L [地址]

把N命令给出的盘⽂件装⼊到以指定地址或CS:100H开始的内存区中。L 地址盘号起始扇区扇数

把指定磁盘(盘号0—A驱,盘号1—B驱)的指定数⽬的逻辑扇区装⼊到指定地区开始的内存区。例2:L 04BA:0100 2 0F 6D

该L命令是把C盘(盘号2)从第15(即0F)逻辑扇区开始的,6DH个逻辑扇区内容,装⼊到内存中以04BA:0100H开始区域。(11)写命令—W

格式:W地址盘号其始扇区扇数

把指定地址开始的内存块写⼊指定磁盘的⼏个逻辑扇区中,长度由扇区容量,扇数确定。W地址

把指定地址(缺省为CS:100H)开始内存快(块字节长度由BX:CX寄存器给出)写⼊磁盘。

注:W命令不允许写具有EXE和HEX展名⽂件。

例3:把从CS:100开始的连续3040H个字节的内存块写⼊到⽂件MYFILE中,在DEBUG启动后,连续进⾏如下操作:①—R CX(回车)显⽰CX 当前值

键⼊:3040 (回车)(将3040送⼊CX)②—R BX (回车)显⽰BX 当前值

键⼊: :0000(回车)(将0000H送⼊BX)③—N MYFILE(回车)(给待写⽂件命令)④—W (回车)(12)⽐较指令—C格式: C 范围地址

⽐较两个内存块的内容,范围⽤第⼀个起始地址和块长或起始地址、结束地址说明,地址是第⼆块的起始地址。(13)16进制运算指令—H

格式:H 值1 值2 求值l,值2的和与差(全为16进制数)。(14)写端⼝命—O

格式:O 端⼝地址字节把⼀个字节数据由指定的端⼝输出。(15)读端⼝命令—I

格式:I 端⼝地址从指定端⼝输⼊⼀个字节并显⽰。(16)传送命令—M

格式:M 范围地址把指定范围的内容传送到指定的地址开始的内存块中。(17)检索命令—S

格式:S 范围字符串在指定范围内检索某个字符串。

(18)退出命令⼀Q

格式:Q 结束DEBUG的运⾏,不保存内存中的被调试⽂件(若要保存,先⽤W 指令),返回DOS。4.使⽤DEBUG命令的注意事项

(1)DEBUG命令只采⽤16进制数;故不要加“H”后缀。

(2)标志寄存器的8个标志位的值采⽤符号标志;分别表⽰标志的值1和0。溢出标志OF:OV(溢出),NV(不溢出)⽅向标志DF:DN(减量),UP(增量)中断允许标志IF:EI(允许),DI(禁⽌)符号标志SF:NG(负),PL(正)零标志ZF:ZR(零),NZ(⾮零)进位标志CF:CY(有),NC(⽆)奇偶标志PF:PE(偶),PO(奇)辅助进位标志AF:AC(有),NA(⽆)

(3)在“—”提⽰符下键⼊命令关键字符,若命令带有参数则应在关键字符后紧跟着输⼊第⼀个参数,不要随意加空格符,因为空格符是参数之间的间隔符。

(4)命令结尾应按回车键,此命令才⽣效,除e命令外,⼀个命令执⾏完重新给出“—”

DEBUG提⽰符。使⽤A命令时,每输⼊⼀条指令就按⼀次回车键,屏幕⽴即显⽰下⼀个地址,若要结束A命令,则不要输⼊指令只按回车键。

(5)命令中的地址参数以段:偏移量给出,若只给出偏移量,则使⽤的缺省段A,U,G,T,L,W诸命令的缺省段是CS,C,D,E,F,M,S诸命令的缺省段是DS。

(6)使⽤W写命令之前要记住检查或修改BX,CX积存器的值使其等于或⼤于欲写⼊⽂件的字节长度值。(7)DEBUG承认Ctrl+Break(中⽌)、Ctrl+Nomlock(暂停显⽰)等DOS控制键功能。三、实验内容

思考:如AX=0012H,BX=0034H,要求把它们装配在⼀起形成AX=1234H。利⽤课堂上讲过的算术逻辑指令⾃⼰编程序B.汇编语⾔程序上机操作⼀.实验⽬的

1.学会汇编语⾔程序上机操作,包括汇编语⾔程序的编辑、汇编、链接、调试和运⾏;2.学会常⽤的伪指令使⽤,掌握汇编语⾔的分段结构。⼆.汇编语⾔程序的上机过程。

1.使⽤HJASM编辑软件编辑汇编语⾔⽂本,得到扩展名为ASM的汇编语⾔程序的源⽂件2.对汇编语⾔源程序进⾏汇编,得到扩展名为.OBJ的⽬标码⽂件3.对⽬标码⽂件进⾏链接,得到扩展名为EXE的地址浮动的可执⾏⽂件

4.使⽤DEBUG命令加载汇编语⾔程序(EXE)到内存,然后在DEBUG环境下调试汇编语⾔程序三.实验内容

1.建⽴汇编语⾔源程序⽂件(ASM)

例:把40个字母a的字符串从源缓冲区传送到⽬的缓冲区

2.在DEBUG环境下运⾏程序

⼀般来说,对于我们⾃⼰设计的程序,在DEBUG下加载,然后⽤DEBUG命令控制程序的运⾏。便于发现程序的错误,加以修改源程序,重新汇编,链接,然后再运⾏。如此反复多次,最终就可完成程序的调试。1.使⽤U命令—U18F4:

0000 lE PUSH DS000l 2BC0 SUB AX,AX0003 50 PUSH AX

0004 B8F618 MOV AX,18F60007 8ED8 MOV DS,AX0009 B8F918 MOV AX,18F9000C 8EC0 MOV ES,AX000E 8D360000 LEA SI[0000]0012 8D3EOO00 LEA DI[0000]0016 FC CLD

00l7 F92800 MOV CX,0028代码段段地址偏移地址机器代码汇编18F4 00lA F3 REPZ00lB A4 MOVSB

00lC CB PETF↗

断点,程序执⾏到此就结束根据反汇编清单中,得到CS:18F4DS:18F6ES:18F9断点:00le2.使⽤D命令—D 18F6:0↙61...... 61...... 61 (61)61...... 61...... 61 (61)61...... 61 ——共有40个‘a’

注:因为(DS)=18F6,所以上条指令是查看DS段的内容。⼀D 18F9:0↙⽆40个‘a’

注:因为(ES)=18F9,所以上条指令是查看ES段的内容。

使⽤D命令观察数据段内容有40个‘a’,观察附加段内容⽆40个‘a’3.使⽤G命令—G1C↙

因为IC偏移量是程序搬运结果的位置,所以运⾏程序完成40个‘a’搬运到附加段中,此时附加段有40个‘a’,同时数据段40个‘a’也存在。

4.程序运⾏之后再看内存变化—D18F6:0↙61...... 61......61, 61 (61)61...... 61......61, 61 (61)61 (61)

—D18F9:0↙61...... 61......61, 61 (61)61...... 61......61, 61 (61)61 (61)5.退出Q命令—Q 退出DEBUG

四、⾃⼰设计⼀个简单程序,上机调试。实验⼆分⽀程序设计和DOS调⽤⼀、实验⽬的

掌握汇编语⾔中分⽀程序的设计⽅法和DOS调⽤⼆、实验内容

1、设变量X为带符号整数,要求:1)如果X的值⼤于零,变量Y赋值为l。2)如果X的值等于零,变量Y赋值为0。

3)如果X的值⼩于零,变量Y赋值为-1。2、完成下述⼯作

注:完成下⾯的⼯作需要⼿动修改源⽂件中X的初始值,以满⾜不同条件1)使⽤U命令,根据反汇编的程序清单找到DS的段地址2)使⽤D命令,观察到数据段中X单元和Y单元的值3)使⽤G命令运⾏程序

4) 使⽤D命令,观察到数据段中X单元和Y单元的值;反复使⽤2),3),4)步进⾏观察。

3、修改程序,显⽰变量Y的值。三、程序清单

按照上述实验过程同学⾃⼰设计程序。要求画出流程图,写出程序清单,调试步骤及结果。1)⽐较两个⽆符号数的⼤⼩(量个数放在内存S3的连续两个单元中),将⼤数存⼊MAX单元中。

2)试编⼀程序,求三个带符号数据中的最⼤值,并将最⼤值存⼊MAX单元中,设三个带符号数分别在三个变量X,Y,Z中存储。

3)根据MODE单元中编号0-7分别转向L0-L7标号处,执⾏L0-L7处分别完成显⽰‘0-7’字符,即当MODE=0时,转向L0标号,完成显⽰‘0’,当MODE=7时,转向L7标号,完成显⽰‘7’。

4)根据输⼊值(0-4)的不同,执⾏不同的操作,⽤转移标法编写程序。实验三循环程序设计和DOS调⽤⼀实验⽬的

熟悉循环程序的设计⽅法⼆实验内容

在以BUF为⾸地址的字节单元中存放CNT个⽆符号数,找出其中最⼤数,送⼊MAX字节单元中:1)特以BUF为⾸地址的数据区中存有⼋个⽆符号数,分别为l、2、3、100、23、78、90、134。2) 数据个数求法:数据末地址减去⾸地址,⽤符号CNT表⽰,即CNT=末地址-⾸地址。3) 放最⼤数单元⽤MAX符号地址表⽰。

4) 使⽤U命令,得到反汇编清单,找到DS段地址。5) 使⽤D命令,观察数据内容。6) 使⽤G命令,运⾏程序。7) 使⽤D命令,看数据段数据变化。8) 程序运⾏结果把最⼤数送⼊MAX单元。三、程序清单(⾃⼰编写)

四、程序设计(画出流程图、写出程序清单及调试步骤和结果)

1.统计数据块中正数和负数个数(设有7个数,分别为-32,25,36,-18,-,0,-3)

2.统计学⽣成绩,设有10个学⽣的成绩分别为56,69,84,82,73,88,,63,100和80分,试编写程序分别统计低于60分,60-69分,70-79分,80-分,90-99分以及100分的⼈数,并存放到S5,S6,S7,S8,S9以及S10单元中。3.在字符串中查找空格字符(ASCII码位20H),找到显⽰Y,否则显⽰N。

4.根据键盘输⼊值N,计算前N项和(N<=10)

分析:这是循环程序,键盘输⼊值位循环次数,如果输⼊值是0,则不循环;否则如果输⼊的是5,则AL=1+2+3+4+5=15,执⾏5次循环。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- baoaiwan.cn 版权所有 赣ICP备2024042794号-3

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务