




已阅读5页,还剩51页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
复习与总结,中国地质大学(武汉)计算机学院,汇编语言,2,寄存器,3,寄存器,4,寄存器,【SP、BP、SI、DI】四个16位寄存器可以象数据寄存器一样在运算过程中存放操作数,但它们只能以字(16位)为单位使用。此外,它们更经常的用途是在存储器寻址时,提供偏移地址。因此,它们可称为指针或变址寄存器。,5,寄存器,6,标志寄存器,7,DEBUG,-U:查看汇编指令【-U1000:0】-R:查看、修改寄存器的值【-RAX】修改寄存器AX的值-T:执行命令-D:查看内存【-D段地址:偏移地址】如:【-D1000:0】【-D1000:09】-E:改写内存【-E段地址:偏移地址数据】如:【-E1000:012345】【-E1000:0abc】【-E1000:0“welcommasm”】-A:写汇编指令到内存【-A1000:0】movax,111.,8,对内存单元的操作,如果未指定寄存器,对内存单元的操作采用以下形式:【1】wordptr指定访问的内存单元为字单元,如:movwordptrds:01incwordptrbxincwordptrds:0addwordptrbx,2【2】byteptr指定访问的内存单元为字节单元,如:movbyteptrds:01incbyteptrbxincbyteptrds:0addbyteptrbx,2,9,寻址方式,10,定义数据,11,直接定址表,像这种可以通过依据数据,直接计算出所要找的元素的位置的表,我们称其为:直接定址表。tabledb0123456789ABCDEF;字符表moval,tablebx;标号+下标,12,直接定址表,assumecs:codecodesegmentadb1,2,3,4,5,6,7,8bdw0start:movsi,0movcx,8s:moval,asimovah,0addb,axincsiloopsmovax,4c00hint21hcodeendsendstart,assumecs:codecodesegmenta:db1,2,3,4,5,6,7,8b:dw0start:movsi,offsetamovbx,offsetbmovcx,8s:moval,cs:simovah,0addcs:bx,axincsiloopsmovax,4c00hint21hcodeendsendstart,13,直接定址表,对于程序中的adb1,2,3,4,5,6,7,8指令:moval,asi相当于:moval,cs:0si指令:moval,a3相当于:moval,cs:03指令:moval,abx+si+3相当于:moval,cs:0bx+si+3,14,直接定址表,数据标号包含了对单元长度的描述,所以,在指令中,它可以代表一个段中的内存单元。对于程序中的bdw0。指令:movax,b相当于:movax,cs:8指令:movb,2相当于:movwordptrcs:8,2指令:incb相当于:incwordptrcs:8在这些指令中,标号b代表了一个内存单元,地址为code:8,长度为2字节。,15,直接定址表(用于子函数地址入口),setscreen:;ah子功能号,0-sub1,1-sub2,2-sub3,3-sub4jmpshortsettabledwsub1,sub2,sub3,sub4set:pushbxcmpah,3;判断传递的子功能号是否大于3jasretmovbl,ahmovbh,0addbx,bx;根据ah中的功能号计算对应子程序的地址在table表中的偏移callwordptrtablebx;调用对应的功能子程序sret:popbxiret,16,直接定址表(用于子函数地址入口),另一种子程序跳转实现方式:ah子功能号,setscreen:cmpah,0jedo1cmpah,1jedo2cmpah,2jedo3cmpah,3jedo4jmpshortsret,do1:callsub1jmpshortsretdo2:callsub2jmpshortsretdo3:callsub3jmpshortsretdo4:callsub4sret:iret,17,jmp指令,18,call与ret,19,子程序框架:call和ret的配合使用,子程序的框架:标号:指令ret具有子程序的源程序的框架:,20,子程序参数的传递,寄存器:适用于参数少时。变量:适用于同一源文件(程序模块)中。堆栈:只适用于传递入口参数。通过地址表传送参数地址,21,通过栈传递参数,movax,0123hpushaxmovax,0456hpushaxcalladdfun.addfun:pushbpmovbp,spmovax,bp+4addax,bp+6popbpret4,计算0123h与0456h的和参数一,入栈参数二,入栈call时,会有pushIP的调用备份bp,此时栈里已有四个数据通过bp取参数,默认段为:ssax=?ax=?描述:popIPaddsp,4,22,寄存器冲突的解决,子程序多重循环pushcxpopcx,23,seg,offset,24,其他指令,25,其他指令,26,adc,sbb,27,adc指令,程序代码1EF0001000H+2010001EF0Haxbxcxmovax,001EHmovbx,0F000Hmovcx,1000Haddcx,1EF0Hadcbx,1000Hadcax,0020H,28,sbb指令,比如,计算003E1000H00202000H结果放在ax,bx中,程序如下:movbx,1000Hmovax,003EHsubbx,2000Hsbbax,0020H,29,mul指令,30,div指令,31,cmp指令:cmpax,bx,32,条件转移指令(无符号数比较,与cmp配合使用),cmpax,bx,33,movsb、movsw指令,(1)rep【描述】s:movsbloops【说明】此指令需配合movsb、movsw使用。(2)movsb【功能】将ds:si指向的内存单元中的字节送入es:di中,然后根据标志寄存器DF位的值,将si和di递增或递减【描述】(es*16+di)=(ds*16+si)if(df=0)incsi;incdi;elseif(df=1)decsi;decdi;【使用】repmovsb,34,movsb、movsw指令,(3)movsw【功能】将ds:si指向的内存单元中的字节送入es:di中,然后根据标志寄存器DF位的值,将si和di递增或递减【描述】(es*16+di)=(ds*16+si)if(df=0)addsi,2;adddi,2;elseif(df=1)subsi,2;subdi,2;【使用】repmovsw(4)标志寄存器DF值的设定【cld】:将DF位置设定为0【std】:将DF位置设定为1,35,movsb、movsw指令,(5)实例,36,显示字符,显示缓冲区:B8000HBFFFFH(32K)共分为8页,第页4K左右,默认显示第0页,即地址为B8000HB8F9FH的内存(4000字节)显示器:80行,25列往指定内存传送数据,会显示在屏幕上一个字符占两个字节低位:ASCII码高位:字符属性,37,显示字符,高位:字符属性,红底绿字:01000010B红底闪烁绿字:11000010B红底高亮绿字:01001010B黑底白字:00000111B白底蓝字:01110001B,38,12.3中断向量表,对于8086PC机,中断向量表指定放在内存地址0处。从内存0000:0000到0000:03FF的1024个单元中存放着中断向量表。我们可以用中断类型码,在中断向量表中找到中断处理程序的入口。然后用它设置CS和IP,使CPU执行中断处理程序。中断号:N,则中断例程的入口地址在中断向量表中可以这样获取:IP=N*4,CS=N*4+2,39,中断执行步骤,中断执行的步骤如下:【1】取得中断类型码N【2】pushf【3】IF=0,IF=0,禁止可屏蔽中断,禁止单步中断【4】pushCS【5】pushIP【6】IP=N*4,CS=N*4+2,中断例程的跳转,设定CS,IP,40,assumecs:codecodesegmentstart:movax,csmovds,axmovsi,offsetdo0;设置ds:si指向源地址movax,0moves,axmovdi,200h;设置es:di指向目的地址movcx,offsetdo0end-offsetdo0;设置cx为传输长度cld;设置传输方向为正repmovsb;设置中断向量表movax,0moves,axmovwordptres:0*4,200hmovwordptres:0*4+2,0movax,4c00hint21h,41,do0:jmpshortdo0startdboverflow!do0start:movax,segdo0;获取标号所在段地址movds,axmovsi,offsetdo0;获取标号所在段的偏移地址addsi,2;去除前面的jmp指令;设置ds:si指向字符串movax,0b800hmoves,axmovdi,12*160+36*2;设置es:di指向显存空间的中间位置movcx,9;设置cx为字符串长度s:moval,simoves:di,alincsiadddi,2loopsmovax,4c00hint21hdo0end:nopcodeendsendstart,42,BIOS中断例程应用,int10h中断例程的设置光标位置功能。movah,2;2号功能movbh,0;页数movdh,5;第5行movdl,12;第12列int10h;10号中断调用,43,DOS中断例程应用,编程:在屏幕的5列12行显示字符串“Welcometomasm!”。,assumecs:codedatasegmentdbWelcometomasm!,$dataendscodesegmentstart:movah,2;置光标movbh,0;第0页movdh,5;dh中放行号movdl,12;dl中放列号int10hmovax,datamovds,axmovdx,0;ds:dx指向字符串的首地址data:0movah,9int21hmovax,4c00hint21hcodeendsendstart,44,端口,CMOS端口访问首先,需要将要访问的端口地址,发送到70h端口,然后,再从71h端口读出要访问的数据内容。,45,BCD码,BCD码的存放方式:数码:01234BCD码:00000001001000110100数码:56789BCD码:01010110011110001001比如:数值26,用BCD码表示为:00100110,46,键盘消息接收,中断16的0号功能:从键盘接收一个字符,47,文件读写(21h),48,文件读写,assumecs:codeseg,ds:datas,ss:stkstksegmentstackdb128dup(0)stkendsdatassegmentstrdatadb1234567890qwertyuiopasdfghjklzxcvbnm!#%设置栈段movax,stkmovss,axmovsp,128callCreateFilecallWriteFilecallReadFile,movax,segtgtdatamovds,axmovsi,offsettgtdatamovbl,01000001bmovdh,5movdl,8callDisplayStringInDefinePosmovax,4c00hint21h,50,创建文件,;子函数创建文件CreateFile:pushaxpushbxpushcxpushdxpushds;创建文件movcx,0;文件属性movdx,segfilenamemovds,dx,movdx,offsetfilenamemovah,3ch;3c号功能,创建文件int21h;返回:ax-文件代号;关闭文件;movbx,ax;文件代号;movah,3eh;关闭;int21hpopdspopdxpopcxpopbxpopaxret,51,将数据写入文件,;子函数写入字符串到文件中WriteFile:pushaxpushbxpushcxpushdxpushds;打开文件movdx,segfilenamemovds,dxmovdx,offsetfilenamemovah,3dh;4d号功能,打开文件moval,3;0-读,1-写,3-读/写int21h;ax-返回的文件代号movbx,ax;文件代号放在bx中,;往文件中写数据movdx,segstrdatamovds,dxmovdx,offsetstrdatamovcx,85;要写的数据长度,字节数;源数据区共有85个字符;movbx,ax;文件代号,已放在bxmovah,40h;写文件int21h;关闭文件;movbx,ax;文件代号,已放在bxmovah,3eh;关闭int21hpopdspopdxpopcxpopbxpopaxret,52,从文件中读取数据,;子函数从文件中,读取字符串ReadFile:pushaxpushbxpushcxpushds;打开文件movcx,0;文件属性movdx,segfilenamemovds,dxmovdx,offsetfilenamemovah,3dh;4d号功能,打开文件moval,3;0-读,1-写,3-读/写int21h;ax-返回的文件代号movbx,ax;文件代号放在bx中;从文件中读取数据,读到目标区tgtdata中ds:dx,movdx,segtgtdatamovds,dxmovdx,offsettgtdatamovcx,256;要读取的数据长度,字节数;movbx,ax;文件代号,已放在bxmovah,3fh;读文件int21h;关闭文件;movbx,ax;文件代号,已放在bxmovah,3eh;关闭int21hpopdspopcxpopbxpopaxret,53,将读取到的数据显示在屏幕上,;子函数dispString:在指定的地方显示字符串;参数:dh-行号,dl-列号,bl-颜色;ds:si-字符串入口,以$为结束符DisplayStringInDefinePos:pushfpushaxpushbxpushcxpushdxpushsipushdipushes;根据要输出的位置,计算目标区在内存中的地址,放到di中moval
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电缆知识及销售技巧培训课件
- 电线生产知识培训
- 第13章 品牌消费心理与行为
- 高级养老护理员培训
- 高炉水工基础知识培训课件
- DJ-89-生命科学试剂-MCE
- 北京安全员考试c试题及答案
- 北大数学训练营考试题及答案
- 护士电子考试题及答案
- 保安知识考试试题题库及答案
- 开学第一课开学立规矩课件21
- 《冲击波疗法》课件
- 基于模型的系统工程(MBSE)及MWORKS实践 课件 4 MBSE教材讲义 第四章 设计仿真一体化的MBSE方法
- 《中国世界遗产》课件
- 糖尿病眼底病变
- 2024年县特殊教育学校德育工作计划样本(2篇)
- 车辆gps管理制度
- 住宅小区园林景观绿化工程施工组织设计方案
- 中式烹调师高级技师考试模拟题与参考答案
- 《童年》课外阅读备课教案
- 事业单位考试职业能力倾向测验(医疗卫生类E类)试题与参考答案
评论
0/150
提交评论