资源描述:
《汇编语言课后习题答案 王爽主编》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、检测点9.2补全编程,利用jcxz指令,实现在内存2000H段中查找第一个值为0的字节,找到后,将它的偏移地址存储在dx中。assumecs:codecodesegmentstart:movax,2000hmovds,axmovbx,0s:movch,0movcl,[bx]jcxzok;当cx=0时,CS:IP指向OKincbxjmpshortsok:movdx,bxmovax,4c00hint21hcodeendsendstart检测点9.3补全编程,利用loop指令,实现在内存2000H段中查找第一个值为0的字节,找到后,将它的偏移地址存储在dx中。assumecs:codeco
2、desegmentstart:movax,2000hmovds,axmovbx,0s:movcl,[bx]movch,0inccxincbxloopsok:decbxmovdx,bxmovax,4c00hint21hcodeendsendstart书P101,执行loops时,首先要将(cx)减1。“loop标号”相当于deccxif((cx)≠0)jmpshort标号检测点10.1补全程序,实现从内存1000:0000处开始执行指令。assumecs:codestacksegmentdb16dup(0)stackendscodesegmentstart:movax,stackmov
3、ss,axmovsp,16movax,1000hpushaxmovax,0pushaxretfcodeendsendstart执行reft指令时,相当于进行:popippopcs根据栈先进后出原则,应先将段地址cs入栈,再将偏移地址ip入栈。检测点10.3下面的程序执行后,ax中的数值为多少?内存地址机器码汇编指令执行后情况1000:0b80000movax,0ax=0,ip指向1000:31000:39a09000010callfarptrspopcs,popip,ip指向1000:91000:840incax1000:958s:popaxax=8haddax,axax=10hpo
4、pbxbx=1000haddax,bxax=1010h用debug进行跟踪确认,“callfarptrs”是先将该指令后的第一个字节段地址cs=1000h入栈,再将偏移地址ip=8h入栈,最后转到标号处执行指令。出栈时,根据栈先进后出的原则,先出的为ip=8h,后出的为cs=1000h检测点10.4下面的程序执行后,ax中的数值为多少?内存地址机器码汇编指令执行后情况1000:0b80600movax,6ax=6,ip指向1000:31000:3ffd0callaxpopip,ip指向1000:61000:540incax1000:658movbp,spbp=sp=fffehadda
5、x,[bp]ax=[6+ds:(fffeh)]=6+5=0bh用debug进行跟踪确认,“callax(16位reg)”是先将该指令后的第一个字节偏移地址ip入栈,再转到偏移地址为ax(16位reg)处执行指令。检测点10.5(1)下面的程序执行后,ax中的数值为多少?assumecs:codestacksegmentdw8dup(0)stackendscodesegmentstart:movax,stackmovss,axmovsp,16movds,axmovax,0callwordptrds:[0eh]incaxincaxincaxmovax,4c00hint21hcodeend
6、sendstart推算:执行callwordptrds:[0eh]指令时,先cs入栈,再ip=11入栈,最后ip转移到(ds:[0eh])。(ds:[0eh])=11h,执行incax……最终ax=3题中特别关照别用debug跟踪,跟踪结果不一定正确,但还是忍不住去试试,看是什么结果。根据单步跟踪发现,执行callwordptrds:[0eh]指令时,显示ds:[0eh]=065D。ds:0000~ds:0010不是已设置成stack数据段了嘛,不是应该全都是0的嘛。于是进行了更详细的单步跟踪,发现初始数据段中数据确实为0,但执行完movss,ax;movsp,16这两条指令后,数据
7、段中数据发生改变。这是为什么呢?中断呗~~~~检测点10.5(2)下面的程序执行后,ax和bx中的数值为多少?assumecs:codesgstacksegmentdw8dup(0)stackendscodesgsegmentstart:movax,stackmovss,axmovsp,10hmovwordptrss:[0],offsets;(ss:[0])=1ahmovss:[2],cs;(ss:[2])=cscalldwordptrss:[0];cs入