课 程 实 验 报 告
课程名称: 汇编语言程序设计实验
实验名称: 实验五 汇编语言C语言混合编程
实验时间: 201641914:0017:30 实验点:
指导教师: 专业班级:计算机科学技术班
学 号: 姓 名:
组学生: 报告日期: 2016年 4月 23日
原创性声明
郑重声明:报告容独立完成关观点方法数文献等引已文中指出文中已注明引容外报告包含集体已公开发表作品成果存剽窃抄袭行
特声明
学生签名:
日期:
成绩评定
实验完成质量分(70分)(实验步骤清晰详细深入实验记录真实完整等)
报告撰写质量分(30分)(报告规范完整通详实等)
总成绩(100分)
指导教师签字:
日期:
目录
1 实验目求 1
2 实验容 1
3 实验程 2
31 务1 2
311 设计思想存储单元分配 2
312 流程图 3
313 源程序 3
314 实验步骤 6
315 实验记录 6
32 务2 7
321 设计思想存储单元分配 7
322 流程图 8
323 源程序 8
324 实验步骤 11
325 实验记录 11
4 体会 11
参考文献 12
1 实验目求
(1) 掌握汇编语言程序C语言程序混合编程方法
(2) 熟悉C编译器基优化方法
(3) 解C语言编译器命名方法子程序间参数传递机制
2 实验容
务1:C 语言程序中嵌入汇编语言指令语句序列
实验二程序进行改造控程序输入输出等功C语言实现学生姓名搜索成绩计算C程序中嵌入汇编指令语句序列方式实现
务2:C语言程序中调 汇编语言实现函数
实验二程序进行改造控程序输入输出等功C语言实现学生姓名搜索成绩计算独立汇编语言子程序方式实现 C语言程序中调汇编语言子程序
求:
(1)C语言开发环境中实现汇编语言程序混合编程操作方法请家选择熟悉C语言开发环境查找相关资料完成实验
(2)实验报告中较详细出开发环境实现方法
(3)观察C语言编译器中种符号命名规(指编译器部识命名规符号名前面否加划线_等)子程序间参数传递机制通堆栈传递参数堆栈空间回收方法
(4) 混合编程形成执行程序调试工具观察C语言形成程序代码汇编语言形成程序代码间相互关系包括段偏移值汇编指令访问C变量时翻译等
(5) 请尝试C语言源程序中合理嵌入汇编语言指令语句达破坏C语言程序正确性目连续条C语言语句中间加入条修改AX寄存器汇编指令语句AX容处该修改样观察破坏C语言程序正确性效果(该项实验表明:C语言程序中考虑语句翻译成样机器码意嵌入汇编指令语句时存出错风险)
(6) 观察C编译器优化策略代码影响
(7) 通调试混合编程程序体会纯粹汇编语言编写程序调试程差异
(8)通次实验希家明白:编程语言协解决问题利语言特点更解决问题利汇编语言知识够更理解高级语言部处理原理策略编写更C语言程序C编译器提供支持
3 实验程
31 务1
311 设计思想存储单元分配
务:C 语言程序中嵌入汇编语言指令语句序列
实验二程序进行改造控程序输入输出等功C语言实现学生姓名搜索成绩计算C程序中嵌入汇编指令语句序列方式实现
整体结构功通dowhile循环实现循环条件根者输入YN判断整循环程中学生姓名搜索成绩计算C语言嵌汇编指令实现
1结构设计:
struct Stu{
char name[12] 储存姓名
short score[4] 储存成绩
}
2存储单元分配
Name分配12字节存储名字
Score分配1短整型数组数组包含4元素分语文数学英语均成绩
312 流程图
313 源程序
#include
#include
#include
struct Stu{
char name[12] 储存姓名
short score[4] 储存成绩
}
int main() {
struct Stu info[3]
char name[12] 输入姓名
int i j 计数器
char op
初始化三学生信息测试
strcpy(info[0]namezhangsan_a)
info[0]score[0] 86
info[0]score[1] 82
info[0]score[2] 88
info[0]score[3] 0
strcpy(info[1]name zhangsan_b)
info[1]score[0] 48
info[1]score[1] 79
info[1]score[2] 46
info[1]score[3] 0
strcpy(info[2]name zhangsan_c)
info[2]score[0] 96
info[2]score[1] 92
info[2]score[2] 98
info[2]score[3] 0
do{
printf(Inlut the name of the student)
gets(name)
_asm {
mov ecx 3
lea edi info[0]
LOAPI
lea esi name
mov edx 12
LOAPJ
mov al byte ptr[esi]
mov bl byte ptr[edi]
cmp al bl
jnz NEXT
cmp al '\0'
jz FIGURE
dec edx
inc edi
inc esi
jmp LOAPJ
NEXT
dec ecx
jz REINPUT
add edx 8
add edi edx
jmp LOAPI
FIGURE
add edi edx
mov al byte ptr[edi]
mov ah 0
add ax ax
add ax ax
mov dl byte ptr[edi + 2]
mov dh 0
add ax dx
add ax dx
mov dl byte ptr[edi + 4]
mov dh 0
add ax dx
mov bl 7
div bl
mov ah 0
mov word ptr[edi + 6] ax
}
for (i 0 i < 3 i++)
{
if (strcmp(info[i]name name))
{
printf(s\t info[i]name)
for (j 0 j < 4 j++)
{
printf(d\t info[i]score[j])
}
printf(\n)
}
}
_asm{
REINPUT
}
printf(Input Y to exitN continue)
op getchar()
getchar()
} while (op 'Y' || op 'y')
for (i 0 i < 3 i++) {
printf(s\t info[i]name)
for (j 0 j < 4 j++){
printf(d\t info[i]score[j])
}
printf(\n)
}
getchar()
return 0
}
314 实验步骤
1 Visual C++录入源程序编译链接运行
2 观察提示信息出错编辑程序修改错误修改重新编译
3 执行该程序观察程序运行结果
315 实验记录
(包括实验条件输入输出错误修改等信息记录)
1 实验环境条件:Visual C++Visual C++窗口
2 编译源程序时没发生异常
3 连接程没发生异常
4 输入提前录入三学生姓名
5 运行目标程序
6 根程序提示输入查找学生姓名
输入提前录入学生姓名输出该学生项成绩提示否继续
32 务2
321 设计思想存储单元分配
务:C语言程序中调 汇编语言实现函数
实验二程序进行改造控程序输入输出等功C语言实现学生姓名搜索成绩计算独立汇编语言子程序方式实现 C语言程序中调汇编语言子程序
整体结构功通dowhile循环实现循环条件根者输入YN判断整循环程中C语言通调汇编语言子程序达学生姓名搜索成绩计算功两功独立利汇编语言子程序方式实现
1结构设计:
struct Stu{
char name[12] 储存姓名
short score[4] 储存成绩
}
2存储单元分配
Name分配12字节存储名字
Score分配1短整型数组数组包含4元素分语文数学英语均成绩
322 流程图
323 源程序
汇编语言子程序
386
model flat c
code
public dif
dif proc par1dwordpar2dword
mov ecx 1000
mov edi par1
LOAPI
mov esi par2
mov edx 12
LOAPJ
mov al byte ptr[esi]
mov bl byte ptr[edi]
cmp al bl
jnz NEXT
cmp al 0
jz FIGURE
dec edx
inc edi
inc esi
jmp LOAPJ
NEXT
dec ecx
jz REINPUT
add edx 8
add edi edx
jmp LOAPI
FIGURE
add edi edx
mov al byte ptr[edi]
mov ah 0
add ax ax
add ax ax
mov dl byte ptr[edi + 2]
mov dh 0
add ax dx
add ax dx
mov dl byte ptr[edi + 4]
mov dh 0
add ax dx
mov bl 7
div bl
mov ah 0
mov word ptr[edi + 6] ax
REINPUT
ret
dif endp
end
C语言程序
#include
#include
#include
struct Stu{
char name[12] 储存姓名
short score[4] 储存成绩
}
extern void dif(struct stuinfo * char *)
int main() {
struct Stu info[3]
char name[12] 输入姓名
int i j 计数器
char op
初始化三学生信息测试
strcpy(info[0]namezhangsan_a)
info[0]score[0] 86
info[0]score[1] 82
info[0]score[2] 88
info[0]score[3] 0
strcpy(info[1]name zhangsan_b)
info[1]score[0] 48
info[1]score[1] 79
info[1]score[2] 46
info[1]score[3] 0
strcpy(info[2]name zhangsan_c)
info[2]score[0] 96
info[2]score[1] 92
info[2]score[2] 98
info[2]score[3] 0
do{
printf(Inlut the name of the student)
gets_s(name 12)
dif(info name)
for (i 0 i < 3 i++){
if (strcmp(info[i]name name)){
printf(s\t info[i]name)
for (j 0 j < 4 j++){
printf(d\t info[i]score[j])
}
printf(\n)
}
}
printf(Input Y to exitN continue)
op getchar() getchar()
} while (op 'Y' || op 'y')
for (i 0 i < 3 i++) {
printf(s\t info[i]name)
for (j 0 j < 4 j++){
printf(d\t info[i]score[j])
}
printf(\n)
}
getchar()
return 0
}
324 实验步骤
略
325 实验记录
见务
4 体会
通次实验更加深刻认识汇编语言高级语言间关系懂汇编语言C语言程序混合编程方法更加清楚子程序间参数传递机制混合编程基础相信编程实践中会变熟练
参考文献
[1] 王元珍等80x86汇编语言程序设计版(第1版)
[2] 王晓虹等汇编语言程序设计教程版(第1版)
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档