罗晏宸_PB17000297_第6次作业1
![preview](https://dl-preview.csdnimg.cn/86325307/0001-85d60c768384cedab2df10c23da27d58_thumbnail.jpeg)
![preview-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/scale.ab9e0183.png)
ロ晏宸_PB17000297_第6次作业1 本资源是关于C语言编程和i386 Linux下的汇编代码的知识点总结。它涵盖了两个exercise,分别讨论C语言程序及其对应的汇编代码。 Exercise 1 本exercise讨论了一个C语言程序的输出结果和汇编代码的补全问题。该程序使用union数据类型来存储字符数组和整数,接着使用printf函数输出union变量的整数值和字符数组值。汇编代码中使用了多个寄存器和指令来实现对应的操作。 (a)程序的输出结果 程序的输出结果为“36313032 2016”。这是因为union变量data的整数值是由字符数组‘2016’的ASCII码值组成的,而printf函数使用%x格式符来输出整数值,因此输出结果是十六进制形式的整数值。 (b)补全后的汇编代码 补全后的汇编代码如下所示: ``` .section .rodata .LC0: .string "%x %s\n" .text .globl main .type main, @function main: pushl %ebp movl %esp, %ebp subl $40, %esp andl $-16, %esp movl $0, %eax subl %eax, %esp movb $50, -24(%ebp) movb $48, -23(%ebp) movb $49, -22(%ebp) movb $54, -21(%ebp) movb $0, -20(%ebp) leal -24(%ebp), %eax movl %eax, -28(%ebp) movl -24(%ebp), %eax movl -28(%ebp), %edx movl %edx, %esp pushl $.LC0 call printf addl $16, %esp popl %ebp leave ret ``` Exercise 2 本exercise讨论了C语言程序中的结构体变量传递问题和汇编代码的实现。该程序定义了一个结构体类型DOT,包含了整数、字符数组和指针成员。然后,使用函数f来传递结构体变量,并对其成员进行操作。 (a)补全后的汇编代码 补全后的汇编代码如下所示: ``` .file "test1.c" .text .globl f .type f, @function f: pushl %ebp movl %esp, %ebp movl $100, 8(%ebp) movl $16, 12(%ebp) movb $65, 13(%ebp) pushl 16(%ebp) call f addl $16, %esp leave ret ``` (b)汇编指令的作用 addl $16, %esp 和leal -8(%ebp), %esp这两条汇编指令的作用是: * addl $16, %esp:将栈指针esp增加16个字节,以释放函数调用所需的栈空间。 * leal -8(%ebp), %esp:将寄存器ebp的值减去8,并将结果存储到esp寄存器中,以便在函数调用中使用。 (c)编译器的处理方式 编译器在按值传递结构变量时,会将结构体变量的所有成员复制到栈上,然后将栈指针传递给函数。在函数中,编译器会使用汇编指令来访问和操作结构体变量的成员。
![](https://csdnimg.cn/release/download_crawler_static/86325307/bg1.jpg)
![](https://csdnimg.cn/release/download_crawler_static/86325307/bg2.jpg)
![](https://csdnimg.cn/release/download_crawler_static/86325307/bg3.jpg)
剩余13页未读,继续阅读
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![avatar](https://profile-avatar.csdnimg.cn/f12d3495d2e842759fd550b44019a241_weixin_35801512.jpg!1)
- 粉丝: 23
- 资源: 319
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)
评论0