汇编语言程序设计实验报告
- 格式:docx
- 大小:276.01 KB
- 文档页数:28
汇编语言程序设计报告
班级:
学号:
姓名:
目录
汇编语言程序设计报告 (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