




已阅读5页,还剩37页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机系统I,第七章:汇编语言,计算机的代码是由0,1组成0001110010000110程序员使用机器语言编程非常困难,采用助记符号的形式来表示每条指令将会更好,和机器码的转换也比较容易ADDR6,R2,R6;incrementindexreg.,汇编语言:具有可读性的机器语言,汇编器(Assembler)是将符号语言翻译成机器指令的程序。汇编器是和机器的ISA是相关的:符号与指令集定义的指令保持相应的一致性用容易记忆的符号表示操作码内存的位置用标号表示为存储分配和数据的初始化提供额外的操作支持,汇编器,;Programtomultiplyanumberbytheconstant6;.ORIGx3050LDR1,SIXLDR2,NUMBERANDR3,R3,#0;ClearR3.Itwill;containtheproduct.;Theinnerloop;AGAINADDR3,R3,R2ADDR1,R1,#-1;R1keepstrackofBRpAGAIN;theiteration.;HALT;NUMBER.BLKW1SIX.FILLx0006;.END,一个简单的LC-3汇编语言程序,程序注释,伪操作指令,指令,程序代码的组成:可执行的机器指令伪操作指令(传递给编译器指导汇编工作,不可执行)注释符号之间加入空格,不区分字母的大小写注释(“;”开始),汇编器将忽略所有的注释指令格式:标号操作码操作数;注释,LC-3汇编语言的语法,操作码和LC-3指令集定义的操作码对应的助记符号,不能再用作标号,系统专用并保留具体参见AppendixAex:ADD,AND,LD,LDR,操作数寄存器数寄存器Rn,n是寄存器编号立即数数字用#(十进制)orx(十六进制)表示内存数标号,用符号表示的内存地址用,分割操作数数字,操作数的顺序以及类型和遵守机器码指令的定义,操作码、操作数,ADDR1,R1,R3ADDR1,R1,#3LDR6,NUMBERBRzLOOP,例子,LC-3只有两种基本数据类型定点整数:Integer16位补码字符:Character16位都占用16bitswide(aword)但实际字符只占用8bit,怎么存储?高位零扩展,数据类型,标号:Label放在每行代码的开始的地址符号,表示该行代码或数据的地址,符号化的内存地址.一般两种类型:分支和跳转语句的目标地址数据的存放地址ex:LOOPADDR1,R1,#-1BRpLOOPex:LDR2,NUMBERNUMBER.BLKW1,标号,注释:Comment;之后的所有字符都是注释汇编器将忽略所有的注释注释用于帮助程序员理解程序和存档的需求注释的技巧不要滥用注释,比如“R1加1”,没有提供比指令更多的信息提供更深的洞察力,比如“指针加1指向下一个访问的数据”分隔代码片段,注释,伪操作不对程序产生效果,不是执行指令仅供汇编器使用区别于指令,以.开始,编译器的伪操作,告诉编译器代码在内存中的起始地址一个程序只允许一个.ORIG伪操作PC在程序载入时初始化为.ORIG指向的地址Example:.ORIGx3000LC-3的用户程序的起始地址一般设置为x3000LC-3:内存分配x0000x00FF:TRAP向量表x0100x01FF中断向量表x0200x2FFF系统STACKx3000xFDFF用户程序区域xFE00xFFFF设备寄存器,伪操作:.ORIG,在内存中定义并初始化程序变量,可读写一个程序行只允许一个定义定义变量的大小总是16位的字,伪操作:.FILL,Examples:flag.FILLx0001counter.FILLx0002letter.FILLx0041faradr.FILLx4241,访问LDR1,flag;编译器会帮助产生PC相对寻址的偏移量LDIR1,faradr;编译器会帮助产生PC相对寻址的偏移量,用于内存单元的分配,适用操作数一开始不确定的场合;保留3个未命名的内存单元.BLKW3;保留1个命名的内存单元Bob.BLKW1;保留7个命名的内存单元并全部;初始化为4num.BLKW7#4,伪操作:.BLKW,在内存中定义1串字符串在内存中连续存放自动以0结束哨兵:“Null-terminated”每个字符高位0扩展,占用16位Example:hello:.STRINGZ“Hello!”访问:LEAR0,helloPUTS,伪操作:.STRINGZ,告诉编译器程序结束的地点一个程序只允许一个.END编译器在此停止编译,但不真正停止程序,伪操作:.END,inta;/simplevariable(uninialized)intb=2014;/simpleintializedvariableintc10;/arrayof10(uninialized)a.BLKW1;simplevariable(or.FILL0)b.FILL#2014;simpleinitializedvariablec.BLKW10#0;arrayoftenints(initializedto0)b=a;LDR0,a;loadfrommemorytoaregisterSTR0,b;storefromregistertomemoryb=a+1;LDR0,a;loadfrommemorytoaregisterADDR0,R0,#1;incrementvalueSTR0,b;storefromregistertomemory,Cvs.ASM,LC-3汇编器提供trap“伪指令”,方便编程员使用,无需记忆系统调用号,Trap指令,Trap指令使用,输出一个字符,显示字符串,TRAPx21orOUT;thecharmustbeinR0,LEAR0,helloPUTShello.STRINGZ“Hello!”,Trap指令使用,读入一个字符,停机,TRAPx20orGETC;willgointoR07:0,noecho.,TRAPx25orHALT,.ORIGx3000.yourcodegoeshere.HALTyourmemoryvariabledefinition.END,汇编语言程序格式,养成良好的编程风格,增强程序的可读性和可理解性。养成写程序头的习惯,加入作者的名字,日期,以及程序的功能等.。标号,操作码,操作数,注释都要列对齐。(除非整行都是注释)寄存器需要注释其用途。为程序加入注释。,编程风格,符号的名字要有意义。加入适当的大写和小写字母。ASCIItoBinary,InputRoutine,SaveR1不同的程序段加入注释分割。尽量一行一条指令。较长的描述要整齐的分段。,编程风格,统计文件中特定字符的出现次数?还记得吗,第5章的例子,示例程序,;Programtocountoccurrencesofacharacterinafile.;Charactertobeinputfromthekeyboard.;Resulttobedisplayedonthemonitor.;Programonlyworksifnomorethan9occurrencesarefound.;;;Initialization;.ORIGx3000ANDR2,R2,#0;R2iscounter,initially0LDR3,PTR;R3ispointertocharactersGETC;R0getscharacterinputLDRR1,R3,#0;R1getsfirstcharacter;Testcharacterforendoffile;TESTADDR4,R1,#-4;TestforEOT(ASCIIx04)BRzOUTPUT;Ifdone,preparetheoutput,汇编语言的实现(1/3),程序头,程序片段的注释分割,程序注释,标注寄存器的功能,程序注释,标注指令功能,汇编语言的实现(2/3),;Testcharacterformatch.Ifamatch,incrementcount.;NOTR1,R1ADDR1,R1,R0;Ifmatch,R1=xFFFFNOTR1,R1;Ifmatch,R1=x0000BRnpGETCHAR;Ifnomatch,donotincrementADDR2,R2,#1;Getnextcharacterfromfile.;GETCHARADDR3,R3,#1;Pointtonextcharacter.LDRR1,R3,#0;R1getsnextchartotestBRnzpTEST;Outputthecount.;OUTPUTLDR0,ASCII;LoadtheASCIItemplateADDR0,R0,R2;CovertbinarycounttoASCIIOUT;ASCIIcodeinR0isdisplayed.HALT;Haltmachine,汇编语言的实现(2/3),;StorageforpointerandASCIItemplate;ASCII.FILLx0030PTR.FILLx4000.END,设计实例,设计汇编语言程序实现:c=axorb,.ORIGx3000LDR2,ZeroLDR0,M0LDR1,M1LoopBRzDoneADDR2,R2,R0ADDR1,R1,#-1BRnzpLoopDoneSTR2,ResHALTRes.FILLx0000Zero.FILLx0000M0.FILLx0007M1.FILLx0003.END,Discussion:LC-3汇编程序分析,程序分析:1程序功能是什么?2最终RES的值是什么?,设计汇编语言程序实现c=2a+b提示用户输入一个数字,并回显。pleaseinputanumber(09):99,课堂练习,把汇编语言源程序(.asm)转换为可执行机器代码的过程(.obj)过程:两遍扫描第一遍(FirstPass):创建符号表扫描源程序文件找到所有的标号,并计算对应的地址产生所谓的符号表(symboltable)第二遍(SecondPass):生成机器语言程序代码利用符号表信息将指令转化为机器语言代码,LC-3汇编过程,找到.ORIG伪操作确定第一条指令的起始汇编地址初始化地址跟踪计数器(LC:locationcounter),用于记录每条当前指令的地址依次扫描源程序的每一行代码如果代码行存在标号,将标号和指令对应的LC添加到符号表中.LC+1:如果碰到伪指令.BLKW或.STRINGZ,则LC的增量为对应分配的字数。空行不处理。碰到.END伪操作则停止汇编过程。,第一遍:创建符号表,生成图7-2程序的符号表,例子,课堂练习:创建程序的符号表,;Programtomultiplyanumberbytheconstant6;.ORIGx3050LDR1,SIXLDR2,NUMBERANDR3,R3,#0;ClearR3.Itwill;containtheproduct.;Theinnerloop;AGAINADDR3,R3,R2ADDR1,R1,#-1;R1keepstrackofBRpAGAIN;theiteration.;HALT;NUMBER.BLKW1SIX.FILLx0006;.END,对每条可执行的指令,将其转换为机器语言代码如果操作数是一个标号,从符号表中查找其地址并计算可能存在的问题:操作数个数或类型不对ex:NOTR1,#7ADDR1,R2ADDR3,R3,NUMBER立即数的范围太大ex:ADDR1,R2,#1023标号对应的地址相聚指令太远超过了PC相对寻址的范围(-256+255),第二遍:生成机器语言程序代码,练习:利用符号表的信息将可执行指令转化为机器语言代码,;Programtomultiplyanumberby;theconstant6;.ORIGx3050LDR1,SIXLDR2,NUMBERANDR3,R3,#0;ClearR3.Itwill;containtheproduct.;Theinnerloop;AGAINADDR3,R3,R2ADDR1,R1,#-1;R1keepstrackofBRpAGAIN;theiteration.;HALT;NUMBER.BLKW1SIX.FILLx0006;.END,利用“assemble”(Unix)orLC3Edit(Windows),产生不同的输出文件,LC-3汇编器,可执行机器码文件,LC-3目标文件包含以下内容起始装载地址,随后是机器语言代码例子:Beginningof“countcharacter”objectlikethis:,目标文件格式,一个目标文件可能不包含所有程序执行所需要的机器代码系统提供的库调用共享别人的成果,事先写好的子程序等LC-3simulator,可以加载多个目标文件到内存,然后从指定地址执行系统调用,比如键盘输入或是显示输出等是自动装载的装入到“systemmemory,”位于x3000以下用户例程应该加载到x3000andxFDFF每个目标文件都有起始地址,但装载时要注意不能重合覆盖,多个目标文件,Loading(加载)将可执行文件拷贝到内存中.大多数的加载器
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 导购员工作总结(汇编15篇)
- 全国内地西藏班2025届九年级下学期中考一模物理试卷(含答案)
- 河北省邯郸市第二十五中学2024-2025学年八年级下学期期中考试数学试卷(含答案)
- 汉字家园木字旁课件
- 2024-2025学年山东省聊城市阳谷实验中学七年级(下)6月月考数学试卷(含答案)
- 汉字基本笔画笔顺课件
- 幼儿安全工作总结集锦15篇
- 金融科技创新应对挑战策略
- 求平均数的课件
- 永联消防知识培训课件学校
- 软件咨询面试题目及答案
- 2025年艾梅乙知识竞赛试题及答案
- 云南航空产业投资集团招聘笔试真题2024
- 2025年农产品质量安全追溯体系构建与农业供应链管理创新报告
- 2025年高考语文全国一卷试题真题及答案详解(精校打印)
- GB/T 13947-1992电子元器件塑料封装设备通用技术条件
- 学院绩效考核办法和考核细则
- 宗族祠堂的当代文化价值
- 《HSK标准教程1》第3课课件
- GB∕T 3185-2016 氧化锌(间接法)
- DB37∕T 5023-2014 非透明幕墙建筑外保温系统应用技术规程
评论
0/150
提交评论