杨洋(161)-计算机是如何工作的(实验一)

实验一:计算机是怎样工作的?

♦ 实验:请使用Examplec代码分别生成.cpp,.s,.o

ELF可执行文件,并加载运行,分析.s汇编代码

CPU上的执行过程


♦ 实验报告要求:通过实验解释单任务计算机是怎

样工作的,并在此基础上讨论分析多任务计算机

是怎样工作的。

一.实验过程

1. 预处理得到.cpp文件


2. 得到.s汇编文件


3. 得到.o目标文件


4. 得到可执行文件


二.实验分析

通过汇编文件内容,分析计算机的工作流程,.s文件的内容为:

.file "example.c"

.text

.globl g

.type g, @function

g:

.LFB0:

.cfi_startproc

pushl %ebp

.cfi_def_cfa_offset 8

.cfi_offset 5, -8

movl %esp, %ebp

.cfi_def_cfa_register 5

movl 8(%ebp), %eax

addl $3, %eax

popl %ebp

.cfi_def_cfa 4, 4

.cfi_restore 5

ret

.cfi_endproc

.LFE0:

.size g, .-g

.globl f

.type f, @function

f:

.LFB1:

.cfi_startproc

pushl %ebp

.cfi_def_cfa_offset 8

.cfi_offset 5, -8

movl %esp, %ebp

.cfi_def_cfa_register 5

subl $4, %esp

movl 8(%ebp), %eax

movl %eax, (%esp)

call g

leave

.cfi_restore 5

.cfi_def_cfa 4, 4

ret

.cfi_endproc

.LFE1:

.size f, .-f

.globl main

.type main, @function

main:

.LFB2:

.cfi_startproc

pushl %ebp

.cfi_def_cfa_offset 8

.cfi_offset 5, -8

movl %esp, %ebp

.cfi_def_cfa_register 5

subl $4, %esp

movl $8, (%esp)

call f

addl $1, %eax

leave

.cfi_restore 5

.cfi_def_cfa 4, 4

ret

.cfi_endproc

.LFE2:

.size main, .-main

.ident "GCC: (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3"

.section .note.GNU-stack,"",@progbits

    从main函数开始执行,esp下移,将ebp入栈;将ebp移到esp所在位置;esp下移4字节;将8入栈;调用函数f(),将eip入栈,并把f的地址放入eip中;如图中橘色所示。

f()函数中esp下移,ebp入栈;将ebp移到esp所在位置;esp下移4字节;将ebp上面8字节处的内容放入eax中;再将eax中的值入栈;调用函数g(),将eip入栈,并把g的地址放入eip;如下图枚红色所示。

g()函数中esp下移,ebp入栈;将ebp移到esp位置;将ebp上面8字节处的内容放入eax;对eax中数值加3;如下图蓝色所示。


函数g()ebp重新指向ebp2的位置,如下图红色所示:


函数g()返回到f(),将f()下一条指令放入eip中,esp指向ebp2的位置,如下图红色所示:

  

函数f()ebp出栈,使得ebp指向ebp1的位置,如下图红色所示:


函数f()返回到main()函数中,将main函数的下一条指令放入eip中,在main()中,将eax中的值加1,如下图红色所示:


Main()函数中将esp指向ebp1所在位置,如下图红色所示:


最后main()函数结束,ebp出栈,将ebp0地址放入eip中,执行结束,如下图红色所示:


三.实验总结

    单任务计算机工作方式:程序按顺序执行,由eip指出下一条指令的地址。其中jmpcallret指令可以实现执行过程中的跳转。 

    多任务计算机工作方式:多任务计算机通过中断机制,采用时间片轮转等方式进行任务调度,实现多任务的处理。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值