汇编语言程序设计实验报告
//初始化三个学生信息用于测试 strcpy(info[0].name,\info[0].score[0] = 86; info[0].score[1] = 82; info[0].score[2] = 88; info[0].score[3] = 0;
strcpy(info[1].name, \info[1].score[0] = 48; info[1].score[1] = 79; info[1].score[2] = 46; info[1].score[3] = 0;
strcpy(info[2].name, \info[2].score[0] = 96; info[2].score[1] = 92; info[2].score[2] = 98; info[2].score[3] = 0; do{
printf(\gets(name); _asm {
mov lea lea mov
ecx, 3 edi, info[0]; esi, name edx, 12
al, byte ptr[esi] bl, byte ptr[edi] al, bl NEXT al, '\\0' FIGURE edx
4
char int char
name[12]; i, j; op;
//输入的姓名
//计数器
LOAPI:
LOAPJ :
mov mov cmp jnz cmp jz
dec
汇编语言程序设计实验报告
}
for (i = 0; i < 3; i++) { }
5
inc inc jmp dec jz add add jmp add mov mov add add mov mov add add mov mov add mov div mov mov
edi esi LOAPJ
NEXT :
ecx REINPUT edx, 8 edi, edx LOAPI edi, edx
al, byte ptr[edi] ah, 0 ax, ax ax, ax
dl, byte ptr[edi + 2] dh, 0 ax, dx ax, dx
dl, byte ptr[edi + 4] dh, 0 ax, dx bl, 7 bl ah, 0
word ptr[edi + 6], ax
FIGURE :
if (!strcmp(info[i].name, name)) { }
printf(\for (j = 0; j < 4; j++) { }
printf(\
printf(\
汇编语言程序设计实验报告
}
for (i = 0; i < 3; i++) { }
getchar(); return 0;
printf(\for (j = 0; j < 4; j++){ }
printf(\
printf(\
printf(\op = getchar(); getchar();
_asm{ }
REINPUT:
} while (op == 'Y' || op == 'y');
3.1.4 实验步骤
1. 使用Visual C++录入源程序,编译,链接,运行。
2. 观察提示信息,若出错,则用编辑程序修改错误,修改后再重新编译 3. 执行该程序。观察程序运行结果。
3.1.5 实验记录
(包括实验条件、输入/输出、错误和修改等信息的记录)
1、 实验环境条件:Visual C++;Visual C++窗口; 2、 编译源程序时没有发生异常。 3、 连接过程没有发生异常。
4、 输入提前录入的三个学生姓名。
6
汇编语言程序设计实验报告
5、 运行目标程序
6、 根据程序提示输入查找的学生姓名
输入提前录入的学生姓名,输出该学生的各项成绩,并提示是否继续。
3.2 任务2
3.2.1 设计思想及存储单元分配
任务:在C语言程序中调用 汇编语言实现的函数
对于实验二的程序进行改造,主控程序、以及输入输出等功能用C语言实现,学生姓名搜索和成绩计算用独立的汇编语言子程序的方式实现; 在C语言程序中调用汇编语言子程序。
整体结构功能通过一个do-while循环来实现,而循环的条件根据使用者输入“Y”或“N”来判断。在整个循环的过程中,C语言通过调用汇编语言子程序,来达到学生姓名搜索和成绩计算的功能。而这两个功能则独立利用汇编语言子程序的方式来实现。
1.结构设计:
7
汇编语言程序设计实验报告
struct Stu{ };
2.存储单元分配
Name:分配12个字节来存储名字
Score:分配1个短整型数组,数组包含4个元素,分别为语文、数学、英语和平均成绩。
char name[12]; short score[4];
//储存姓名 //储存成绩
3.2.2 流程图
无
3.2.3 源程序
汇编语言子程序 .386
.model flat, c .code public dif dif
proc
par1:dword,par2:dword
ecx, 1000 edi, par1; esi, par2 edx, 12
al, byte ptr[esi] bl, byte ptr[edi] al, bl NEXT al, 0 FIGURE edx edi esi LOAPJ
mov
mov mov mov
LOAPI:
LOAPJ:
mov mov cmp jnz cmp jz
dec inc inc jmp dec
NEXT:
ecx
8