ImageVerifierCode 换一换
格式:PPTX , 页数:55 ,大小:389.87KB ,
资源ID:4224233      下载积分:14 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/4224233.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(汇编语言期末总结地大.pptx)为本站上传会员【天****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

汇编语言期末总结地大.pptx

1、复习与总结复习与总结中国地质大学中国地质大学中国地质大学中国地质大学(武汉武汉武汉武汉)计算机学院计算机学院计算机学院计算机学院汇编语言汇编语言寄存器2寄存器寄存器说明说明AX作为累加器用,所以它是算术运算的主要寄存器。在乘除指令中指定用来存放操作数。另外,所有的I/O指令都使用AX或AL与外部设备传送信息。BX在计算存储器地址时,可作为基址寄存器使用。CX常用来保存计数值,如在移位指令、循环指令和串处理指令中用作隐含的计数器DX在作双字长运算时,可把DX和AX组合在一起存放一个双字长数,DX用来存放高16位数据。此外,对某些I/O操作,DX可用来存放I/O的端口地址寄存器3寄存器名称说明CS

2、代码段寄存器存放当前执行的程序的段地址DS数据段寄存器存放当前执行的程序所用操作数的段地址SS堆栈段寄存器存放当前执行的程序所用堆栈的段地址ES附加段寄存器存放当前执行程序中一个辅助数据段的段地址寄存器【SP、BP、SI、DI】四个16位寄存器可以象数据寄存器一样在运算过程中存放操作数,但它们只能以字(16位)为单位使用。此外,它们更经常的用途是在存储器寻址时,提供偏移地址。因此,它们可称为指针或变址寄存器。4寄存器名称说明SP堆栈指针寄存器用来指出栈顶的偏移地址BP基址指针寄存器在寻址时作为基地址寄存器使用,但它必须与堆栈段寄存器SS联用来确定堆栈段中的存储单元地址SI源变址寄存器在串处理指

3、令中,SI作为隐含的源变址寄存器与DS联用,以确定数据段中的存储单元地址,并有自动增量和自动减量的变址功能DI目的变址寄存器在串处理指令中,DI和附加段寄存器ES联用,以达到在附加段中寻址的目的,然后DI自动增量或减量寄存器5寄存器名称说明IP指令指针寄存器它用来存放将要执行的下一条指令地址的偏移量,它与段寄存器【CS】联合形成代码段中指令的物理地址。在计算机中,控制程序的执行流程就是通过控制IP的值来实现的FLAGS 标志寄存器这是一个存放条件码标志、控制标志的16位寄存器标志标志寄存器寄存器6标志位名称说明Debug1Debug0ZF零标志位/ZeroFlag指令执行后,结果是否为0?1:

4、0sub,mul,add,divinc,or,andZRNZPF奇偶标志位/ParityFlag指令执行后,结果的bit位中,1的个数是否为偶数?1:0PEPOSF符号标志位/SignFlag指令执行后,结果是否为负?1:0NGPLCF进位标志位/CarryFlag无符号运算时,记录运算结果的最高有效位向更高位的进位值,或从更高位的借位值CYNCOF溢 出 标 志 位/OverflowFlag有符号运算时,运算结果是否发生溢出?1:0OVNVDF方 向 标 志 位/DirectionFlag0-串处理指令时,si,di递增1-串处理指令时,si,di递减此标志位要与movsb,movsw配合使

5、用,指明每次循环后si,di的增减AF辅助进位标志/AuxiliaryCarryFlag运算时D3位(低半字节)有进位或借位时,AF=1;否则AF=0。如:49H+6DHB6H,D3有进位:AF=1TF跟踪标志/TraceFlag用于控制处理器进入单步跟踪方式:0-禁止进入单步中断跟踪,处理器正常工作1-允许进入单步中断跟踪,处理器单步执行,跟踪指令执行IF中断标志/InterruptFlag用于控制外部可屏蔽中断是否可以被处理器响应:设置IF1,则允许可屏蔽中断;设置IF0,则禁止可屏蔽中断。DEBUG-U:查看汇编指令查看汇编指令 【-U1000:0】-R:查看、修改寄存器的值查看、修改寄

6、存器的值【-RAX】修改寄存器AX的值-T:执行命令执行命令-D:查看内存查看内存【-D段地址:偏移地址】如:【-D1000:0】【-D1000:09】-E:改写内存改写内存【-E段地址:偏移地址数据】如:【-E1000:012345】【-E1000:0abc】【-E1000:0“welcommasm”】-A:写汇编指令到内存写汇编指令到内存【-A1000:0】movax,111.7对内存单元的操作对内存单元的操作如果未指定寄存器,对内存单元的操作采用以下形式:【1】wordptr指定访问的内存单元为字字单元,如:movword ptrds:01incword ptrbxincword ptr

7、ds:0addword ptrbx,2【2】byteptr指定访问的内存单元为字节字节单元,如:movbyte ptrds:01incbyte ptrbxincbyte ptrds:0addbyte ptrbx,28寻址方式9定义数据10dbdd1ddadbasdfghjk定义字节型数据,并初始化,占1个字节dwdw1dw0123h,0234h定义字型数据,并初始化,占2个字节dddd1dd0123h,0234h定义双字型数据,并初始化,占4个字节dupdb3dup(0)【db0,0,0】定义3个字节,都初始化为0db3dup(1,2,3)【db1,2,3,1,2,3,1,2,3】定义9个字节

8、db3dup(abc,ABC)【db abcABCabcABCabcABC】定义18个字节db重复次数dup(重复的数据)重复的数据可以为db,也可以为dw,dd直接定址表p像这种可以通过依据数据,直接计算出所要找的元素的位置的表,我们称其为:直接定址表。tabledb0123456789ABCDEF;字符表moval,tablebx;标号+下标11直接定址表assumecs:codecodesegment a db 1,2,3,4,5,6,7,8 b dw 0start:movsi,0movcx,8s:moval,asimovah,0addb,axincsiloopsmovax,4c00hi

9、nt21hcodeendsendstart12assumecs:codecodesegment a:db 1,2,3,4,5,6,7,8 b:dw 0start:movsi,offsetamovbx,offsetbmovcx,8s:moval,cs:simovah,0addcs:bx,axincsiloopsmovax,4c00hint21hcodeendsendstart直接定址表p对于程序中的adb1,2,3,4,5,6,7,8u指令:moval,asi相当于:moval,cs:0siu指令:moval,a3相当于:moval,cs:03u指令:moval,abx+si+3相当于:mova

10、l,cs:0bx+si+313直接定址表p数据标号包含了对单元长度的描述,所以,在指令中,它可以代表一个段中的内存单元。p对于程序中的bdw0。u指令:movax,b相当于:movax,cs:8u指令:movb,2相当于:movwordptrcs:8,2u指令:incb相当于:incwordptrcs:8p在这些指令中,标号b代表了一个内存单元,地址为code:8,长度为2字节。14直接定址表(用于子函数地址入口)setscreen:;ah子功能号,0-sub1,1-sub2,2-sub3,3-sub4jmpshortsettable dw sub1,sub2,sub3,sub4set:pus

11、hbxcmpah,3;判断传递的子功能号是否大于3jasretmovbl,ahmovbh,0addbx,bx;根据ah中的功能号计算对应子程序的地址在table表中的偏移call word ptr tablebx;调用对应的功能子程序sret:popbxiret15直接定址表(用于子函数地址入口)p另一种子程序跳转实现方式:ah子功能号16setscreen:cmpah,0jedo1cmpah,1jedo2cmpah,2jedo3cmpah,3jedo4jmpshortsretdo1:callsub1jmpshortsretdo2:callsub2jmpshortsretdo3:callsub

12、3jmpshortsretdo4:callsub4sret:iretjmp指令17jmpjmp ax目标地址跳转 将IP设为axjmp short s0位移跳转【(IP)=标号s0所在8位偏移】跳转到标号s0处,即将IP设为标号s0所在地址,IP修改范围-128127,短转移jmp near ptr s0位移跳转段内转移【(IP)=标号s0所在16位偏移】段内近转移,跳转到标号s0处,即将IP设为标号s0所在地址,IP修改范围-3276832767,jmp far ptr s0目标地址跳转段间转移【(CS)=标号s0所在段,(IP)=标号s0所在16位偏移】段间远转移,跳转到标号s0处,即将同

13、时修改CS和IP,设为标号s0所在的段和偏移地址,IP修改范围-3276832767,jmp word ptr ds:10目标地址跳转段内转移【(IP)=(16*(ds)+10)】段内转移,将IP设为指定内存数据jmp dword ptr ds:10目标地址跳转段间转移【(CS)=(16*(ds)+10+2),(IP)=(16*(ds)+10)】段间转移,IP设为ds:10,CS设为ds:12call与ret18callcall s0【PushIP,jmpnearptrs0】将IP压栈,跳转到标号处,此跳转为段内转移call ax【PushIP,jmpax】将IP压栈,IP设为ax,段内转移c

14、all word ptr ds:0【PushIP,jmpwordptrds:0】将IP压栈,IP设为ds:0,段内转移call dword ptr ds:0【PushCS,PushIP,jmpdwordptrds:0】将CS、IP压栈后,段间转移,IP设为ds:0,CS设为ds:2call far ptr s0【PushCS,PushIP,jmpfatptrs0】将CS、IP压栈,跳转到标号处,远转移、段间转移retret【popIP】利用栈中的数据,实现近转移ret N【popIP,addsp,N】利用栈中的数据,实现近转移,同时,将栈顶下移N个内存单元,一般用于函数调用时,如果采用栈传递参

15、数,返回时,需要将传入的参数清空,可采用此语法retfretf【popIP,popCS】利用栈中的数据,实现远转移iretiret【popIP,popCS,popf】利用栈中的数据,实现远转移,用于中断例程的返回子程序框架:call和ret的配合使用p子程序的框架:标号:指令retp具有子程序的源程序的框架:19子程序参数的传递p寄存器:适用于参数少时。p变量:适用于同一源文件(程序模块)中。p堆栈:只适用于传递入口参数。p通过地址表传送参数地址20通过栈传递参数movax,0123hpushaxmovax,0456hpushaxcalladdfun.addfun:pushbpmovbp,sp

16、mov ax,bp+4addax,bp+6popbpret 421计算0123h与0456h的和参数一,入栈参数二,入栈call时,会有pushIP的调用备份bp,此时栈里已有四个数据通过bp取参数,默认段为:ssax=?ax=?描述:popIPaddsp,4寄存器冲突的解决p子程序p多重循环pushcxpopcx22seg,offset23offsetmov ax,offset s0取得标号s0的偏移地址mov ax,offset s2-s1取得标号s2与s1的偏移地址差值segmov ax,seg s0获取标号s0所在段地址jcxzjcxz s0【if(cx)=0)jmpshorts0】有

17、条件短转移指令,IP修改范围-128127looploop s0【cx-;if(cx)!=0)jmpshorts0】循环指令,IP修改范围-128127其他指令24adcabc ax,bx【ax+bx+CF】带进位加法sbbsbb ax,bx【ax-bx-CF】带借位减法cmpcmp ax,bx计算ax-bx,根据计算结果修改标志寄存器,影响到的标志寄存器:ZF,PF,SF,CF,OFcldcld将方向标志位DF设置为0即movsb时,si,di为递增stdstd将方向标志位DF设置为1即movsb时,si,di为递减clicli将中断标志位IF设置为0禁止可屏蔽中断stisti将中断标志位I

18、F设置为1打开可屏蔽中断其他指令25ininal,20h8位从20h端口读入一个字节movdx,3f8hinal,dx16位从3f8h端口读入一个字节outout20h,al8位向20h端口写入一个字节movdx,3f8houtdx,al16位向3f8h端口写入一个字节shlshlal,1逻辑左移:数据向左1移位,低位补充0,最后移出的一位写入CFmovcl,3shlal,cl错误:shlal,3逻辑左移:数据向左3移位,低位补充0,最后移出的一位写入CFshrshral,1逻辑右移:数据向右1移位,高位补充0,最后移出的一位写入CFmovcl,3shral,cl错误:shral,3逻辑右移:

19、数据向右3移位,高位补充0,最后移出的一位写入CFadc,sbb26adcabc ax,bx【ax+bx+CF】带进位加法sbbsbb ax,bx【ax-bx-CF】带借位减法adc指令p程序代码1EF0001000H+2010001EF0Haxbxcxmovax,001EHmovbx,0F000Hmovcx,1000Haddcx,1EF0Hadcbx,1000Hadcax,0020H27sbb指令p比如,计算003E1000H 00202000Hp结果放在ax,bx中,程序如下:movbx,1000Hmovax,003EHsubbx,2000Hsbbax,0020H28mul指令29指令位被

20、乘数乘数积mulbl8位alblaxmulbx16位axbxax(低位),dx(高位)mulbyteptrds:08位alds:0axmulwordptres:016位axes:0ax(低位),dx(高位)div指令30指令位被除数除数商余数divbl8位axblalahdivbx16位ax(低位),dx(高位)bxaxdxdivbyteptrds:08位axds:0alahdivwordptres:016位ax(低位),dx(高位)es:0axdxcmp指令:cmpax,bx31无符号运算有符号运算标志寄存器比较结果标志寄存器比较结果ZF=1ax=bxZF=1ax=bxZF=0ax!=bxZ

21、F=0ax!=bxCF=1axbxSF=1且OF=0ax=bxSF=1且OF=1axbxCF=0且ZF=0axbxSF=0且OF=1axbxCF=1或ZF=1ax=bx条件转移指令(无符号数比较,与cmp配合使用)32指令比较结果含义检测的标志位jeax=bx等于则转移equalZF=1jneax!=bx不等于则转移notequalZF=0jbax=bx不低于则转移notbelowCF=0jaaxbx高于则转移aboveCF=0且ZF=0jnaax=bx不高于则转移notaboveCF=1或ZF=1cmpax,bxmovsb、movsw指令(1)rep【描述】s:movsbloops【说明】此

22、指令需配合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;【使用】repmovsb33movsb、movsw指令(3)movsw【功能】将ds:si指向的内存单元中的字节送入es:di中,然后根据标志寄存器DF位的值,将si和di递增或递减【描述】(es*16+di)=(ds*16+si)if(df=0)addsi,2;adddi,2;elseif(d

23、f=1)subsi,2;subdi,2;【使用】repmovsw(4)标志寄存器)标志寄存器DF值的设定值的设定【cld】:将DF位置设定为0【std】:将DF位置设定为134movsb、movsw指令p(5)实例)实例35;源程序段:ds:si=DispStringmovax,csmovds,ax;源数据区段地址:dsmovsi,offsetDispString;目标地址:es:di=0:200movax,0moves,axmovdi,200h;长度:cx=DispString子函数的长度movcx,offsetDispStringEnd-offsetDispStringcld;DF为0-传

24、输方向为正,di,si递增repmovsb显示字符p显示缓冲区:B8000HBFFFFH(32K)p共分为8页,第页4K左右,默认显示第0页,即地址为B8000HB8F9FH的内存(4000字节)p显示器:80行,25列p往指定内存传送数据,会显示在屏幕上p一个字符占两个字节低位:ASCII码高位:字符属性36显示字符p高位:字符属性3776543210BLRGBIRGB是否闪烁字符背景色(RGB)是否高亮字符颜色(RGB)p红底绿字:01000010Bp红底闪烁绿字:11000010Bp红底高亮绿字:01001010Bp黑底白字:00000111Bp白底蓝字:01110001B12.3中断向

25、量表p对于8086PC机,中断向量表指定放在内存地址0处。从内存0000:0000到0000:03FF的1024个单元中存放着中断向量表。p我们可以用中断类型码,在中断向量表中找到中断处理程序的入口。然后用它设置CS和IP,使CPU执行中断处理程序。p中断号:N,则中断例程的入口地址在中断向量表中可以这样获取:IP=N*4,CS=N*4+238中断执行步骤TF跟踪标志/TraceFlag用于控制处理器进入单步跟踪方式:0-禁止进入单步中断跟踪,处理器正常工作1-允许进入单步中断跟踪,处理器单步执行,跟踪指令执行IF中断标志/InterruptFlag用于控制外部可屏蔽中断是否可以被处理器响应:

26、设置IF1,则允许可屏蔽中断;设置IF0,则禁止可屏蔽中断。39中断执行的步骤如下:【1】取得中断类型码N【2】pushf【3】IF=0,IF=0,禁止可屏蔽中断,禁止单步中断【4】pushCS【5】pushIP【6】IP=N*4,CS=N*4+2,中断例程的跳转,设定CS,IP40assume cs:codecode segmentstart:mov ax,csmov ds,axmov si,offset do0;设置设置ds:si指向源地址指向源地址mov ax,0mov es,axmov di,200h ;设置设置es:di指向目的地址指向目的地址mov cx,offset do0end

27、offset do0 ;设置设置cx为传输长度为传输长度cld ;设置传输方向为正设置传输方向为正rep movsb;设置中断向量表设置中断向量表 mov ax,0 mov es,ax mov word ptr es:0*4,200h mov word ptr es:0*4+2,0 mov ax,4c00h int 21h41 do0:jmp short do0start db overflow!do0start:mov ax,seg do0 ;获取标号所在段地址获取标号所在段地址mov ds,axmov si,offset do0 ;获取标号所在段的偏移地址获取标号所在段的偏移地址add

28、si,2 ;去除前面的去除前面的 jmp 指令指令 ;设置设置ds:si指向字符串指向字符串mov ax,0b800h mov es,axmov di,12*160+36*2;设置设置es:di指向显存空间的中间位置指向显存空间的中间位置 mov cx,9;设置设置cx为字符串长度为字符串长度 s:mov al,si mov es:di,al inc si add di,2 loop s mov ax,4c00h int 21hdo0end:nopcode endsend startBIOS中断例程应用pint10h中断例程的设置光标位置功能。movah,2;2号功能movbh,0;页数mov

29、dh,5;第5行movdl,12;第12列int10h;10号中断调用42DOS中断例程应用p编程:在屏幕的5列12行显示字符串“Welcometomasm!”。43assumecs:codedatasegmentdbWelcometomasm!,$dataendscodesegmentstart:mov ah,2 ;置光标置光标mov bh,0 ;第第0页页mov dh,5 ;dh中放行号中放行号mov dl,12 ;dl中放列号中放列号int 10hmov ax,datamov ds,axmov dx,0 ;ds:dx指向字符串的首地址指向字符串的首地址data:0mov ah,9int

30、21hmovax,4c00hint21hcodeendsendstart端口ininal,20h8位从20h端口读入一个字节movdx,3f8hinal,dx16位从3f8h端口读入一个字节outout20h,al8位向20h端口写入一个字节movdx,3f8houtdx,al16位向3f8h端口写入一个字节44moval,2;端口号为70h中的2号单元out70h,al;单元号要先写入到70端口inal,71h;从71端口读取2号单元的数据,赋给alCMOSCMOS端口访问端口访问首先,需要将要访问的端口地址,发送到70h端口,然后,再从71h端口读出要访问的数据内容。BCD码pBCD码的存

31、放方式:数码:01234BCD码:00000001001000110100数码:56789BCD码:01010110011110001001p比如:数值26,用BCD码表示为:0010011045键盘消息接收movah,0int16h;中断16的零号功能,获取键盘上的一个字符cmpal,1jefun046中断16的 0 号功能:从键盘接收一个字符文件读写(21h)47AHAH功能功能入口参数入口参数出口参数出口参数3C建立文件DS:DX=ASCIIZ串地址CX=文件属性成功:AX=文件代号错误:AX=错误码3D打开文件DS:DX=ASCIIZ串地址AL=0读,=1写,=3读/写成功:AX=文件

32、代号错误:AX=错误码3E关闭文件BX=文件代号失败:AX=错误码3F读文件或设备DS:DX=数据缓冲区地址BX=文件代号CX=读取的字节数读成功:AX=实际读入的字节数AX=0已到文件尾读出错:AX=错误码40写文件或设备DS:DX=数据缓冲区地址BX=文件代号CX=写入的字节数写成功:AX=实际写入的字节数写出错:AX=错误码41删除文件DS:DX=ASCIIZ串地址成功:AX=00出错:AX=错误码(2,5)42移动文件指针BX=文件代号,CX:DX=位移量AL=移动方式(0:从文件头绝对位移,1:从当前位置相对移动,2:从文件尾绝对位移)成功:DX:AX=新文件指针位置出错:AX=错误

33、码文件读写assumecs:codeseg,ds:datas,ss:stkstksegmentstackdb128dup(0)stkendsdatassegmentstrdatadb1234567890qwertyuiopasdfghjklzxcvbnm!#%&*()_+=-/.,MZNXBCVALSKDJFHGYTURIEOWPQtgtdatadb256dup($)filename dbf:asm.dat,0datasends48文件读写codesegsegmentstart:;设置栈段movax,stkmovss,axmovsp,128callCreateFilecallWriteFile

34、callReadFile49movax,segtgtdatamovds,axmovsi,offsettgtdatamovbl,01000001bmovdh,5movdl,8callDisplayStringInDefinePosmovax,4c00hint21h创建文件;子函数创建文件CreateFile:pushaxpushbxpushcxpushdxpushds;创建文件movcx,0;文件属性movdx,segfilenamemovds,dx50movdx,offsetfilenamemovah,3ch;3c号功能,创建文件int21h;返回:ax-文件代号;关闭文件;movbx,ax;

35、文件代号;movah,3eh;关闭;int21hpopdspopdxpopcxpopbxpopaxret将数据写入文件;子函数写入字符串到文件中WriteFile:pushaxpushbxpushcxpushdxpushds;打开文件movdx,segfilenamemovds,dxmovdx,offsetfilenamemovah,3dh;4d号功能,打开文件moval,3;0-读,1-写,3-读/写int21h;ax-返回的文件代号movbx,ax;文件代号放在bx中51;往文件中写数据movdx,segstrdatamovds,dxmovdx,offsetstrdatamovcx,85;

36、要写的数据长度,字节数;源数据区共有85个字符;movbx,ax;文件代号,已放在bxmovah,40h;写文件int21h;关闭文件;movbx,ax;文件代号,已放在bxmovah,3eh;关闭int21hpopdspopdxpopcxpopbxpopaxret从文件中读取数据;子函数从文件中,读取字符串ReadFile:pushaxpushbxpushcxpushds;打开文件movcx,0;文件属性movdx,segfilenamemovds,dxmovdx,offsetfilenamemovah,3dh;4d号功能,打开文件moval,3;0-读,1-写,3-读/写int21h;ax

37、返回的文件代号movbx,ax;文件代号放在bx中;从文件中读取数据,读到目标区tgtdata中ds:dx52movdx,segtgtdatamovds,dxmovdx,offsettgtdatamovcx,256;要读取的数据长度,字节数;movbx,ax;文件代号,已放在bxmovah,3fh;读文件int21h;关闭文件;movbx,ax;文件代号,已放在bxmovah,3eh;关闭int21hpopdspopcxpopbxpopaxret将读取到的数据显示在屏幕上;子函数dispString:在指定的地方显示字符串;参数:dh-行号,dl-列号,bl-颜色;ds:si-字符串入口,以

38、为结束符DisplayStringInDefinePos:pushfpushaxpushbxpushcxpushdxpushsipushdipushes;根据要输出的位置,计算目标区在内存中的地址,放到di中moval,160muldhmovdi,ax;乘法di=dhx160,结果在ax中,传到di中53moval,2muldl;乘法ax=dlx2,结果在ax中adddi,ax;计算输出的位置:di=dh*160+dl*2movax,0B800h;显存第0页起始地址moves,ax;设定显存的段;从ds:si依次取字符,以cl为中转DSIDF0:movbh,sicmpbh,$jeDSIDF1;如果字符为$,则不输出moves:di,bh;在dh行,dl列,输出字符moves:di+1,bl;用bl设定颜色adddi,2incsicmpbh,$jneDSIDF0将读取到的数据显示在屏幕上DSIDF1:popespopdipopsipopdxpopcxpopbxpopaxpopfretcodesegendsendstart54

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服