汇编教学的思考和实践

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

ASMYJW《汇编语言程序设计》教学的思考和实践苏州大学计算机科学与技术学院杨季文2013.05ASMYJW目录教学指导思想教学内容安排教学环境使用ASMYJW1、教学指导思想教学目标上承高级语言,下启机器系统。学习汇编语言目的不再是熟练运用汇编语言,而是比较深入理解高级语言的实现,更好地理解计算机的工作原理,全面提高程序设计开发能力。知其然,知其所以然。ASMYJW1、教学指导思想教学内容•汇编语言程序设计的一般方法•基于Intel80x86系列CPU的32位编程•处理器的功能及其运用•基本功能•存储管理•中断支持•输入输出ASMYJW1、教学指导思想教学方法依托高级语言,讲解低级语言。ASMYJW1、教学指导思想|教学方法inttest11(void){intsum,i;sum=0;for(i=1;i=10;i+=1)sum+=i*i;returnsum;}XOREAX,EAXMOVECX,1LAB1:MOVEDX,ECXIMULEDX,ECXADDEAX,EDXINCECXCMPECX,10JLELAB1RET高级语言和低级语言的对照(变量和寄存器)ASMYJW1、教学指导思想|教学方法intx=1;inty=2;voidtest12(void){y=x*x+3;return;}MOVEAX,?x@@3HAMOVECX,EAXIMULECX,EAXADDECX,3MOV?y@@3HA,ECXRET高级语言和低级语言的对照(变量和存储单元)ASMYJW1、教学指导思想教学方法依托高级语言,讲解低级语言。教学内容:语言语法;程序结构;指示命令;教学素材。教学环境:教学演示;程序调试。ASMYJW2、教学内容安排主要教学内容重点难点处理教学理念贯彻ASMYJW2、教学内容安排主要教学内容第1章引言第2章80x86处理器基本功能第3章程序设计初步第4章字符串操作和位操作第5章VC目标代码阅读理解第6章汇编语言第7章高级汇编语言技术第8章输入输出和中断第9章程序的优化(*)第10章80x86保护方式程序设计(*)ASMYJW2、教学内容安排重点难点处理第1章引言第2章80x86处理器基本功能第3章程序设计初步第4章字符串操作和位操作第5章VC目标代码阅读理解第6章汇编语言第7章高级汇编语言技术第8章输入输出和中断第9章程序的优化(*)第10章80x86保护方式程序设计(*)ASMYJW2、教学内容安排重点难点处理第1章引言第2章80x86处理器基本功能(存储器分段、存储器寻址方式)第3章程序设计初步(子程序设计)第4章字符串操作和位操作第5章VC目标代码阅读理解(堆栈、参数传递、优化)第6章汇编语言(段定义)第7章高级汇编语言技术第8章输入输出和中断第9章程序的优化(*)第10章80x86保护方式程序设计(*)ASMYJW2、教学内容安排重点难点处理•由浅入深•加强演示•加强实践•结合应用:生动、兴趣•固定陈设:简化•依托高级语言:比较、借鉴ASMYJW2、教学内容安排通过高级语言源程序的目标代码来说明LEA指令的妙用。设有如下所示的C++语言编写的函数:__fastcalltest22(intx,inty)//由寄存器传参数{return(2*x+5*y+100);}利用VC6编译器,在优化条件为“最快速度”的情况下,编译上述程序后,得到如下所示的目标代码,采用汇编格式指令的形式表示:LEAEAX,DWORDPTR[EDX+EDX*4+100];DWORDPTR表示存储单元是双字LEAEAX,DWORDPTR[EAX+ECX*2]RET;表示返回到调用者,这里代表test22结束返回取有效地址指令的应用ASMYJW2、教学内容安排设有如下所示的C++语言编写的函数:__fastcalltest24(intx){if(x='A'&&x='Z')x=x+('a'-'A');returnx;}MOVEAX,ECX;参数保存到EAXCMPEAX,65;与'A'比较JLSHORTLAB528;小于,则转移CMPEAX,90;与'Z'比较JGSHORTLAB528;大于,则转移ADDEAX,32;加上大小写字母ASCII码之间的差LAB528:RET数值大小比较ASMYJW2、教学内容安排讲解循环例:设有如下所示的C++语言编写的函数,这个函数的功能是计算1到n的和。为了较好地说明有关指令的应用,所以采用了一个循环,并安排了两个局部变量。__fastcalltest25(intn){intsum,i;sum=0;for(i=1;i=n;i++)sum+=i;returnsum;}ASMYJW2、教学内容安排例:采用早先的BorlandC++编译器,在优化条件为“最快速度”的情况下,得到如下所示16位的目标代码。其中,符号“SHORT”表示转移目标就在附近,相对转移时机器码中只要用一个字节表示差值。MOVCX,AX;把存放在AX中的参数n存到CX中XORBX,BX;使代表变量sum的BX为0(sum=0;)MOVAX,1;使代表变量i的AX为1(i=1;)JMPSHORTLAB114;无条件转移到标号LAB114处LAB58:ADDBX,AX;累加(sum+=i;)INCAX;(i++)LAB114:CMPAX,CX;比较i和nJLESHORTLAB58;当i=n,则转移到LAB58处,继续循环MOVAX,BX;把返回值保存到AX中RET;返回到调用者,这里代表函数test25结束返回讲解循环ASMYJW2、教学内容安排教学理念贯彻•重点讲解为了更好地理解、使用高级语言,所需要的内容•注意讲清为了更好地理解计算机工作原理、CPU基本功能,所对应的内容•不求全面,但求明白ASMYJW3、教学环境使用演示和实践的环境输入和输出的方法例题或素材的获取ASMYJW3、教学环境使用演示和实践的环境•VC集成开发环境◦查看目标代码和寄存器◦嵌入汇编方式进行编程和调试•DOS环境•汇编器和连接器的使用•保护方式功能学习•仿真环境•保护方式功能学习ASMYJW3、教学环境使用输入和输出的方法•前期,充分利用VC的输入、输出函数;•后期,DOS系统功能调用、BIOS调用、直接写屏等方式ASMYJW3、教学环境使用intesp1,esp2,esp3,esp4,esp5;_asm{MOVEAX,12345678HMOVesp1,ESPPUSHEAXMOVesp2,ESPPUSHAXMOVesp3,ESPPOPBXMOVesp4,ESPPOPECXMOVesp5,ESP}printf(originalESP=%x\n\n,esp1);printf(afterPUSHEAXESP=%x\n\n,esp2);printf(afterPUSHAXESP=%x\n\n,esp3);printf(afterPOPBXESP=%x\n\n,esp4);printf(afterpopECXESP=%x\n\n,esp5);验证堆栈操作的指针变化ASMYJW3、教学环境使用charstrmess[]=HELLOWORLD;intpos1,pos2;intmain(intargc,char*argv[]){__asm{CLDLEAESI,strmessMOVpos1,ESILODSBLODSWLODSDMOVpos2,ESI}printf(pos1=%x,pos2=%x\n,pos1,pos2);return0;}验证串装入指令功能的代码片断ASMYJW3、教学环境使用安排初始数据写一个把一位16进制数,转换为对应七段代码的程序片段。0654321MOVBL,xcode;取16进制数字码ANDBL,0FH;保证在0至F之间XORBH,BH;表内偏移用16位表示以便寻址MOVAL,tab[BX];取得对应的代码MOVycode,AL;保存charxcode,ycode;chartab[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0e};ASMYJW3、教学环境使用例题或素材的获取VC库函数strlen的实现VC库函数strchr的实现VC库函数memcpy的实现VC中switch语句的实现VC中for、while等语句的实现VC中函数参数传递的实现VC中指针功能的实现……ASMYJW3、教学环境使用strlenprocstringequ[esp+4];movecx,string;ecx-stringtestecx,3;testifstringisalignedon32bitsjeshortmain_loopstr_misaligned:;simplebyteloopuntilstringisalignedmoval,byteptr[ecx]incecxtestal,aljeshortbyte_3testecx,3jneshortstr_misalignedaddeax,dwordptr0;5bytenoptoalignlabelbelowVC库函数strlen数据对齐代码对齐ASMYJW3、教学环境使用main_loop:moveax,dwordptr[ecx];read4bytesmovedx,7efefeffhaddedx,eaxxoreax,-1xoreax,edxaddecx,4testeax,81010100hjeshortmain_loop;foundzerobyteintheloopmoveax,[ecx-4]testal,al;isitbyte0jeshortbyte_0testah,ah;isitbyte1jeshortbyte_1testeax,00ff0000h;isitbyte2jeshortbyte_2testeax,0ff000000h;isitbyte3jeshortbyte_3jmpshortmain_loop;takenifbits24-30areclearandbit31issetVC库函数strlen每次取4个字节,判断是否有结束符ASMYJW3、教学环境使用byte_3:leaeax,[ecx-1]movecx,stringsubeax,ecxretbyte_2:leaeax,[ecx-2]movecx,stringsubeax,ecxretbyte_1:leaeax,[ecx-3]movecx,stringsubeax,ecxretbyte_0:leaeax,[ecx-4]movecx,stringsubeax,ecxretstrlenendpVC库函数strlen4种不同的结束处理ASMYJW3、教学环境使用;设源和目标区域不重叠;-movex=((4-Dest&3)&3)bytes;-movey=((L-x)2)dwords;-move(L-x-y*4)bytes;CopyUp:testedi,11b;U-destinationdwordaligned?jnzshortCopyLeadUp;V-ifwearenotdwordalignedalready,alignshrecx,2;U-shiftdowntodwordcountandedx,11b;V-trailingbytecountcmpecx,8;U-testifsmallenoughforunwindcopyjbshortCopyUnwindUp;V-ifso,thenjumprepmovsd;N-moveallofourdwordsjmpdwordptrTrailUpVec[edx*4];N-processtrailingbytesVC库函数memcpy先对齐处理每次传4个字节太短,不值得串处理零头处理ASMYJW3、教学环境使用CopyLeadUp:;对齐处理入口moveax,edi;U-getdestinationoffsetmovedx,11b;V-prepar

1 / 33
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功