diff --git a/report/report.md b/report/report.md index f8c9d63..f737999 100644 --- a/report/report.md +++ b/report/report.md @@ -1,6 +1,6 @@ # PW6 实验报告 -学号PB2100 姓名 吴书让 +学号PB21000179 姓名 吴书让 学号PB21111627 姓名 罗胤玻 ## 问题回答 @@ -87,6 +87,27 @@ define dso_local i32 @main() #0 { ; 定义一个名为main的函数,返回类 2. 函数调用语句对应的LLVM IR的代码中,会将函数的返回值存储到一个临时变量中,然后再对临时变量进行操作。 3. 调用者使用`call`指令调用被调用者,被调用者使用`ret`指令返回调用者。 +------ + +### Task2 + +> 2-1 请给出`SysYFIR.md`中提到的两种getelementptr用法的区别, 并解释原因: + +**2-1:** +- `getelementptr`实际上是一条指针计算语句,不进行任何数据的访问或修改,作用是计算指针并修改计算后指针的类型。 + - 第一个参数为要进行计算原始指针的类型; + - 第二个参数是原始指针,往往是一个结构体指针,或数组首地址指针。 + - 第二个参数及以后的参数,都称为index,表示要进行计算的参数,作用在第二个参数给出的初始指针,如结构体的第几个元素,数组的第几个元素。 +- **第一种用法**:获取数组元素所在地址,一个偏移0得到%1指向数组的第一个,用第二个偏移0得到首元素向后偏移量,返回此地址 +- **第二种用法**:获取指针地址,第一个偏移0计算得到%1所指的变量,并返回该变量的地址 + +----- + +### Task3 + +> 3-1. 在`scope`内单独处理`func`的好处有哪些。 + +**3-1:** 在不同的scope中可以使用相同的变量名,而不必担心命名冲突的问题,同时也可以提高代码的可读性和可维护性。 ## 实验设计