学习 目标代码生成.ppt





《学习 目标代码生成.ppt》由会员分享,可在线阅读,更多相关《学习 目标代码生成.ppt(18页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第7章章 目标代码生成目标代码生成7.1 汇编语言虚拟计算机模型汇编语言虚拟计算机模型7.2 从四元式到汇编语言的翻译从四元式到汇编语言的翻译7.3 一个简单目标代码生成器一个简单目标代码生成器7.4 静态地址分配静态地址分配 1任务任务任务任务 将中间代码变换成目标代码,实现源程序的最后翻译。由于涉及到目标机器将中间代码变换成目标代码,实现源程序的最后翻译。由于涉及到目标机器将中间代码变换成目标代码,实现源程序的最后翻译。由于涉及到目标机器将中间代码变换成目标代码,实现源程序的最后翻译。由于涉及到目标机器的系统结构,此阶段的工作最复杂。的系统结构,此阶段的工作最复杂。的系统结构,此阶段的工
2、作最复杂。的系统结构,此阶段的工作最复杂。目标代码的形式目标代码的形式目标代码的形式目标代码的形式已定位的机器语言代码已定位的机器语言代码已定位的机器语言代码已定位的机器语言代码 编译后可立即执行。编译后可立即执行。编译后可立即执行。编译后可立即执行。待装配的机器语言代码模块待装配的机器语言代码模块待装配的机器语言代码模块待装配的机器语言代码模块 目前大多数编译系统所产生的目标代码均为可重定位的机器指令。在执行前,目前大多数编译系统所产生的目标代码均为可重定位的机器指令。在执行前,目前大多数编译系统所产生的目标代码均为可重定位的机器指令。在执行前,目前大多数编译系统所产生的目标代码均为可重定位
3、的机器指令。在执行前,将它和系统函数(源程序中使用)的机器指令连接成一个程序,对未确定的地将它和系统函数(源程序中使用)的机器指令连接成一个程序,对未确定的地将它和系统函数(源程序中使用)的机器指令连接成一个程序,对未确定的地将它和系统函数(源程序中使用)的机器指令连接成一个程序,对未确定的地址进行定位(用户程序为址进行定位(用户程序为址进行定位(用户程序为址进行定位(用户程序为0 0地址空间),形成可执行的机器语言程序。地址空间),形成可执行的机器语言程序。地址空间),形成可执行的机器语言程序。地址空间),形成可执行的机器语言程序。在执行时,操作系统可将目标代码装入内存的任意位置。在执行时,
4、操作系统可将目标代码装入内存的任意位置。在执行时,操作系统可将目标代码装入内存的任意位置。在执行时,操作系统可将目标代码装入内存的任意位置。汇编语言代码汇编语言代码汇编语言代码汇编语言代码 需经汇编程序翻译,将其转换成可执行的机器语言代码。需经汇编程序翻译,将其转换成可执行的机器语言代码。需经汇编程序翻译,将其转换成可执行的机器语言代码。需经汇编程序翻译,将其转换成可执行的机器语言代码。由于硬件厂商提供机器的汇编程序,所以编译程序的目标代码通常为汇编语由于硬件厂商提供机器的汇编程序,所以编译程序的目标代码通常为汇编语由于硬件厂商提供机器的汇编程序,所以编译程序的目标代码通常为汇编语由于硬件厂商
5、提供机器的汇编程序,所以编译程序的目标代码通常为汇编语言形式。言形式。言形式。言形式。目标代码生成要求目标代码生成要求目标代码生成要求目标代码生成要求目标代码数与中间代码数的比值尽可能小(即目标代码数尽可能少)。目标代码数与中间代码数的比值尽可能小(即目标代码数尽可能少)。目标代码数与中间代码数的比值尽可能小(即目标代码数尽可能少)。目标代码数与中间代码数的比值尽可能小(即目标代码数尽可能少)。充分利用寄存器,减少访问内存的次数。充分利用寄存器,减少访问内存的次数。充分利用寄存器,减少访问内存的次数。充分利用寄存器,减少访问内存的次数。删除不必要的临时变量。删除不必要的临时变量。删除不必要的临
6、时变量。删除不必要的临时变量。27.1 汇编语言虚拟计算机模型汇编语言虚拟计算机模型内存内存共有共有共有共有64k64k个字,个字,个字,个字,1 1个字有个字有个字有个字有1616个二进制位(个二进制位(个二进制位(个二进制位(2Byte2Byte),内存地址标),内存地址标),内存地址标),内存地址标识为识为识为识为0-655350-65535。划分为划分为划分为划分为256256页,页号页,页号页,页号页,页号0-2550-255,每页的长度为,每页的长度为,每页的长度为,每页的长度为256256个字,页内位移个字,页内位移个字,页内位移个字,页内位移为为为为0-2550-255。地址计
7、算:页号地址计算:页号地址计算:页号地址计算:页号*256+256+页内位移。页内位移。页内位移。页内位移。255255页用作系统堆栈区。页用作系统堆栈区。页用作系统堆栈区。页用作系统堆栈区。寄存器寄存器通用寄存器(通用寄存器(通用寄存器(通用寄存器(2 2字节)字节)字节)字节)共有共有共有共有4 4个,分别标记为个,分别标记为个,分别标记为个,分别标记为R0R0、R1R1、R2R2、R3R3,用于存放操作数和,用于存放操作数和,用于存放操作数和,用于存放操作数和计算结果,计算结果,计算结果,计算结果,R3R3还可用于变址寻址。还可用于变址寻址。还可用于变址寻址。还可用于变址寻址。标志寄存器
8、标志寄存器标志寄存器标志寄存器FlagRegFlagReg 保存保存保存保存CMPCMP指令比较结果。指令比较结果。指令比较结果。指令比较结果。堆栈寄存器堆栈寄存器堆栈寄存器堆栈寄存器TopRegTopReg(2 2字节)字节)字节)字节)TopRegTopReg用作系统堆栈栈顶指针。用作系统堆栈栈顶指针。用作系统堆栈栈顶指针。用作系统堆栈栈顶指针。3指令系统(简单指令系统)指令系统(简单指令系统)指令系统(简单指令系统)指令系统(简单指令系统)指令格式:指令格式:指令格式:指令格式:(定长、(定长、(定长、(定长、2 2字节)字节)字节)字节)操作码操作码操作码操作码Read Read 从键
9、盘读一个字到第一地址。从键盘读一个字到第一地址。从键盘读一个字到第一地址。从键盘读一个字到第一地址。WriteWrite从第一地址写一个字到屏幕。从第一地址写一个字到屏幕。从第一地址写一个字到屏幕。从第一地址写一个字到屏幕。LoadLoad从第二地址将字装入第一地址。从第二地址将字装入第一地址。从第二地址将字装入第一地址。从第二地址将字装入第一地址。StoreStore将第一地址中的字存放到第二地址。将第一地址中的字存放到第二地址。将第一地址中的字存放到第二地址。将第一地址中的字存放到第二地址。CallCall控制转移到第二地址指定的内存单元,断点保留在系统堆栈中。控制转移到第二地址指定的内存
10、单元,断点保留在系统堆栈中。控制转移到第二地址指定的内存单元,断点保留在系统堆栈中。控制转移到第二地址指定的内存单元,断点保留在系统堆栈中。RetRet由系统堆栈获得断点,返回。由系统堆栈获得断点,返回。由系统堆栈获得断点,返回。由系统堆栈获得断点,返回。AddAdd将第一地址中的字加上第二地址中的字,结果保留第一地址中。将第一地址中的字加上第二地址中的字,结果保留第一地址中。将第一地址中的字加上第二地址中的字,结果保留第一地址中。将第一地址中的字加上第二地址中的字,结果保留第一地址中。SubSubMulMulDivDiv CmpCmp 将第一地址中的字和第二地址中的字比较,由系统置位将第一地
11、址中的字和第二地址中的字比较,由系统置位将第一地址中的字和第二地址中的字比较,由系统置位将第一地址中的字和第二地址中的字比较,由系统置位FlagRegFlagReg。uuFlagRegFlagReg=-1=-1,表示第一地址中的字小于第二地址中的字。,表示第一地址中的字小于第二地址中的字。,表示第一地址中的字小于第二地址中的字。,表示第一地址中的字小于第二地址中的字。uuFlagRegFlagReg=1=1,表示第一地址中的字大于第二地址中的字。,表示第一地址中的字大于第二地址中的字。,表示第一地址中的字大于第二地址中的字。,表示第一地址中的字大于第二地址中的字。uuFlagRegFlagRe
12、g=0=0,表示第一地址中的字等于第二地址中的字。,表示第一地址中的字等于第二地址中的字。,表示第一地址中的字等于第二地址中的字。,表示第一地址中的字等于第二地址中的字。低低低低8 8位用于第二地址的补充定义位用于第二地址的补充定义位用于第二地址的补充定义位用于第二地址的补充定义4JMPJMP无条件转移到第二地址指定的内存单元。无条件转移到第二地址指定的内存单元。无条件转移到第二地址指定的内存单元。无条件转移到第二地址指定的内存单元。JMPNEGJMPNEG若若若若FlagRegFlagReg中的值中的值中的值中的值0 0,转移到第二地址指定的内存单元。,转移到第二地址指定的内存单元。,转移到
13、第二地址指定的内存单元。,转移到第二地址指定的内存单元。JMPPOSJMPPOS若若若若FlagRegFlagReg中的值中的值中的值中的值0 0,转移到第二地址指定的内存单元。,转移到第二地址指定的内存单元。,转移到第二地址指定的内存单元。,转移到第二地址指定的内存单元。JMPZEROJMPZERO若若若若FlagRegFlagReg中的值中的值中的值中的值0 0,转移到第二地址指定的内存单元。,转移到第二地址指定的内存单元。,转移到第二地址指定的内存单元。,转移到第二地址指定的内存单元。HALTHALT终止程序执行。终止程序执行。终止程序执行。终止程序执行。第一地址只能是寄存器(第一地址只
14、能是寄存器(第一地址只能是寄存器(第一地址只能是寄存器(R0-R3R0-R3)第二地址有四种寻址方式第二地址有四种寻址方式第二地址有四种寻址方式第二地址有四种寻址方式uu直接地址寻址(直接地址寻址(直接地址寻址(直接地址寻址(MM)Load Load RiRi,MXX,MXX Ri(XXRi(XX)XXXX范围范围范围范围00-FF00-FF(第(第(第(第0 0页),用页),用页),用页),用1616进制表示。进制表示。进制表示。进制表示。uu寄存器寻址(寄存器寻址(寄存器寻址(寄存器寻址(R R)Load Load RiRi,RjRj Ri(RjRi(Rj)uu寄存器(间址)寻址(寄存器(
15、间址)寻址(寄存器(间址)寻址(寄存器(间址)寻址(RR)Load Load RiRi,RjRj Ri(RjRi(Rj)uu直接数寻址(直接数寻址(直接数寻址(直接数寻址(D D)Load Load RiRi,XX,XX RiRiXXXXXXXX范围范围范围范围00-FF00-FF,用,用,用,用1616进制表示。进制表示。进制表示。进制表示。uu变址寻址(变址寻址(变址寻址(变址寻址(C R3C R3)Load Load RiRi,CR3,CR3 Ri(CRi(C*256+(R3)*256+(R3)C C为常数(范围为常数(范围为常数(范围为常数(范围00-FF00-FF),用),用),用)
16、,用1616进制表示。进制表示。进制表示。进制表示。5指令分类指令分类指令分类指令分类uu零地址指令零地址指令零地址指令零地址指令 RetRet、HaltHaltuuA A型一地址指令(无第二地址)型一地址指令(无第二地址)型一地址指令(无第二地址)型一地址指令(无第二地址)WriteWrite、ReadRead 例:例:例:例:Read R0Read R0/从键盘输入一个数,将其存放在从键盘输入一个数,将其存放在从键盘输入一个数,将其存放在从键盘输入一个数,将其存放在R0R0中。中。中。中。uuB B型一地址指令(无第一地址)型一地址指令(无第一地址)型一地址指令(无第一地址)型一地址指令(
17、无第一地址)CallCall、JmpJmp、JmpNegJmpNeg、JmpZeroJmpZero、JmpPosJmpPos 例:例:例:例:JmpJmp 2R3 2R3/无条件转移至地址无条件转移至地址无条件转移至地址无条件转移至地址2*256+(R3)2*256+(R3)单元单元单元单元uu二地址指令二地址指令二地址指令二地址指令 LoadLoad、StoreStore、AddAdd、SubSub、MulMul、DivDiv、CmpCmp 例:例:例:例:Add R3,1Add R3,1/R3/R3的内容加的内容加的内容加的内容加1 1程序举例程序举例程序举例程序举例 用汇编程序编写程序,
18、求用汇编程序编写程序,求用汇编程序编写程序,求用汇编程序编写程序,求5 5的阶乘。的阶乘。的阶乘。的阶乘。Load R0,1Load R0,1/R0/R0的范围的范围的范围的范围1.51.5Load R1,1Load R1,1/初值为初值为初值为初值为1,1,存放存放存放存放5!5!。Add R0,1Add R0,1Mul R1,R0Mul R1,R0Cmp R0,5Cmp R0,5JmpNeg M2JmpNeg M2Write R1Write R1HaltHalt67.2 从四元式到汇编语言的翻译从四元式到汇编语言的翻译符号表、常数表和临时变量表的内存位置符号表、常数表和临时变量表的内存位置
19、 四元式中含有变量在符号表和临时变量表中的入口,以及常数在四元式中含有变量在符号表和临时变量表中的入口,以及常数在四元式中含有变量在符号表和临时变量表中的入口,以及常数在四元式中含有变量在符号表和临时变量表中的入口,以及常数在常数表中的地址,所以先确定符号表、临时变量表和常数表在内存常数表中的地址,所以先确定符号表、临时变量表和常数表在内存常数表中的地址,所以先确定符号表、临时变量表和常数表在内存常数表中的地址,所以先确定符号表、临时变量表和常数表在内存中的位置,然后再讨论四元式的翻译。中的位置,然后再讨论四元式的翻译。中的位置,然后再讨论四元式的翻译。中的位置,然后再讨论四元式的翻译。无符号
20、实常数表(第无符号实常数表(第无符号实常数表(第无符号实常数表(第254254页,按地址递减使用)页,按地址递减使用)页,按地址递减使用)页,按地址递减使用)起始地址:起始地址:起始地址:起始地址:254*256+255=65279254*256+255=65279,每个实常数占用,每个实常数占用,每个实常数占用,每个实常数占用2 2个字个字个字个字(4Byte)(4Byte)。无符号整常数表(第无符号整常数表(第无符号整常数表(第无符号整常数表(第254254页,按地址递增使用)页,按地址递增使用)页,按地址递增使用)页,按地址递增使用)起始地址:起始地址:起始地址:起始地址:254*256
21、=65024254*256=65024,每个整常数占用,每个整常数占用,每个整常数占用,每个整常数占用1 1个字(个字(个字(个字(2Byte2Byte)。)。)。)。符号表(第符号表(第符号表(第符号表(第252252、253253页,按地址递减使用)页,按地址递减使用)页,按地址递减使用)页,按地址递减使用)起始地址:起始地址:起始地址:起始地址:253*256+255=65023253*256+255=65023,每个标识符占用,每个标识符占用,每个标识符占用,每个标识符占用4 4个字个字个字个字(8Byte)(8Byte)。临时变量表(第临时变量表(第临时变量表(第临时变量表(第252
22、252、253253页,按地址递增使用)页,按地址递增使用)页,按地址递增使用)页,按地址递增使用)起始地址:起始地址:起始地址:起始地址:252*256=64512252*256=64512,每个临时变量占用,每个临时变量占用,每个临时变量占用,每个临时变量占用4 4个字个字个字个字(8Byte)(8Byte)。注:四元式中最多允许出现注:四元式中最多允许出现注:四元式中最多允许出现注:四元式中最多允许出现512/4=128512/4=128个不同的变量,包括临时变个不同的变量,包括临时变个不同的变量,包括临时变个不同的变量,包括临时变量在内。量在内。量在内。量在内。7虚拟内存示意图虚拟内存
23、示意图(共共共共64K64K、分、分、分、分255255页、每页页、每页页、每页页、每页255255字节字节字节字节)8 设源程序为:设源程序为:设源程序为:设源程序为:a=2+(+b+1)a=2+(+b+1),它的四元式代码为,它的四元式代码为,它的四元式代码为,它的四元式代码为+&b&b 0 0&T1&T1+&T1&T1&1&1&T2&T2+&2&2&T2&T2&T3&T3=&T3&T3 0 0&a&a假设假设假设假设uu整常数整常数整常数整常数1 1在无符号整常数表中的地址为在无符号整常数表中的地址为在无符号整常数表中的地址为在无符号整常数表中的地址为6502465024(254*256
24、+0254*256+0)uu整常数整常数整常数整常数2 2在无符号整常数表中的地址为在无符号整常数表中的地址为在无符号整常数表中的地址为在无符号整常数表中的地址为6502565025(254*256+1254*256+1)uu变量变量变量变量a a的符号表入口为的符号表入口为的符号表入口为的符号表入口为6502365023(253*256+255253*256+255)uu变量变量变量变量b b的符号表入口为的符号表入口为的符号表入口为的符号表入口为6501965019(253*256+251253*256+251)uu临时变量临时变量临时变量临时变量T1T1的临时变量表入口为的临时变量表入口
25、为的临时变量表入口为的临时变量表入口为6451264512(252*256+0252*256+0)uu临时变量临时变量临时变量临时变量T2T2的临时变量表入口为的临时变量表入口为的临时变量表入口为的临时变量表入口为6451664516(252*256+4252*256+4)uu临时变量临时变量临时变量临时变量T3T3的临时变量表入口为的临时变量表入口为的临时变量表入口为的临时变量表入口为6452064520(252*256+8252*256+8)实际四元式代码序列应为实际四元式代码序列应为实际四元式代码序列应为实际四元式代码序列应为+65019650190 06451264512+645126
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学习 目标代码生成 目标 代码 生成

限制150内