汇编语言程序设计实验报告

  • 格式:docx
  • 大小:276.01 KB
  • 文档页数:28

下载文档原格式

  / 28
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

汇编语言程序设计报告

班级:

学号:

姓名:

目录

汇编语言程序设计报告 (1)

汇编语言程序设计实验报告 (4)

实验一 (4)

实验内容 (4)

实验目的 (4)

实验代码 (4)

实验代码整体思路 (5)

1.检测所编程序的正确性 (5)

实验二 (7)

1.实验内容 (7)

结果测试: (11)

Debug: (11)

实验三 (13)

实验要求: (13)

实验代码: (13)

实验代码思路: (15)

检测结果,验证正确性 (15)

结论 (17)

实验四 (17)

实验内容 (17)

流程图 (18)

实验代码: (18)

Windbg (21)

实验结果测试: (23)

输入数据进行测试 (24)

实验五 (24)

实验内容:多模块程序设计及多语言混合编程。 (24)

要求: (24)

实验代码: (24)

实验代码分析说明: (26)

实验数据检测:判断是否成功完成实验任务 (27)

实验心得 (28)

汇编语言程序设计实验报告

实验一

实验内容:熟悉DOS编程环境:编写一个DOS环境的汇编语言程序,要求从键盘输入一串字符,去除连续重复的字符后再显示,如:输入一串为“aaawwweerrty”的字符串,输出结果应为‘awerty’

实验目的:通过上机实践加深对16位环境下编程的了解

学会使用debuge调试程序

实验代码:

实验代码整体思路:定义一个大小为60的缓冲区,用来存储从键盘输入的字

符串;

调用中断调用,将字符串输入到缓冲区当中;

使用取地址符号Lea取得输入字符串的首地址然后后一位与前一

位相比,若相同则将其舍弃,否者将其记录在缓冲区中,循环结束

之后在其后补上字符“$”即可一次输出,无单个输出

1.检测所编程序的正确性:

编译所建的1.asm文件:

按下回车键之后开始编译,如下图所示,编译结束表明没有错误不存在警告

对编译成功之后的文件进行链接,以生成能运行的.exe文件,如下图1-1所示:

1-1

链接之后发现链接(Link)之后也是成功的,接下来就进行测试的最后一步,即运行

1.exe文件,输入一串字符串,看能否达到预期的目的,如达到,则成功,否者重新编

译。

可见,与预期目的一致,达到了目的。

6.该实验使用的知识点:

实验二

1.实验内容:

(1). 程序中自定义缓冲区AREA1,其中存放200个有序的无符号字型数据(至少有3个重复数据),编程序将其排序后送到自AREA2开始的单元中,要求传送后的数据从大到小排序,并实现查找功能,判定需要查找的数据在AREA1与AREA2中分别对应的位置,并通过查看内存验证结果的正确性。把有序的无符号字型数据换成带符号字型数据,实现以上功能。

(2). 熟悉DEBUG调试环境。使用DEBUG调试程序察看机器码,并单

步执行,观察每一条指令的执行结果、寄存器的内容、内存变量和堆栈数据的变化情况。

2.实验代码如下:

结果测试:

对实验二进行编译链接:

运行程序,输出实验结果:

Debug:

显示寄存器内容,如下图所示:

用U命令反汇编可执行代码,如下图所示:

用g命令设置断点到CS:00D8处,如下图所示:

用t命令跟踪执行程序,如下图所示逐条跟踪三次的结果:

用q命令退出:

实验三

实验要求:熟悉Windows编程环境

⑴编写一个Windows界面汇编程序,显示一个带Yes,No选择按钮的

消息框,标题显示为:自己的姓名;正文内容显示为:学号;选择Yes的返回:“你选择的是Yes”,选择No的返回:“你选择的是No”。

(2)(编写一个Windows 32位控制台程序,要求从键盘输入5个十六进制数,输出该数所对应的二进制数中所包含“0”的个数。)

(3)熟悉WINDBG调试环境。使用WINDBG调试程序察看机器码,并单步执行,观察每一条指令的执行结果、寄存器的内容、内存变量和堆栈数据的变化情况。

实验代码:

PROTO :dword, :dword, :dword, :dword MessageBox equ

Includelib user32.lib

Includelib msvcrt.lib

NULL equ 0

MB_OK equ 1

.stack 4096

.data

SzTile byte '陈强!',0

SzMsg byte '1120131888!',0

NO1 byte '我选的是确定!',0ah,0

NO2 byte '我选的是取消!',0ah,0

.code

start:

invoke MessageBox,

NULL,

offset SzMsg,

offset SzTile,

MB_OK

cmp eax,1

jz A

cmp eax,1

jnz B

A: invoke MessageBox,

NULL,

offset NO1,

offset SzTile,

MB_OK

ret

B: invoke MessageBox,

NULL,

offset NO2,

offset SzTile,

MB_OK

ret

ret

end start

scanf PROTO C:dword,:vararg

.data

szmsg byte '%d',0ah,0

msg byte '%d',0

szformat byte '%x',0

buf dword 40 dup(?)

l0 dword ?

l1 dword ?

l2 dword ?

l3 dword ?

l4 dword ?

.code

start:

mov esi,0

L: invoke scanf,offset szformat,offset buf

mov eax,buf

mov ecx,4

mov edx,0

t: mov ebx,eax

and ebx,1

cmp ebx,0

jz yz

cmp ebx,0

jnz ty

yz: inc edx

ty: shr eax,1

loop t

push edx

INC ESI

cmp esi,5

jb L

pop l4

pop l3

pop l2

pop l1

pop l0

invoke printf,offset szmsg,l0

invoke printf,offset szmsg,l1

invoke printf,offset szmsg,l2

invoke printf,offset szmsg,l3

invoke printf,offset msg,l4

ret

end start