版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
汇编语言简介董千里Email:软件与微电子学院科协C\C++小组
讲课之前History机器语言 机器指令集合 一系列0、1二进制组合,转换为上下 电平,驱动计算机电子器件进行运算有什么优点、有什么缺点?难于记忆、编写、查错为什么学习汇编?Typicaluse操作系统bootloader、driver逆向工程游戏、多媒体使用IntelMMX、SSEseries指令集、AMD3DNOWFFMpeg中内联汇编使用MMX指令将机器码映射为助记符
将机器码映射为助记符
Assembler计算机体系结构RegisterALUCUBUSRAMADDBUSControlBUSDataBUS对存放器操作内存访问算术、逻辑运算条件控制存放器RegisterCPU内可存放数据Intel8086RegisterIntel8086Register(cont.)14个太多!存放器Register(cont.)我们先关注MainReg〔通用存放器〕16bitMainRegister可分为两个8bitRegX86中8bit=1byte(字节)2bytes=1word(字)4bytes=1dword(双字)
存放器Register(cont.)存放器赋值操作 movax,1 ax=1 movbx,ax bx=ax算术操作 addax,bx ax+=bx subax,bx ax-=bx现在我们可以写一些简单的计算程序Debug.exe在“开始->运行〞中启动debugDebug.exe(cont.)一些debug命令A以汇编形式将机器指令写入内存T单步执行U反汇编内存D查看内存内容R查改存放器E改写内存Debug.exe(cont.)使用a输入指令并执行内存访问8086地址线20bit可编址范围0-0xFFFFF存放器16bit如何使用16bit存放器表示20bit地址?内存访问(cont.)分段使用一个存放器存储基地址,一个存放器存储偏移地址8086约定的段存放器表示的基地址Base=segreg*16段存放器SegmentReg0000内存访问(cont.)SegmentRegistersDS、ES我们可以用来访存CS、SS分别用作代码段、堆栈段内存访问(cont.)使用DS访问内存ds:[add]Ds*16+addMovax,ds:[10]ds=B800h将位于B800h*16+10=0xB800A处16bit数据读入ax改变ds值movax,0b800hmovds,axIBMPCVGAVideoMode Themostused VGAvideomode foratextUIistextmode,ormode0.Thisisthemostcommonlyused,asitallowsdirectmemoryaccesstoalinearaddresscontainingeachcharacterandit'sassociatedattributes.Textmode0providesatextinterface80characterswideand25characterslinesperscreen.IBMPCVGA(cont.)VideoMemory Intextmode0,thelineartextbufferislocatedinphysicalat0xB8000.Readingandwritingtoandfromthisaddresswillprovidedirectmanipulationofonscreentext.ToaccessaparticularcharacteronthescreenfromXandYcoordinatesissimpleusingthefollowingformula:
position=(y_position*characters_per_line)+x_position;
Eachcharactertakesuptwobytesofspaceinmemory.Thefirstbyteissplitintotwosegments,theforecolour,andthebackcolour.Thesecondbyteisan8-bitASCIIvalueofthecharactertoprint.IBMPCVGA(cont.)Colours现在我们往屏幕打印文字!Hello,World!assumecs:code,ds:datadatasegment;datagoesheredataendscodesegmentstart:
;codegoeshere
;exit0 movax,4c00h int21hcodeendsendstartassumecs:code,ds:datacodesegmentstart: movax,0b800h movds,ax moval,'H' movds:[160],al movax,4c00h int21hcodeendsendstart程序总体思路将文字ASCII写入0xB8000h区域使用哪些存放器,如何访存?Hello,World!(cont.)MASM(MicrosoftAssembler)C:\>masmhello.asm; C:\>linkhello.obj; C:\>hello.exe分号(;)使用默认名称Hello,World!(cont.)改进版本将字符串复制
charmsg[]=“Hello,World〞;inti=0;while(msg[i])//汇编语言如何实现循环?{ //movmsg[i]tovideobuffer
i++;}Hello,World!(cont.)C语言的几种条件、分支if(exp)action;while(exp)action;for(exp1;exp2;exp3)action;Hello,World!(cont.)cmp指令 比较两个操作数的值=>flags条件跳转根据cmp比较结果进行跳转je(jmpequal)ja(jmpabove)jna(jmpnotabove)…
moval,‘H’movbl,0cmpal,bljneL1;;;;;L1:;;;;;Hello,World!(cont.)无条件跳转jmp
moval,‘H’jmpL1movbl,0;;斜体局部不执行cmpal,bljneL1;;;;;L1:;;;;;Hello,World!(cont.)循环如何使用条件分支实现循环???看看编译器是怎么翻译的。。。loopmovcx,5L1:subcx,1;;actioncmpcx,0jneL1;;;;;;;;endloopHello,World!(cont.)Reversedversionassumecs:code,ds:datadatasegmentmsg“Hello,World!〞,0dataendscodesegmentstart: ;codegoeshere ;exit0 movax,4c00h int21hcodeendsendstart13DF:0Hello…B800:0‘H’‘e’‘l’000B800:0B800:1B800:2B800:3B800:4B800:5Hello,World!(cont.)每次打印字符串都需要自己写显存,过于繁琐像Cruntime提供puts(),我们能否实现一个函数voidputs(intposx,intposy,constchar*)函数调用在程序运行中,CPU需要知道指令执行的位置函数调用就是改变指令执行位置,实现跳转函数调用(cont.)如何跳转?我们有jmp可以使用存放器传递我们的参数
;puts(x,y,str) ;action1 jmpputsputs: ;;action函数调用(cont.);ax-pos,ds:si-strputs: movdi,ax movax,0B800h moves,axL1: movbyteptrbl,ds:[si] cmpbl,0 jeL2 movbyteptres:[di],bl incsi adddi,2 jmpL1L2: jmpbef
datasegmentmsgdb‘Hello,World’,0dataendscodesegmentstart: movax,data movds,ax movax,160 movsi,0 jmpputsbef:
;exit0 movax,4c00h int21hcodeendsendstart
ANYBugs?函数调用(cont.)stackX86体系使用stack提供对函数调用支持ss:sp将内存用作stack,用来保存参数、函数地址等信息ref:USTC_1.pptpushpop函数调用(cont.)call当call指令发生时,cpu保存当前执行指令位置,跳转到指定地点callfunc相当于 pushcs:ip jmpfunc函数调用(cont.)ret用于函数返回。CPU从stack取出cs:ip完成返回改进Hello,World函数调用(cont.)参数传递使用stack进行参数传递ref:USTC_1.pptHello,World!(cont.)ReverseusingstackandcallENDofthisSection我们完成了一个简单的汇编HelloWorld请大家自行阅读王爽《汇编语言》吐血推荐!号外:AT&T汇编AT&T汇编语言和Intel汇编语言AT&T汇编语言中指令的操作数顺序与Intel相反AT&T
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年湘中幼儿师范高等专科学校高职单招笔试职业适应性测验试题库含答案解析3套试卷
- 2026年湖南环境生物职业技术学院高职单招笔试物理试题库含答案解析2套试卷
- 2026年湖南商务职业技术学院高职单招笔试物理试题库含答案解析2套试卷
- 2026年湖北水利水电职业技术学院高职单招笔试物理试题库含答案解析2套试卷
- 2026年渤海理工职业学院高职单招笔试综合素质试题库含答案解析3套试卷
- 2026年海南住院医师-海南住院医师精神科历年参考题库含答案解析
- 2026年浙江机电职业技术学院高职单招笔试数学试题库含答案解析3套试卷
- 2026年济宁职业技术学院高职单招笔试语文试题库含答案解析3套试卷
- 2026年法律知识法治建设知识竞赛-企业信息公示暂行条例及及配套规章知识历年参考题库含答案解析
- 2026年河南住院医师-河南住院医师中医骨伤科历年参考题库含答案解析
- 2026年秋新教材人教PEP版小学英语六年级上册教学计划及进度表
- 2026年春人教版小学六年级数学上册第2单元《分数乘法》完整教案
- 2026江苏盐城市大丰区西团镇人民政府招聘村级后备跟岗人员4人考试参考题库及答案详解
- 2026年学法考试题库(附答案)
- 烟草系统遴选常见试题及完整答案梳理
- 中远海运集团2026年第七次社招笔试真题
- 2026年山东省中考英语试题(含答案和音频)
- 2025-2026学年四川省凉山州七年级(下)期末数学试卷(含答案)
- 2026秋学期小学苏教版数学四年级上册教学计划
- 社会责任RBA8.0 责任商业联盟行为准则课件
- 设备的维护保养及点检
评论
0/150
提交评论