汇编语言王爽检测点答案_第1页
汇编语言王爽检测点答案_第2页
汇编语言王爽检测点答案_第3页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、汇编语言王爽检测点答案第一章.检测点1.1131024,0,10238192,10242A30,2A20,2A1064,1,16,41,1,2,2,4512,256(8)二进制注:符号'A'指求藉运算(如:2A30指2的30次方)第二章检测点2.1,还是十六进,我大家做这题的时候一定要注意,要看清楚数制,比如是二进制还是十进制当时没注意,做错了!呵呵!第一空:F4A3H第二空:31A3H第三空:3123H第四空:6246H第五空:826CH第六空:6246H第七空:826CH第八空:04D8H第九空:0482H第十空:6C82H第一空:D882H第十二空:D888H第十三空:D

2、810H第十四空:6246H(2)movax,2addax,axaddax,ax检测点2.2(1) 00010H1000fH0001H2000H检测点2.3共修改了4次ip第一次movax,bx第二次是subax,ax第三次是jmpax第四次是执行jmpax最后ip的值是0因为ax的值是零!检测点3.1(1)第一空:2662H第二空:E626H第三空:E626H第四空:2662H第五空:D6E6H第六空:FD48H第七空:2C14H第八空:0000H第九空:00E6H第十空:0000H第一空:0026H第十二空:000CH注意:ax中存取的是字型数据,高地址存放高字节,低地址存放低字节!(一定

3、要小心)写出cpu的执行序列Movax,6622Jmp0ff0:0100Movax,2000HMovds,axMovax,0008Movax,0002指令执行顺序寄存器CSIPDSAXBX初值2000H00001000H00movax,6622h2000H00031000H6622H0000jmp0ff0:01001000h00001000H6622H0000movax,2000h1000H00031000H2000H0000movds,ax1000H00052000H2000H0000movax,00081000H00082000HC389H0000movax,00021000H000B20

4、00HEA66H0000数据和程序在计算机中都是以二进制的形式存放的,在区别程序和数据时,关键是看段地址,如果段地址是ds段,说明该存中存放的是数据,如果段地址是cs段,说明该存中存放的是程序指令检测点3.2Movax,2000HMovss,axMovax,1000HMovss,axMovsp,0000H注意:出栈时和入栈时的顺序,空栈时栈顶指向的是最高端地址!栈满是栈顶指针指向的是最底端地址!2。实验任务5BEA5CCA30F0602300FE2200:01005CCA00FC2200:00FE602300FE602301005CCA00FE2200:010030F000FC22000:00

5、FC2E39因为在DEBUGST命令在执行修改寄存器ss的指令时,会产生中断,将现场保护起来,下一条指令也紧接着被执行!实验三:该实验自己做吧我做出来的东西只是我pc上的数据,可能在别的pc做出来的结果会不一样,在加之数据太多,我做了两次数据都没有完整的记下来,只好作罢!实验四:bx和loop的使用(1)assumecs:codecodesegmentmovax,0movds,axmovcx,64movbx,200hs:movds:bx,axincbxincaxloopsmovax,4c00Hint21hcodeendsEnd(2) 如上题我一不小心写出来就是九条指令了!呵呵!(3)具体做法是

6、将那段指令写道存中,察看其在存中的起始地址和终止地址,然后将该存的容复制到0:200处就可以了!检测点6.1Movcs:dx,ax第一空:cs第二空:26或者1ah第三空:popcs:dx发表于2008年08月19日01:11:00|评论(2)|编辑|举报|收藏旧一篇:常用命令(转)|新一篇:实验五:编写、调试具有多个段的程序Copyright?maokaijiangPoweredbyCSDNBlog十一川藏疯狂之旅本文来自CSDN博客,请标明出处: (1)1931(一直保持不变,由于pc不同答案有可能不一样)(由于pc不同,所以答案也可能不同,这只是机cs=1943ss=1941ds=193

7、1子上的数据)第一空:X2第二空:X1(2)一直不变答案不一样,就不写了X-2,X-1(N/16+1)*16一直不变答案不一样X+3,X+4(4)答:可能执行,如果不指明标号,cpu顺序执行指令,所有可能正确执行!!(5).*;将a段和b段指的数据依次相加,将结果保存到c段中.;assumecs:codeasegmentdb1,2,3,4,5,6,7,8aendsbsegmentdb1,2,3,4,5,6,7,8bendsdsegmentdb8dup(0)dends.*;.代码段.codesegmentstart:movax,dmoves,axmovax,amovds,axmovcx,8mov

8、ax,0movbx,0againl:movdx,ds:bxmoves:ax,dxincbxincaxloopagainlmovax,bmovds,axmovax,0movbx,0movcx,8movdx,0again2:adddx,ds:bxmoves:ax,dxincaxincbxloopagain2movax,4c00hint21hcodeendsendstart*;编写程序,用push指令将a段中的word数据,逆序存储到b段中.*;assumecs:codeasegmentdw1,2,3,4,5,6,7,8aendsbsegmentdw0,0,0,0,0,0,0,0bendscodes

9、egmentstart:movax,bmovss,axmovsp,10hmovax,amovds,axmovbx,0movcx,8s:pushbxaddbx,2loopsmovax,4c00hint21hcodeendsendstart本文来自CSDh#客,请标明出处:ht(1)本题略!!(2).*;编程,将datasg段中的每个单词的前四个字母改写为大写字母.;assumecs:codesg,ss:stacksg,ds:datasgstacksgsegmentdw0,0,0,0,0,0,0,0stacksgendsdatasgsegmentdb'1.displsy'db

10、9;2.brows'db'3.replace'db'4.modifydatasgsegmentcodesgsegmentstart:movax,stacksgmovss,axmovsp,16movax,datasgmovds,axmovdx,0movcx,4s0:pushcxmovsi,0movcx,4s1:moval,bx+si+4addal,11011111Bmovbx+si+4,alincsiloops1popcxloops0movax,4c00hint21hcodesgendsendstart本文来自CSDN博客,请标明出处db'1975'

11、;,'1976','1977','1978','1979','1980','1981','1982','1983'db'1984','1985','1986','1987','1988','1989','1990','1991','1992'db'1993','1994','1995&#

12、39;以上是表示21年的21个字符串dd16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514dd345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000以上是表示21年公司总收的21个dword型数据dw3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226dw11542,14430,45257,17800;以上是表示21年公司雇员人数的21个word型数据dataen

13、dstablesegmentdb21dup('yearsummne?')tableendscodesgsegmentstart:movax,datamovds,axmovax,tablemoves,axmovsi,0movdi,0s0:.*,;把年份送到table中.;moval,bxmoves:di,almoval,bx+1moves:di+1,almoval,bx+2moves:di+2,almoval,bx+3moves:di+3,al;把收入送到table中;movax,54hbxmovdx,56hbx.*,;把人数送到table中.;movax,0A8hsimoves

14、:0Ahdi,ax;计算人均收入并把其送到table中;movax,54hbxdivwordptr0A8hsimoves:0Chdi,axaddsi,2adddi,16adddx,4loops0;循环21次movax,4c00hint21hcodesgendsendstart本文来自CSDN博客,请标明出处第九章收藏检测点9.1(1) 程序如下:assumecs:codedatasegmentdb0,0,0,0,0,0,0,0dataendscodesegmentstart:movax,datamovds,axmovbx,0jmpwordptrbx+1movax,4c00hint21hcode

15、endsendsstart理由是:要是jmp跳转后执行第一条指令,本条指令是wordptr是段转移必须满足ip=0所以ds:bx+1的值必须为零,也就是data段的第二个数据必须为零第一空:bx第二空:cs然后再调试本题可以先用debug将存2000:1000中的容写为BE000600可得到cs=0006hip=00BEh检测点9.2.*,.实现在存2000H段中查找第一个值为零的字节,;找到后,将它的偏移地址存储到dx中.;assumecs:codecodesegmentstart:movax,2000Hmovds,axmovbx,0s:movcl,bxmovch,0jcxzokincbxj

16、mpshortsok:movdx,bxmovax,4c00hint21hcodeendsendstart注:利用jcxz判断cx是否等于零来发生跳转,注意判断的是一个字节!检测点9.3.*;.利用loop指令,实现在存2000H段中查找第一个值为零的byte,找到后;将它的偏移地址存储到dx中.;assumecs:codecodesegmentstart:movax,2000Hs:movcl,bxmovch,0jmpokincbxloopsok:decbxmovdx,bxmovax,4c00hint21hcodeendsendstart实验八:assumecs:codesgcodesgsegm

17、entmovax,4c00hint21hstart:s:nopnopmovdi,offsetsmovsi,offsets2movax,cs:simovcs:di,axs0:jmpshortss1:movax,0int21hmovax,0s2:jmpshorts1nopcodesgendsendstart注:程序可以正常运行,本程序主要考察了转移指令的使用!!实验九:*;编程:在屏幕中间分别显示绿色,绿底红色,白底蓝色的字符串'welcometomasm!'.;实验原理见书中186页;assumecs:code,ds:data,es:display,ss:stackdataseg

18、mentdb'welcometomasm!'db02H,24H,71Hdataendsstacksegmentdb16dup(0)stackendsdisplaysegmentdb1024dup(0)displayendscodesegmentstart:movax,datamovds,axmovsi,0movax,0b872H;定义12行中间的起始位置moves,axmovdi,0.*,;做三次外循环,每次显示一种颜色.;s0:pushcxpushaxmovcx,16movbx,0;做上六次循环,将数据段定义的字符串写入存中;s:moval,bxmoves:si,almova

19、l,di+10hmoves:si+1,aladdsi,2incbxloopssubsi,32将si回到初始位置addsi,160;换行popaxpopcxincdi;改变颜色loops0movax,4c00hint21hcodeendsendstart本文来自CSDN博客,请标明出处第十章收藏检测点10.1第一空:1000第二空:0000检测点10.2ax=6注意:执行calls是ip的值为6接着进栈,然后执行popax相当于把ip的值放到ax中!检测点10.3ax=1100H注意:执行callfarptrs后cs=1000ip=3(10H)接着进栈然后执行popax此时ax=3=>ad

20、dax,ax此时ax=6(100H)=>popbx此时bx=1000=>addax,bx此时ax=1100H检测点10.4ax=000B具体我就不一一分析了,呵呵!检测点10.5(1)ax=3(1)ax=1bx=0实验十:编写子程序(1)显示字符串.*,.显示字符串的子程序(dh)=行号(取值围0-24),(dl)=列号(取值围0-79);(cl)=颜色,ds:si指向字符串的首地址.;assumecs:code,ds:data,es:display,ss:stackdatasegmentdb'welcometomasm!',0dataendsstacksegmen

21、tdb8dup(0)displaysegmentdb1024dup(0)displayendscodesegmentstart:movdh,8movdl,3movcl,2movax,datamovds,axmovsi,0callshow_strmovax,4c00hint21h.*;显示字符串的子程序.;show_str:pushcxpushsimovax,0B800Hmoves,axdecdhmuldhmovbx,axmoval,2muldlsubdl,2addbx,ax;得到偏移地址=(dh-1)*160+dl*2-2movdi,0movch,0moval,cls:movcl,ds:sij

22、cxznext;进行判断最后一个字符是否是零,如果是零则结束moves:bx+di,cl;将字符串放到偶地址中moves:bx+di+1,al;颜色属性放到奇地址中adddi,2incsijmpsnext:popsipopcxretcodeendsendstart注意:子程序中用到的寄存器一定要将其保存起来,注意参数的传递!,只要程序中要进栈和出栈,就一定要定义堆栈段!2.解决除法溢出问题.*,.解决除法溢出问题,.参数:(ax)=dword型数据的低16位,(dx)=dword型数据的高16位,(cx)=除数.返回:(dx)=结果的高16位,(ax)=结果的低16位,(cx)=余数.assu

23、mecs:code,ss:stackstacksegmentdw8dup(0)stackendscodesegmentstart:movss,axmovsp,10hmovax,4240hmovdx,0fhmovcx,0ahcalldivdwmovax,4c00hint21hdivdw:;子程序定义开始pushaxmovax,dxmovdx,0divcxmovbx,axpopaxdivcxmovcx,dxmovdx,bx;dx:ax/cx=高位的商*65536+高位的余数*65536+低位/cxret;子程序定义结束codeendsendstart3.数值显示子程序.*,;数值显示子程序.编程,

24、将data段中的数据以十进制的形式显示出来;assumecs:code,ds:datadatasegmentdb10dup(0)dataendscodesegmentstart:movax,12666movbx,datamovds,bxmovsi,0calldtocmovdh,8movdl,3callshowstrmovax,4c00hint21h.*,;将word型的数据转变为十进制数字符串的子程序.;dtoc:pushaxpushsipushdxpushcxpushbxmovbx,0s0:movcx,10dmovdx,0divcxmovcx,ax;将商放到cx中判断商是否为零jcxzsia

25、dddx,30hpushdxincbxjmps0s1:adddx,30hpushdxincbxmovcx,bxmovsi,0s2:popaxmovds:si,alincsiloops2popbxpopcxpopdxpopsipopaxret.*,;显示字符串子程序*showstr:pushbxpushcxpushsimoval,0a0hdecdhmuldhmovbx,axmoval,2muldlsubax,2addbx,ax;得到偏移地址=(dh-1)*160+(dl-2)*2movax,0B800Hmoves,axmovdi,0movch,0moval,cls:movcl,ds:sijcxz

26、next;进行判断最后一个字符是否是零,如果是零则结束moves:bx+di,cl;将字符串放到偶地址中moves:bx+di+1,al颜色属性放到奇地址中adddi,2incsijmpshortsnext:popsipopcxpopbxretcodeendsendstart本文来自CSDN博客,请标明出处课程设计一收藏课程设计一:.*;课程设计1,将下面的data中的数据按照表格的形式显示在屏幕上.*;assumecs:code,ds:datadatasegmentdb11dup(0);在数据段开辟一段空间存放数据转换后的字符串db'1975','1976',

27、'1977','1978','1979','1980','1981','1982','1983'db'1984','1985','1986','1987','1988','1989','1990','1991','1992'db'1993','1994','1995'以上是表示21年的21个字符

28、串dd16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514dd345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000以上是表示21年公司总收的21个dword型数据dw3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226dw11542,14430,45257,17800以上是表示21年公司雇员人数的21个word型数据dataendscodesegmentstart

29、:movax,datamovds,axmovcx,21subsi,simovbx,0movdh,2s0:pushcxmovdi,dx;此处一定要注意,实现的是si能加四,注意数据段中各种数据的类型!!movcl,02hmovdl,0;把年份送到table中;movax,si+11movds:0,axmovax,si+2+11movds:2,axmovbyteptrds:4,0pushsicallshowstrpopsi*;把收入送到table中*movax,si+84+11movdx,si+86+11pushsicalldtocmovdx,dimovdl,20callshow_strpopsi

30、;,只能增;把人数送到table中,注意人数是双字节,所以每次不能增四;subsi,bxmovax,si+168+11movbp,axsubdx,dxpushsicalldtocmovdx,dimovdl,40callshow_strpopsi*;计算人均收入并把其送到table中*movax,si+84+11movdx,si+86+11divbp只要人均值,余数不要subdx,dxpushsicalldtocmovdx,dimovdl,60callshow_strpopsiaddsi,4incdhpopcxloops0movax,4c00hint21h.*,;数字转化为字符串子程序.;dto

31、c:pushaxpushcxpushdxmovsi,9dnext:movcx,10calldivdwaddcx,30hmovsi,cl;将转换好的字符串放到我们定义的数据段中decsijnednextcmpax,0jnednextincsipopdxpopcxpopaxret.*,;防溢出除法子程序.;divdw:jmpshortdivstartdataregdw4dup(0)divstart:pushbxpushdspushsicmpdx,cx;通过这里实现兼容没有溢出的除法jbdivnoflomovsi,offsetdataregmovsi,ax;保存低16位Lmovax,dx;求H/N,

32、得到int(H/N)和rem(H/N),分别保存在ax和dx当中subdx,dx;*这个语句非常重要,对dx清零,避免溢出divcxmovsi+2,dx;保存rem(H/N)movbx,512;求得int(H/N)*65536mulbxmovbx,128mulbxmovsi+4,ax;保存int(H/N)*65536movsi+6,dxmovax,si+2;求得rem(H/N)*65536movbx,512mulbxmovbx,128mulbxaddax,si;求得rem(H/N)*65536+Ldivcx;求得rem(H/N)*65536+L/N*注意这里进行的除法不能清除dx,这里不可能会

33、溢出addax,si+4;求得结果的低16位movdx,si+6;求得结果得高16位jmpshortdsretdivnoflo:divcxmovcx,dxsubdx,dxdsret:popsipopdspopbxret;显示字符串子程序;show_str:pushax;注意子程序中要用到的寄存器要保存起来pushdxpushcxpushespushdipushsipushbxmovax,0moval,0a0hmuldhmovbx,axmoval,2muldladdbx,ax;得到偏移地址=dh*160+dl*2movdi,bx;将偏移地址保存起来movax,0B800Hmoves,axmova

34、l,clmovcx,0s:jcxznext将字符串放到偶地址中movcl,ds:simoves:di,cladddi,2incsijmpshortsnext:popbxpopsipopdipopespopcxpopdxpopaxretcodeendsendstart本文来自CSDN博客,请标明出处:第一章收藏王爽汇编语言答案(本答案是自己做的所有题目已在deubg中调试;但难免有差错,发现的提醒我email:maokaijiang1211.谢谢)检测点11.3(1) 第一空:jnbs0第二空:jnas0第一空:jbs0第二空:jas0检测点11.4ax=45H注意:需要把标志寄存器的各个位写出

35、来,然后再进行与运算!实验十一:编写子程序.*,.编写子程序letterc将以0结尾的字符串中的小写.字母转变成大写字母,ds:si指向字符串首地址.assumecs:codesg,ds:datasgdatasgsegmentdb"Beinner'sAll-purposesymbolicInstructionCode.",0datasgendscodesgsegmentstart:movds,axmovsi,0calllettercmovax,4c00hint21h.*,;子程序letterc.;letterc:pushaxpushsis0:moval,sicmpal

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论