第2章-PL0编译程序的实现_第1页
第2章-PL0编译程序的实现_第2页
第2章-PL0编译程序的实现_第3页
第2章-PL0编译程序的实现_第4页
第2章-PL0编译程序的实现_第5页
已阅读5页,还剩250页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

温故知新编译原理的内容及学习意义翻译器、编译器的定义编译器的阶段划分及前端、后端的概念“遍”的概念遍编译的几个阶段常用一遍(pass)扫描实现,一遍扫描包括读一个输入文件和写一个输出文件。词法分析器语法分析器语义分析器源程序中间代码生成器代码优化器代码生成器目标程序出错管理器符号表管理器编译器从逻辑上可以分成若干阶段,每个阶段把源程序从一种表示变换成另一种表示遍单遍扫描与多遍扫描:每一遍的扫视可完成上述一个阶段或多个阶段的工作。每一遍的输入都是上一遍的输出,第一遍的输入是源程序正文,最后一遍的输出是目标代码。单遍与多遍的比较:遍数多:编译器结构清晰,但时间效率不高遍数少:编译速度快,但对机器的内存要求高遍数的确定:主要因素是源程序和机器(目标机)的特征。前端和后端:把编译过程分成前端和后端两部分前端:只依赖于源程序,独立于目标机器 (生成中间代码)后端:依赖于目标机器,与源程序无关,只与中间语言有关(从中间代码生成目标代码)好处:提高开发编译器的效率取一个编译器的前端,重写它的后端以产生同一源语言在另一机器上的编译器不同的前端使用同一个后端,从而得到一个机器上的几个编译器(采用同一中间语言)源程序目标机器1目标机器2目标机器3目标机器n编译器不区分前端和后端的编译器源程序目标机器1目标机器2目标机器3目标机器n编译器前端编译器后端区分前端和后端的编译器下列程序中哪些不是编译程序的组成部分?A词法分析B代码读入C语法分析D代码生成对下列错误信息,请指出可能是编译的哪个阶段报告的。else没有匹配的if数组下标越界声明和使用的函数没有定义零做除数在数中出现非数字字符语法分析语义分析或代码生成语义分析代码优化或语义分析词法分析B代码读入判断高级语编写的源程序都必顺通过编译,产生目标代码后才能运行.多遍扫描的编译程序的多遍是指多次重复读源程序.就执行速度而言,编译后再执行程序比解释执行程序慢.(×)(×)(×)出错处理程序语法分析程序语义分析程序目标代码生成程序词法分析程序中间代码生成程序代码优化程序表格管理程序注意上述编译过程的阶段划分只是一种典型的分法,事实上并不是所有的编译程序都分成这样几个阶段的。有些编译程序对优化没有什么要求,优化阶段就可省去。在某些情况下,为了加快编译速度,中间代码产生阶段也可以去掉。有些最简单的编译程序是在语法分析的同时产生目标代码。但是,多数实用编译程序的工作过程大致都像上面所说的那六个阶段。

其它编译程序的另外两个重要的工作是表格管理和出错处理。编译过程中源程序的各种信息被保留在种种不同的表格里,编译各阶段的工作都涉及到构造、查找或更新有关的表格,因此需要有表格管理的工作;如果编译过程中发现源程序有错误,编译程序应报告错误的性质和错误发生的地点,并且将错误所造成的影响限制在尽可能小的范围内,使得源程序的其余部分能继续被编译下去,有些编译程序还能自动校正错误,这些工作称之为出错处理。出错处理一个好的编译程序应该:全最大限度发现错误准准确指出错误的性质和发生地点局部化将错误的影响限制在尽可能小的范围内若能自动校正错误则更好,但其代价非常高出错处理源程序中的错误通常分为:语法错误不符合语法(或词法)规则的错误语义错误不符合语义规则的错误单词拼写错误、括号不匹配...说明错误、作用域错误、类型不匹配...现代编译技术必须面对应用需求和目标体系结构的多样化高性能计算(HighPerformanceComputing)指令级并行(InstructionLevelParallelism)线程级并行(ThreadLevelParallelism)处理机级并行(ProcessorLevelParallelism)系统级并行(ThreadLevelParallelism)嵌入式计算(EmbeddedComputing)需求多样性(实时、资源限制、功耗、多目标)其它多媒体计算(MultimediaComputing)网络计算(NetworkComputing)……编译技术重要方向并行编译技术–面向高性能计算交叉编译技术–面向嵌入式计算第2章PL/0编译程序的实现本章目的:以PL/0编译程序为实例,学习编译程序实现的基本步骤和相关技术1PL/0编译程序的结构2PL/0编译程序的分析工作(词法,语法和语义)实现3PL/0编译程序的错误处理方法4目标代码生成和类pcode代码解释器PL/0语言描述它由世界著名计算机科学家N.Wirth编写PL/0语言:PASCAL语言的子集,功能简单,结构清晰,可读性强,具备了一般高级语言的必备部分它充分体现一个高级语言编译程序实现的基本方法和技术本书提供了两种形式的PL/0语言的语法描述:语法图:用语法图描述语法规则的优点是直观、易读EBNFPL/0的非形式化描述数据类型只有整型标识符的有效长度是10,以字母开始的字母数字串数最多为14位作用域规则(内层可引用包围它的外层定义的标识符)过程无参,可嵌套定义(最多三层),可递归调用语句类型:赋值语句,if...then...,while...do...,read,write,call,复合语句(begin...end),说明语句(const...,var...,procedure…)13个保留字:if,then,while,do,read,write,call,begin,end,const,var,procedure,odd

1.PL/0编译程序的结构

PL/0编译程序

PL/0语言程序

类p-code代码源语言(PL/0)目标语言(类p-code)实现语言(pascal/C)

PL/0

类p-codepascal/C

PL/0编译程序类p-code解释程序类p-code代码PL/0源程序输入数据输出数据PL/0编译系统的结构框架PL/0语言PL/0语言:PASCAL语言的子集PL/0程序示例PL/0的语法描述图PL/0语言的EBNF表示

PL/0程序示例CONSTA=10;(*常量说明部分*)

VARB,C;(*变量说明部分*)PROCEDUREP;(*过程说明部分*)VARD;(*P的局部变量说明部分*)PROCEDUREQ;(*P的局部过程说明部分*)VARX;

BEGIN

READ(X);D:=X;WHILEX#0DOCALLP;

END;

BEGIN

WRITE(D);

CALLQ;

END;

BEGIN

CALLP;

END.Q过程体p过程体主程序体

输入圆柱的半径和高,计算一些面积、体积等

varr,h,len,a1,a2,volumn;begin read(r); read(h);

len:=2*3*r; a1:=3*r*r; a2:=a1+a1+len*h; volumn:=a1*h;

write(len); write(a1); write(a2); write(volumn);end.计算最大公约数varm,n,r,q;{计算m和n的最大公约数}proceduregcd;beginwhiler#0dobeginq:=m/n;r:=m-q*n;m:=n;n:=r;endend;beginread(m);read(n);{为了方便,规定m>=n}ifm<nthenbeginr:=m;m:=n;n:=r;end;beginr:=1;callgcd;write(m);end;end.pl/0程序--递规调用varn;procedurerec;beginifn#0thenbeginwrite(n);n:=n-1;callrec;end;end;beginread(n);callrec;end.计算sum=1!+2!+...+n!,

n从控制台读入varn,m,fact,sum;{递规计算fact=m!}procedurefactorial;beginifm>0thenbeginfact:=fact*m;m:=m-1;callfactorial;end;end;begin{读入n}read(n);sum:=0;whilen>0dobeginm:=n;fact:=1;callfactorial;sum:=sum+fact;n:=n-1;end;{输出n!}write(sum);end.2.1.1PL/0语言的语法描述图语法描述图中的符号说明:A或A:表示终结符(构成语言文法的单词,语法成分的最小单位)中文:表示非终结符(用终结符和非终结符串或终结符串定义)通常称第一个非终结符为文法的开始符号。如“程序”图2.1(a)程序语法描述图图2.1(b)分程序语法描述图图2.1(c)语句语法描述图图2.1(d)条件语法描述图图2.1(e)表达式语法描述图图2.1(f)项语法描述图图2.1(g)因子语法描述图

BNF(BACKUS-NAURFORM)是根据美国的JohnW.Backus与丹麦的PeterNaur来命名的,它从语法上描述程序设计语言的元语言。采用BNF就可说明哪些符号序列是对于某给定语言在语法上有效的程序构成EBNF的元素—(非终结符,终结符,开始符,规则)EBNF

的元符号:

<>用左右尖括号括起来的内容为非终结符

∷=读做‘定义为’∷=的左部由右部定义→读做‘定义为’→的左部由右部定义|读做‘或’表示右部候选内容{}表示花括号内的内容可重复任意次或限定次数

[]表示方括号内的内容为任选项

()表示圆括号内的内容优先2.1.2PL/0语言文法的EBNF表示PL/0语言文法的EBNF表示:〈程序〉∷=〈分程序〉.〈分程序〉∷=[〈常量说明部分〉][〈变量说明部分〉][〈过程说明部分〉]〈语句〉〈常量说明部分〉∷=CONST〈常量定义部分〉{,〈常量定义〉};<常量定义>::=<标识符>=<无符号整数>;〈无符号整数〉∷=〈数字〉{〈数字〉}〈变量说明部分〉∷=VAR〈标识符〉{,〈标识符〉};〈标识符〉∷=〈字母〉{〈字母〉|〈数字〉}<过程说明部分>::=<过程首部><分程序>{;<过程说明部分>}<过程首部>::=PROCEDURE<标识符>;<语句>::=<赋值语句>|<条件语句>|<当型循环语句>|<过程调用语句>|<读语句>|<写语句>|<复合语句>|<空><赋值语句>

::=<标识符>:=<表达式><复合语句>

::=BEGIN<语句>{;<语句>}END<条件>

::=<表达式><关系运算符><表达式>|ODD<表达式><表达式>

::=[+|-]<项>{<加法运算符><项>}<项>

::=<因子>{<乘法运算符><因子>}<因子>

::=<标识符>|<无符号整数>|‘(’<表达式>‘)’<加法运算符>

::=+|-<乘法运算符>

::=*|/<关系运算符>

::==|#|<|<=|>|>=<条件语句>

::=IF<条件>THEN<语句><过程调用语句>

::=CALL<标识符><当型循环语句>

::=WHILE<条件>DO<语句><读语句>

::=READ’(’<标识符>{,<标识符>}‘)’<写语句>

::=WRITE’(’<表达式>{,<表达式>}‘)’<字母>

::=a|b|…|X|Y|Z<数字>

::=0|1|…|8|9

例:用EBNF描述<整数>的定义:

<整数>∷=[+|-]<数字>{<数字>}

<数字>∷=0|1|2|3|4|5|6|7|8|9或<整数>∷=[+|-]<非零数字>{<数字>}|0

<非零数字>∷=1|2|3|4|5|6|7|8|9

<数字>∷=0|<非零数字>2.2PL/0编译程序的结构PL/0的目标程序为假想栈式计算机的汇编语言,与计算机无关PL/0的编译程序和目标程序的解释执行程序可用各种语言编写。2.2PL/0编译程序的结构1、PL/0编译程序的特点(1)编译程序采用一遍扫描方式,以语法分析程序为核心,词法分析程序和代码生成程序为一个独立过程,被语法分析程序所调用。(2)用表格管理程序建立变量,常量和过程标识符的说明与引用之间的信息联系。(3)用出错处理程序对词法和语法分析遇到的错误给出在源程序中出错的位置和错误性质。(4)当源程序编译正确时,PL/0编译程序自动调用解释执行程序,对目标代码进行解释执行。

2.PL/0编译程序的结构词法分析程序语法语义分析程序代码生成程序表格管理程序出错处理程序PL/0源程序目标程序PL/0编译程序解释执行程序目标代码PL/0源程序输入输出PL/0编译系统的结构框架下面对Pascal语言书写的PL/0编译程序构造技术进行分析说明PL/0编译程序(包括主程序)是由18个嵌套及并列的过程或函数组成:PL/O编译程序的过程与函数定义层次结构图PL/O编译程序总体流程图

目标代码类p-code目标代码类p-code是一种栈式机的汇编语言。栈式机系统结构:没有累加器和寄存器,只有存储栈指针所有运算都在栈顶(零地址机)指令格式:flaf 功能码l 层次差(标识符引用层减去定义层)a 根据不同的指令有所区别

PL/0编译程序的结构词法分析程序语法语义分析程序代码生成程序表格管理程序出错处理程序PL/0源程序目标程序PL/0编译程序的总体设计以语法、语义分析程序为核心

词法分析程序和代码生成程序都作为一个过程,当语法分析需要读单词时就调用词法分析程序,而当语法、语义分析正确,需要生成相应的目标代码时,则调用代码生成程序。表格管理程序实现变量,常量和过程标识符的信息的登录与查找。出错处理程序,对词法和语法、语义分析遇到的错误给出在源程序中出错的位置和与错误性质有关的编号,并进行错误恢复。2.3PL/0编译程序的词法分析词法分析程序GETSYM功能识别单词作为语法分析的输入,单词分为关键字、运算符、界符、标识符和常数,其中前三类称为固有单词,后二类称为用户定义单词。PL/0编译程序设置的三个全程变量:SYM:存放单词的类别,如beginsym,identID:存放用户所定义的标识符的值NUM:存放用户定义的数单词的种类:关键字(保留字):BEGIN、END、IF、THEN等运算符:如+、-、*、/、:=、#、>=、<=等标识符:用户定义的变量名、常数名、过程名常数:如10、25、100等整数界符:如‘,’、‘.’、‘;’、‘(’、‘)’等词法分析过程GETSYM所要完成的任务:从源程序读字符(getch)滤空格识别保留字识别标识符拼数识别单字符单词拼双字符单词输出源程序图2.5词法分析过程GETSYM取字符过程GETCH:图2.6取字符过程GETCH具体程序:PL/0编译程序设置的三个全程变量sym:存放单词的类别,如beginsym,identid:存放用户所定义的标识符的值num:存放用户定义的数3个数组word:存放PL/0语言的13个保留字wsym:保留字的类别ssym:单符号的类别词法分析过程:GETSYM框图(见教材图2.5)程序(

proceduregetsym)当识别到标识符时先查保留字表保留字表:(

begin(*main*))word[1]:=‘begin‘;word[2]:=‘call‘;...word[13]:=‘write‘;查到时找到相应的内部表示Wsym[1]:=beginsym;wsym[2]:=callsym;…wsym[13]:=writesym;字符对应的单词表:ssym[‘+’]:=plus;ssym[‘-’]:=minus;…ssym[‘;’]:=semicolon;词法分析如何把单词传递给语法分析typesymbol=(nul,ident,number,plus,…,varsym,procsym);3个全程量

SYM:symbol;ID:alfa;NUM:integer;通过三个全程量

SYM、ID和NUM将识别出的单词信息传递给语法分析程序。SYM:存放单词的类别如:有程序段落为:begininitial:=60;end对应单词翻译后变为:beginbeginsym,initialident,‘:=‘becomes,60number,‘;’semicolon,endendsym。ID:存放用户所定义的标识符的值如:initial(在SYM中放ident,在ID中放initial)NUM:存放用户定义的数如:60(在SYM中放number,在NUM中放60)2.4PL0编译程序的语法语义分析语法分析的任务:识别单词符号序列是否符合给定的语法规则语法分析的设计与实现自顶向下的语法分析递归子程序法自顶向下的语法分析VARA;BEGINREAD(A)END.<程序><分程序>.<变量说明部分><语句>VAR<标识符>;A<复合语句>BEGIN<语句>END<读语句>READ(<标识符>)A语法分析采用递归子程序法:对应每个非终结符语法单元,编一个独立的处理过程(或子程序)语法分析从读入第一个单词开始由非终结符‘程序’即开始符出发,沿语法描述图箭头所指出的方向进行分析。当遇到非终结符时,则调用相应的处理过程,从语法描述图看也就进入了一个语法单元,再沿当前所进入的语法描述图的箭头方向进行分析当遇到描述图中是终结符时,则判断当前读入的单词是否与图中的终结符相匹配,若匹配,则执行相应的语义程序(就是翻译程序)再读取下一个单词继续分析。遇到分支点时将当前的单词与分支点上多个终结符逐个相比较,若都不匹配时可能是进入下一个非终结符语法单位或是出错如何用递归子程序法来实现表达式的语法分析?〈表达式〉∷=[+|-]〈项〉{(+|-)〈项〉}〈项〉∷=〈因子〉{(*|/)〈因子〉}〈因子〉∷=〈标识符〉|〈无符号整数〉|‘(’〈表达式〉‘)’〈表达式〉∷=[+|-]〈项〉{(+|-)〈项〉}表达式的实现exprifsym是正或负{addop=sym;getsym;term;if(addop为负)将项取反;}elseterm;whilesymin[plus,minus]{getsym;term;将两项进行运算

}

〈项〉∷=〈因子〉{(*|/)〈因子〉}〈项〉的实现

term:

{factor;

whilesymin[times,slash]{getsym;factor;将两个因子进行运算}

}〈因子〉∷=〈标识符〉|〈无符号整数〉|‘(’〈表达式〉‘)’〈因子〉的实现

factor:

if(sym!=ident&&sym!=number)if(sym==‘(‘){getsym;

expr;

if(sym=‘)’)getsym;elseerror

}elseerror

对PL/0语言进行语法分析时,各个非终结符语法单元所对应的分析过程之间存在的调用关系如图所示

语法语义分析的处理程序由BLOCK程序完成,其流程图如下图所示:程序BLOCK过程的流程图:名字表是全程量一维数组TABLETX为TABLE的指针LEV表示层次DX本层局部变量分配的相对存储位置〈分程序〉∷=[〈常量说明部分〉][〈变量说明部分〉][〈过程说明部分〉]〈语句〉(1)说明部分的处理:对每个过程说明的对象(变量,常量和过程)造名字表,填写所在层次,标识符的属性和分配的相对位置。标识符的属性不同时,所需填入的信息也不同。登录信息由ENTER过程完成例如,一个PL/O语言过程说明部分的片段为:CONSTA=35,B=49;VARC,D,E;PROCEDUREP;VARG对常量、变量和过程说明分析后,得到TABLE表中的信息如表2.2所示:(2)过程体的处理:从语法上对语句逐句分析当语法正确时就生成相应语句功能的目标代码当遇到标识符的引用时就调用POSITION函数查TABLE表,看是否有过正确定义,若已有,则从表中取相应的有关信息,供代码的生成使用。若无定义则调用出错处理程序flaf 功能码l 层次差a 根据不同的指令有所区别PL/O编译程序所产生的目标代码是一个假想栈式计算机的汇编语言,可称为类PCODE指令代码,它不依赖任何实际计算机指令格式如下:2.5PL/O编译程序的目标代码结构和代码生成八条目标指令:(a为其他值均为非法指令)编译程序的目标代码生成在分析程序体时生成的当分析程序体中的每个语句时,当语法正确则调用目标代码生成过程以生成与PL/O语句等价功能的目标代码,直到编译正常结束由过程GEN完成,GEN有三个参数,分别代表目标代码的功能码,层差和位移量例如:gen(opr,0,16)从命令行读入一个输入到栈顶生成的代码顺序放在数组CODE中CODE为一维数组,数组元素为记录型数据,每一个记录就是一条目标指令CX为指令的指针,由0开始顺序增加PL/O源程序和对应的目标程序的清单:0jmp08

8是主程序入口1jmp02

2是P过程入口2int03在运行栈中申请3个栈空间3lod13将变量b取至栈顶4lit010将常量10取到栈顶5opr02次栈顶与栈顶相加,结果放在次栈顶6sto14将栈顶的内容放入变量C的单元中7opr00过程调用结束后,返回调用点8int05在运行栈中申请5个栈空间consta=10;

varb,c;

procedurep;

begin

c:=b+a;

end;namekindval/leveladrsizeaconstant10bvariable03cvariable04pprocedure0239opr016从命令行读入输入置于栈顶10sto03将栈顶值存入变量11lod03将变量取至栈顶12lit00将常值0进栈13opr09次栈顶与栈顶是否不等结果放入次栈顶14jpc024当栈顶内容为非真时,转向2415cal02调用入口地址216lit02将常量2取到栈顶17lod04将变量取至栈顶18opr04次栈顶与栈顶相乘放入次栈顶19opr014栈顶输出到屏幕20opr015屏幕输入换行21opr016从命令行读入一个输入到栈顶22sto03将栈顶的内容送入变量b的单元中23jmp011无条件转向地址1124opr00过程调用结束后,返回调用点

begin

read(b);

whileb#0do

begincallp;write(2*c);read(b);

end

end.1.PL/O编译程序对语法错误的两种处理方法:对于易于校正的错误,如丢了逗号、分号等,则指出出错位置,并加以校正。校正的方式就是补上逗号或分号2.6PL/O编译程序的语法错误处理对于难于校正的错误,跳过一些后面输入的单词符号,直到读入一个能使编译程序恢复正常语法分析工作的单词为止。具体做法是:当语法分析进入或退出一个语法单元的处理程序时,调用一个测试程序TEST,其流程图如2.9所示:它的功能是检查当前单词是否属于该语法单元的开始符号集合或后跟符号集合表2.3PL/0文法非终结符的开始符号与后继符号集合表非终结符名开始符号集合后继符号集合分程序constvarprocedureidentifcallbeginwhilereadwrite.;语句identcallbeginifwhilereadwrite.;end条件odd+-(

identnumberthendo表达式+-(

identnumber.;)ropendthendo项identnumber(.;)

rop+-

endthendo因子identnumber(.;+-*/

endthendo*注:表2.3中'rop'表示关系运算符集合,如=,#,<,<=,>,>=。TEST测试过程三个参数的含义:①S1当语法分析进入或退出某一语法单元时当前单词符号应属于的集合,它可能是一个语法单元开始符号的集合或后继符号的集合②S2在某一出错状态时,可恢复语法分析继续正常工作的补充单词符号集合③n整型数,出错信息编号2.PL/O编译程序对语义错误如标识符未加说明就引用,或虽经说明,但引用与说明的属性不一致。这时只给出错误信息和出错的位置,编译工作可继续进行3.PL/O编译程序对运行错如溢出、越界等,只能在运行时发现,由于PL/O编译程序的功能限制无法指出运行时所发生的错误在源程序的对应位置4.PL/O语言的出错信息表:出错编号出错原因1:常数说明中的“=”写成“∶=”。2:常数说明中的“=”后应是数字。3:常数说明中的标识符后应是“=”。4:const,var,procedure后应为标识符。5:漏掉了‘,’或‘;’。6:过程说明后的符号不正确(应是语句开始符,或过程定义符)。7:应是语句开始符。8:程序体内语句部分的后跟符不正确。出错编号出错原因9:程序结尾丢了句号‘.’。10:语句之间漏了‘;’。11:标识符未说明。12:赋值语句中,赋值号左部标识符属性应是变量。13:赋值语句左部标识符后应是赋值号‘∶=’。14:call后应为标识符。15:call后标识符属性应为过程。16:条件语句中丢了‘then’。17:丢了‘end“或’;‘。18:while型循环语句中丢了'do'。出错编号出错原因19:语句后的符号不正确。20:应为关系运算符。21:表达式内标识符属性不能是过程。22:表达式中漏掉右括号‘)’。23:因子后的非法符号。24:表达式的开始符不能是此符号。31:数越界。32:read语句括号中的标识符不是变量。存储区:数组CODE存放目标程序运行时的数据区SS是由解释程序定义的一维整型数组由于PL/O语言的目标程序是一种假想的栈式计算机的汇编语言,现仍用Pascal语言解释执行2.7PL/O编译程序的目标代码解释执行时的存储分配解释执行时的数据空间S为栈式计算机的存储空间遵循后进先出规则,对每个过程(包括主程序)当被调用时,才分配数据空间,退出过程时,所分配的数据空间被释放解释程序定义了4个寄存器:①I指令寄存器:存放当前正在解释的一条目标指令②P程序地址寄存器:指向下一条要执行的目标程序的地址(相当目标程序CODE数组的下标)③T栈顶寄存器。指向当前栈中最新分配的单元(T也是数组S的下标)。每个过程当它被调用时,给它分配的数据空间(下边称数据段)可分成两部分:静态部分:包括变量存放区和三个联系单元动态部分:作为临时工作单元和累加器用。需要时随时分配,用完后立即释放④B基址寄存器。指向当前执行过程的在数据区S中给该过程分配的数据段起始地址,称基地址当过程被调用时,在栈顶分配三个联系单元,这三个联系单元存放的内容分别为:①SL静态链:指向定义该过程的直接外过程(或主程序)运行时最新数据段的基地址②DL动态链:指向调用该过程前正在运行过程的数据段基地址③RA返回地址:记录调用该过程目标程序的断点,即当时的程序地址寄存器P的值。也就是调用过程指令的下一条指令的地址PL/O编译程序给每个过程定义的变量在数据段内分配的相对位置是从3开始顺序增加。前面的三个单元为上面指出的联系单元具体的过程调用和结束,对上述寄存器及3个联系单元的填写和恢复由下列目标指令完成(1)INT0A每个过程目标程序的入口都有这样一条指令,用以完成开辟数据段的工作A域的值指出数据段的大小,即为局部变量个数+3(联系单元个数为3)由编译程序的代码生成给出开辟数据段的结果是改变栈顶寄存器T的值,即T:=T+A(2)OPR00是每个过程出口处的一条目标指令用以完成该过程运行结束后释放数据段的工作,即退栈工作恢复调用该过程前正在运行的过程(或主程序)的数据段基地址寄存器的值和栈顶寄存器T的值,并将返回地址送到指令地址寄存器P中,以使调用前的程序从断点开始继续执行(3)CALLA为调用过程的目标指令L为层次差,它是寻找静态链的依据。A为被调用过程的目标程序入口CAL指令还完成填写静态链、动态链、返回地址,并将被调用过程的基地址值送入基址寄存器B中,目标程序的入口地址A的值送指令地址寄存器P中,使指令从A开始执行程序进入C过程中又调用B过程时数据区栈中的情况0jmp0141jmp072jmp033int034lit025sto236opr007int038lit019sto1310lod1311opr01412opr01513opr0014int0515cal0716opr00consta=6,b=8;varx,y;procedurep;

procedureq;x:=2;beginx:=1;write(x);end;begincallp;end.指令寄存器I:jmp014程序地址寄存器:P=10jmp0141jmp072jmp033int034lit025sto236opr007int038lit019sto1310lod1311opr01412opr01513opr0014int0515cal0716opr00consta=6,b=8;varx,y;procedurep;

procedureq;x:=2;beginx:=1;write(x);end;begincallp;end.指令寄存器I:int05程序地址寄存器:P=15基址B=0SL(0)DL(0)RA(0)执行0jmp0141jmp072jmp033int034lit025sto236opr007int038lit019sto1310lod1311opr01412opr01513opr0014int0515cal0716opr00consta=6,b=8;varx,y;procedurep;

procedureq;x:=2;beginx:=1;write(x);end;begincallp;end.指令寄存器I:cal07程序地址寄存器:P=16基址B=0SL(0)DL(0)RA(0)执行SL(0)DL(0)RA(16)程序地址寄存器:P=7基址B=50jmp0141jmp072jmp033int034lit025sto236opr007int038lit019sto1310lod1311opr01412opr01513opr0014int0515cal0716opr00consta=6,b=8;varx,y;procedurep;

procedureq;x:=2;beginx:=1;write(x);end;begincallp;end.指令寄存器I:lit01程序地址寄存器:P=9基址B=5SL(0)DL(0)RA(0)执行SL(0)DL(0)RA(16)10jmp0141jmp072jmp033int034lit025sto236opr007int038lit019sto1310lod1311opr01412opr01513opr0014int0515cal0716opr00consta=6,b=8;varx,y;procedurep;

procedureq;x:=2;beginx:=1;write(x);end;begincallp;end.指令寄存器I:sto13程序地址寄存器:P=10基址B=5SL(0)DL(0)RA(0)执行SL(0)DL(0)RA(16)110jmp0141jmp072jmp033int034lit025sto236opr007int038lit019sto1310lod1311opr01412opr01513opr0014int0515cal0716opr00consta=6,b=8;varx,y;procedurep;

procedureq;x:=2;beginx:=1;write(x);end;begincallp;end.指令寄存器I:opr00程序地址寄存器:P=14基址B=5SL(0)DL(0)RA(0)执行SL(0)DL(0)RA(16)11指令寄存器I:opr00程序地址寄存器:P=16基址B=00jmp0141jmp072jmp033int034lit025sto236opr007int038lit019sto1310lod1311opr01412opr01513opr0014int0515cal0716opr00consta=6,b=8;varx,y;procedurep;

procedureq;x:=2;beginx:=1;write(x);end;begincallp;end.指令寄存器I:opr00程序地址寄存器:P=14基址B=5SL(0)DL(0)RA(0)执行1指令寄存器I:opr00程序地址寄存器:P=16基址B=00jmp0141jmp072jmp033int034lit025sto236opr007int038lit019sto1310lod1311opr01412opr01513opr0014int0515cal0716opr00consta=6,b=8;varx,y;procedurep;

procedureq;x:=2;beginx:=1;write(x);end;begincallp;end.

…ProcedureA;…procedureB;…procedureC;…callB;……callC;……callB;……CallA;…

运行时数据栈S的变化状态MagneticResonanceImaging磁共振成像发生事件作者或公司磁共振发展史1946发现磁共振现象BlochPurcell1971发现肿瘤的T1、T2时间长Damadian1973做出两个充水试管MR图像Lauterbur1974活鼠的MR图像Lauterbur等1976人体胸部的MR图像Damadian1977初期的全身MR图像

Mallard1980磁共振装置商品化1989

0.15T永磁商用磁共振设备中国安科

2003诺贝尔奖金LauterburMansfierd时间MR成像基本原理实现人体磁共振成像的条件:人体内氢原子核是人体内最多的物质。最易受外加磁场的影响而发生磁共振现象(没有核辐射)有一个稳定的静磁场(磁体)梯度场和射频场:前者用于空间编码和选层,后者施加特定频率的射频脉冲,使之形成磁共振现象信号接收装置:各种线圈计算机系统:完成信号采集、传输、图像重建、后处理等

人体内的H核子可看作是自旋状态下的小星球。自然状态下,H核进动杂乱无章,磁性相互抵消zMyx进入静磁场后,H核磁矩发生规律性排列(正负方向),正负方向的磁矢量相互抵消后,少数正向排列(低能态)的H核合成总磁化矢量M,即为MR信号基础ZZYYXB0XMZMXYA:施加90度RF脉冲前的磁化矢量MzB:施加90度RF脉冲后的磁化矢量Mxy.并以Larmor频率横向施进C:90度脉冲对磁化矢量的作用。即M以螺旋运动的形式倾倒到横向平面ABC在这一过程中,产生能量

三、弛豫(Relaxation)回复“自由”的过程

1.

纵向弛豫(T1弛豫):

M0(MZ)的恢复,“量变”高能态1H→低能态1H自旋—晶格弛豫、热弛豫

吸收RF光子能量(共振)低能态1H高能态1H

放出能量(光子,MRS)T1弛豫时间:

MZ恢复到M0的2/3所需的时间

T1愈小、M0恢复愈快T2弛豫时间:MXY丧失2/3所需的时间;T2愈大、同相位时间长MXY持续时间愈长MXY与ST1加权成像、T2加权成像

所谓的加权就是“突出”的意思

T1加权成像(T1WI)----突出组织T1弛豫(纵向弛豫)差别

T2加权成像(T2WI)----突出组织T2弛豫(横向弛豫)差别。

磁共振诊断基于此两种标准图像磁共振常规h检查必扫这两种标准图像.T1的长度在数百至数千毫秒(ms)范围T2值的长度在数十至数千毫秒(ms)范围

在同一个驰豫过程中,T2比T1短得多

如何观看MR图像:首先我们要分清图像上的各种标示。分清扫描序列、扫描部位、扫描层面。正常或异常的所在部位---即在同一层面观察、分析T1、T2加权像上信号改变。绝大部分病变T1WI是低信号、T2WI是高信号改变。只要熟悉扫描部位正常组织结构的信号表现,通常病变与正常组织不会混淆。一般的规律是T1WI看解剖,T2WI看病变。磁共振成像技术--图像空间分辨力,对比分辨力一、如何确定MRI的来源(一)层面的选择1.MXY产生(1H共振)条件

RF=ω=γB02.梯度磁场Z(GZ)

GZ→B0→ω

不同频率的RF

特定层面1H激励、共振

3.层厚的影响因素

RF的带宽↓

GZ的强度↑层厚↓〈二〉体素信号的确定1、频率编码2、相位编码

M0↑--GZ、RF→相应层面MXY----------GY→沿Y方向1H有不同ω

各1H同相位MXY旋进速度不同同频率一定时间后→→GX→沿X方向1H有不同ω沿Y方向不同1H的MXYMXY旋进频率不同位置不同(相位不同)〈三〉空间定位及傅立叶转换

GZ----某一层面产生MXYGX----MXY旋进频率不同

GY----MXY旋进相位不同(不影响MXY大小)

↓某一层面不同的体素,有不同频率、相位

MRS(FID)第三节、磁共振检查技术检查技术产生图像的序列名产生图像的脉冲序列技术名TRA、COR、SAGT1WT2WSETR、TE…….梯度回波FFE快速自旋回波FSE压脂压水MRA短TR短TE--T1W长TR长TE--T2W增强MR最常用的技术是:多层、多回波的SE(spinecho,自旋回波)技术磁共振扫描时间参数:TR、TE磁共振扫描还有许多其他参数:层厚、层距、层数、矩阵等序列常规序列自旋回波(SE),快速自旋回波(FSE)梯度回波(FE)反转恢复(IR),脂肪抑制(STIR)、水抑制(FLAIR)高级序列水成像(MRCP,MRU,MRM)血管造影(MRA,TOF2D/3D)三维成像(SPGR)弥散成像(DWI)关节运动分析是一种成像技术而非扫描序列自旋回波(SE)必扫序列图像清晰显示解剖结构目前只用于T1加权像快速自旋回波(FSE)必扫序列成像速度快多用于T2加权像梯度回波(GE)成像速度快对出血敏感T2加权像水抑制反转恢复(IR)水抑制(FLAIR)抑制自由水梗塞灶显示清晰判断病灶成份脂肪抑制反转恢复(IR)脂肪抑制(STIR)抑制脂肪信号判断病灶成分其它组织显示更清晰血管造影(MRA)无需造影剂TOF法PC法MIP投影动静脉分开显示水成像(MRCP,MRU,MRM)含水管道系统成像胆道MRCP泌尿路MRU椎管MRM主要用于诊断梗阻扩张超高空间分辨率扫描任意方位重建窄间距重建技术大大提高对小器官、小病灶的诊断能力三维梯度回波(SPGR) 早期诊断脑梗塞

弥散成像MRI的设备一、信号的产生、探测接受1.磁体(Magnet):静磁场B0(Tesla,T)→组织净磁矩M0

永磁型(permanentmagnet)常导型(resistivemagnet)超导型(superconductingmagnet)磁体屏蔽(magnetshielding)2.梯度线圈(gradientcoil):

形成X、Y、Z轴的磁场梯度功率、切换率3.射频系统(radio-frequencesystem,RF)

MR信号接收二、信号的处理和图象显示数模转换、计算机,等等;MRI技术的优势1、软组织分辨力强(判断组织特性)2、多方位成像3、流空效应(显示血管)4、无骨骼伪影5、无电离辐射,无碘过敏6、不断有新的成像技术MRI技术的禁忌证和限度1.禁忌证

体内弹片、金属异物各种金属置入:固定假牙、起搏器、血管夹、人造关节、支架等危重病人的生命监护系统、维持系统不能合作病人,早期妊娠,高热及散热障碍2.其他钙化显示相对较差空间分辨较差(体部,较同等CT)费用昂贵多数MR机检查时间较长1.病人必须去除一切金属物品,最好更衣,以免金属物被吸入磁体而影响磁场均匀度,甚或伤及病人。2.扫描过程中病人身体(皮肤)不要直接触碰磁体内壁及各种导线,防止病人灼伤。3.纹身(纹眉)、化妆品、染发等应事先去掉,因其可能会引起灼伤。4.病人应带耳塞,以防听力损伤。扫描注意事项颅脑MRI适应症颅内良恶性占位病变脑血管性疾病梗死、出血、动脉瘤、动静脉畸形(AVM)等颅脑外伤性疾病脑挫裂伤、外伤性颅内血肿等感染性疾病脑脓肿、化脓性脑膜炎、病毒性脑炎、结核等脱髓鞘性或变性类疾病多发性硬化(MS)等先天性畸形胼胝体发育不良、小脑扁桃体下疝畸形等脊柱和脊髓MRI适应证1.肿瘤性病变椎管类肿瘤(髓内、髓外硬膜内、硬膜外),椎骨肿瘤(转移性、原发性)2.炎症性疾病脊椎结核、骨髓炎、椎间盘感染、硬膜外脓肿、蛛网膜炎、脊髓炎等3.外伤骨折、脱位、椎间盘突出、椎管内血肿、脊髓损伤等4.脊柱退行性变和椎管狭窄症椎间盘变性、膨隆、突出、游离,各种原因椎管狭窄,术后改变,5.脊髓血管畸形和血管瘤6.脊髓脱髓鞘疾病(如MS),脊髓萎缩7.先天性畸形胸部MRI适应证呼吸系统对纵隔及肺门区病变显示良好,对肺部结构显示不如CT。胸廓入口病变及其上下比邻关系纵隔肿瘤和囊肿及其与大血管的关系其他较CT无明显优越性心脏及大血管大血管病变各类动脉瘤、腔静脉血栓等心脏及心包肿瘤,心包其他病变其他(如先心、各种心肌病等)较超声心动图无优势,应用不广腹部MRI适应证主要用于部分实质性器官的肿瘤性病变肝肿瘤性病变,提供鉴别信息胰腺肿瘤,有利小胰癌、胰岛细胞癌显示宫颈、宫体良恶性肿瘤及分期等,先天畸形肿瘤的定位(脏器上下缘附近)、分期胆道、尿路梗阻和肿瘤,MRCP,MRU直肠肿瘤骨与关节MRI适应证X线及CT的后续检查手段--钙质显示差和空间分辨力部分情况可作首选:1.累及骨髓改变的骨病(早期骨缺血性坏死,早期骨髓炎、骨髓肿瘤或侵犯骨髓的肿瘤)2.结构复杂关节的损伤(膝、髋关节)3.形状复杂部位的检查(脊柱、骨盆等)软件登录界面软件扫描界面图像浏览界面胶片打印界面报告界面报告界面2合理应用抗菌药物预防手术部位感染概述外科手术部位感染的2/3发生在切口医疗费用的增加病人满意度下降导致感染、止血和疼痛一直是外科的三大挑战,止血和疼痛目前已较好解决感染仍是外科医生面临的重大问题,处理不当,将产生严重后果外科手术部位感染占院内感染的14%~16%,仅次于呼吸道感染和泌尿道感染,居院内感染第3位严重手术部位的感染——病人的灾难,医生的梦魇

预防手术部位感染(surgicalsiteinfection,SSI)

手术部位感染的40%–60%可以预防围手术期使用抗菌药物的目的外科医生的困惑★围手术期应用抗生素是预防什么感染?★哪些情况需要抗生素预防?★怎样选择抗生素?★什么时候开始用药?★抗生素要用多长时间?定义:指发生在切口或手术深部器官或腔隙的感染分类:切口浅部感染切口深部感染器官/腔隙感染一、SSI定义和分类二、SSI诊断标准——切口浅部感染

指术后30天内发生、仅累及皮肤及皮下组织的感染,并至少具备下述情况之一者:

1.切口浅层有脓性分泌物

2.切口浅层分泌物培养出细菌

3.具有下列症状体征之一:红热,肿胀,疼痛或压痛,因而医师将切口开放者(如培养阴性则不算感染)

4.由外科医师诊断为切口浅部SSI

注意:缝线脓点及戳孔周围感染不列为手术部位感染二、SSI诊断标准——切口深部感染

指术后30天内(如有人工植入物则为术后1年内)发生、累及切口深部筋膜及肌层的感染,并至少具备下述情况之一者:

1.切口深部流出脓液

2.切口深部自行裂开或由医师主动打开,且具备下列症状体征之一:①体温>38℃;②局部疼痛或压痛

3.临床或经手术或病理组织学或影像学诊断,发现切口深部有脓肿

4.外科医师诊断为切口深部感染

注意:感染同时累及切口浅部及深部者,应列为深部感染

二、SSI诊断标准—器官/腔隙感染

指术后30天内(如有人工植入物★则术后1年内)、发生在手术曾涉及部位的器官或腔隙的感染,通过手术打开或其他手术处理,并至少具备以下情况之一者:

1.放置于器官/腔隙的引流管有脓性引流物

2.器官/腔隙的液体或组织培养有致病菌

3.经手术或病理组织学或影像学诊断器官/腔隙有脓肿

4.外科医师诊断为器官/腔隙感染

★人工植入物:指人工心脏瓣膜、人工血管、人工关节等二、SSI诊断标准—器官/腔隙感染

不同种类手术部位的器官/腔隙感染有:

腹部:腹腔内感染(腹膜炎,腹腔脓肿)生殖道:子宫内膜炎、盆腔炎、盆腔脓肿血管:静脉或动脉感染三、SSI的发生率美国1986年~1996年593344例手术中,发生SSI15523次,占2.62%英国1997年~2001年152所医院报告在74734例手术中,发生SSI3151例,占4.22%中国?SSI占院内感染的14~16%,仅次于呼吸道感染和泌尿道感染三、SSI的发生率SSI与部位:非腹部手术为2%~5%腹部手术可高达20%SSI与病人:入住ICU的机会增加60%再次入院的机会是未感染者的5倍SSI与切口类型:清洁伤口 1%~2%清洁有植入物 <5%可染伤口<10%手术类别手术数SSI数感染率(%)小肠手术6466610.2大肠手术7116919.7子宫切除术71271722.4肝、胆管、胰手术1201512.5胆囊切除术8222.4不同种类手术的SSI发生率:三、SSI的发生率手术类别SSI数SSI类别(%)切口浅部切口深部器官/腔隙小肠手术6652.335.412.3大肠手术69158.426.315.3子宫切除术17278.813.57.6骨折开放复位12379.712.28.1不同种类手术的SSI类别:三、SSI的发生率延迟愈合疝内脏膨出脓肿,瘘形成。需要进一步处理这里感染将导致:延迟愈合疝内脏膨出脓肿、瘘形成需进一步处理四、SSI的后果四、SSI的后果在一些重大手术,器官/腔

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论