汇编语言——《汇编语言程序的上机过程》实验任务书

一、实验目的

1. 掌握汇编语言程序的上机步骤

(1 )用编辑程序(如EDIT、记事本等)编辑汇编语言源程序(建立.ASM文件)

(2 )用MASM程序产生OBJ文件

(3 )用LINK程序产生EXE文件

(4 )程序的运行(用DEBUG或在DOS下直接运行)

2. 掌握DEBUG的使用方法

二、实验环境与设备

计算机一台,并且安装Windows操作系统和macro assembler 5.0以上版本的系统软件。

三、预备知识

1、熟悉汇编语言程序的上机步骤

( 1 )用编辑程序(如EDIT、记事本等)编辑汇编语言源程序(建立.ASM文件)

( 2 )用MASM程序产生OBJ文件

( 3 )用LINK程序产生EXE文件

( 4 )程序的运行(用DEBUG或在DOS下直接运行)

2、熟悉DEBUG的使用方法及以下常用命令

( 1 )G命令

运行当前在内存中的程序。

-g [=address] [breakpoints]

参数

=address

指定当前在内存中要开始执行的程序地址。如果不指定 address,Windows 2000 将从 CS:IP 寄存器中的当前地址开始执行程序。

breakpoints

指定可以设置为 g 命令的部分的 1 到 10 个临时断点。

有关执行指令的信息,请参看Debug T(跟踪)。

( 2 )D命令

显示一定范围内存地址的内容。

d [range]

参数

range

指定要显示其内容的内存区域的起始和结束地址,或起始地址和长度。如果不指定 range,Debug 程序将从以前 d 命令中所指定的地址范围的末尾开始显示 128 个字节的内容。

当使用 d 命令时,Debug 以两个部分显示内存内容:十六进制部分(每个字节的值都用十六进制格式表示)和 ASCII 码部分(每个字节的值都用 ASCII 码字符表示)。每个非打印字符在显示的 ASCII 部分由句号 (.) 表示。每个显示行显示 16 字节的内容,第8字节和第 9 字节之间有一个连字符。每个显示行从16字节的边界上开始。

假定键入以下命令:

dcs:100 10f

Debug 按以下格式显示范围中的内容:

04BA:0100 54 4F 4D 00 53 41 57 59-45 52 00 00 00 00 00 00 TOM.SAWYER......

如果在没有参数的情况下键入 d 命令,Debug 按以前范例中所描述的内容来编排显示格式。显示的每行以比前一行的地址大 16 个字节(如果是显示 40 列的屏幕,则为 8 个字节)的地址开头。

对于后面键入的每个不带参数的 d 命令,Debug 将紧接在最后显示的命令后立即显示字节内容。

如果键入以下命令,Debug 将从 CS:100 开始显示 20h 个字节的内容:

dcs:100 l 20

如果键入以下命令,Debug 将显示范围从CS 段的100h 到115h 中所有字节的内容:

dcs:100 115

( 3 )R命令

显示或改变一个或多个 CPU 寄存器的内容。

r [register-name]

参数

如果在没有参数的情况下使用,则 r 命令显示所有寄存器的内容以及寄存器存储区域中的标志。

register-name

指定要显示其内容的寄存器名。

使用 r 命令 ,如果指定了寄存器名称,Windows 2000 将显示以十六进制标记表示的寄存器的 16 位值,并将冒号显示为提示符。如果要更改包含在寄存器中的值,除非键入新值并按 ENTER 键;否则,请按 ENTER 键返回 Debug 提示符。
register-name 的有效值:ax、bx、cx、dx、sp、bp、si、di、ds、es、ss、cs、ip、pc 及 flags。ip 和 pc 都引用指令指针。

( 4 )A命令

直接将 8086/8087/8088 记忆码合并到内存。

该命令从汇编语言语句创建可执行的机器码。所有数值都是十六进制格式,必须按一到四个字符输入这些数值。在引用的操作代码(操作码)前指定前缀记忆码。

a [address]

参数

address

指定键入汇编语言指令的位置。对 address 使用十六进制值,并键入不以“h”字符结尾的每个值。如果不指定地址,a 将在它上次停止处开始汇编。

有关将数据输入到指定字节中的信息,请参看Debug E(键入)。

使用记忆码:段的替代记忆码为 cs:、ds:、es: 和 ss:。远程返回的记忆码是 retf。字符串处理的记忆码必须明确声明字符串大小。例如,使用 movsw 可以移动 16 位的字串,使用 movsb 可以移动 8 位字节串。

汇编跳转和调用

汇编程序根据字节替换自动将短、近和远的跳转及调用汇编到目标地址。通过使用 near 或 far 前缀可以替代这样的跳转或调用,如下例所示:

-a0100:0500

0100:0500 jmp 502 ; a 2-byte short jump

0100:0502 jmp near 505 ; a 3-byte near jump

0100:0505 jmp far 50a ; a 5-byte far jump

可以将 near 前缀缩写为 ne。

区分字和字节内存位置

当某个操作数可以引用某个字内存位置或者字节内存位置时,必须用前缀 word ptr 或者前缀 byte ptr 指定数据类型。可接受的缩写分别是 wo 和 by。以下范例显示两种格式:

dec wo [si]

neg byte ptr [128]

指定操作数

Debug 使用包括在中括号 ([ ]) 的操作数引用内存地址的习惯用法。这是因为另一方面 Debug 不能区分立即操作数和内存地址的操作数。以下范例显示两种格式:

mov ax,21 ; load AX with 21h

mov ax,[21] ; load AX with the

; contents of

; memory location 21h

使用伪指令

使用 a 命令提供两个常用的伪指令:db 操作码,将字节值直接汇编到内存,dw 操作码,将字值直接汇编到内存。以下是两个伪指令的范例:

db 1,2,3,4,"THIS IS AN EXAMPLE"

db 'THIS IS A QUOTATION MARK:"'

db "THIS IS A QUOTATION MARK:'"

dw 1000,2000,3000,"BACH"

范例

a 命令支持所有形式的间接注册命令,如下例所示:

add bx,34[bp+2].[si-1]

pop [bp+di]

push [si] )

还支持所有操作码同义词,如下例所示:

loopz 100

loope 100

ja 200

jnbe 200

对于 8087 操作码,必须指定 wait 或 fwait 前缀,如下例所示:

fwait fadd st,st(3) ; this line assembles

; an fwait prefix

( 5 )U命令

反汇编字节并显示相应的原语句,其中包括地址和字节值。反汇编代码看起来象已汇编文件的列表。

u [range]

参数

如果在没有参数的情况下使用,则 u 命令分解 20h 字节(默认值),从前面 u 命令所显示地址后的第一个地址开始。

range

指定要反汇编代码的起始地址和结束地址,或起始地址和长度。

有关集成记忆码的信息,请参看Debug A(汇编)。

有关显示内存部分内容的信息,请参看Debug D(转储)。

要反汇编 16 (10h) 字节,从地址 04BA:0100 开始,请键入以下命令:

u04ba:100l10

Debug 按以下格式显示结果:

04BA:0100 206472 AND [SI+72],AH

04BA:0103 69 DB 69

04BA:0104 7665 JBE 016B

04BA:0106 207370 AND [BP+DI+70],DH

04BA:0109 65 DB 65

04BA:010A 63 DB 63

04BA:010B 69 DB 69

04BA:010C 66 DB 66

04BA:010D 69 DB 69

04BA:010E 63 DB 63

04BA:010F 61 DB 61

如果只显示从 04BA:0100 到 04BA:0108 特定地址的信息,请键入以下命令:

u04ba:0100 0108

Debug 显示以下内容:

04BA:0100 206472 AND [SI+72],AH

04BA:0103 69 DB 69

04BA:0104 7665 JBE 016B

04BA:0106 207370 AND [BP+DI+70],DH

( 6 )Q命令

停止 Debug 会话,不保存当前测试的文件。

当您键入 q 以后,控制返回到 DOS 的命令提示符。

该命令不带参数。

( 7 )W命令

将文件或特定分区写入磁盘。

要将在 BX:CX 寄存器中指定字节数的内容写入磁盘文件,请使用以下语法:

w [address]

要略过 Windows 2000 文件系统并直接写入特定的扇区,请使用以下语法:

w address drive start number

参数

address

指定要写到磁盘文件的文件或部分文件的起始内存地址。如果不指定 address,Debug 程序将从 CS:100 开始。

drive

指定包含目标盘的驱动器。该值是数值型:0 = A, 1 = B, 2 = C,等等。

start

指定要写入第一个扇区的十六进制数。

number

指定要写入的扇区数。

3、掌握汇编语言的指令

( 1 )数据传送类指令。

( 2 )数据运算类指令。

( 3 )逻辑判断类指令。

 

四、实验内容

1、在数据段DATA中有两个字数据X和Y, 假设X=1122H, Y=3344H, 编程求两个字的和,结果存放到Z单元中.

2、从SOURCE_BUFFER单元开始存放了20个字母A, 编程将这20个字母A的字符串传送到DEST_BUFFER开始的单元中.

3、从SOURCE_BUFFER单元开始存放了20个字母A, 编程将这20个字母A的字

符串向下移10个单元.

五、实验要求

1、上机前要作好充分准备,包括程序框图、源程序清单、调试步骤、测试方法、对运行结果的分析等。

2、要熟悉与实验有关的系统软件(如编辑程序、汇编程序、连接程序和调试程序等)的使用方法。在程序的调试过程中,有意识地学习及掌握debug程序的各种操作命令,以便掌握程序的调试方法及技巧。

3、程序调试完后,须由实验辅导教师在机器上检查运行结果,经教师认可后的源程序方可通过打印输出。每个实验完成后,应写出实验报告。实验报告的要求如下:

(1)实验目的:对本次实验的目的加以说明。

(2)实验内容:本次实验你所完成的具体内容加以说明。

(3)设计思想:绘制程序框图,并说明原理及算法、程序及数据结构、主要符号名等。

(4)程序代码:经辅导教师确认后的程序清单。

(5)结果分析:包括调试情况,如上机时遇到的问题及解决办法、观察到的现象及其分析.对程序设计技巧的总结及分析;程序的输出结果及对结果的分析;实验的心得体会等。

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Starzkg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值