实验7 寻址方式在结构化数据访问中的应用_第1页
实验7 寻址方式在结构化数据访问中的应用_第2页
实验7 寻址方式在结构化数据访问中的应用_第3页
实验7 寻址方式在结构化数据访问中的应用_第4页
实验7 寻址方式在结构化数据访问中的应用_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

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

文档简介

计算机学院实验报告课程汇编语言实验名称实验7寻址方式在结构化数据访问中的应用专业计算机科学与技术2018年12月24日实验目的定位内存单元的寻址方式汇总寻址方式的综合应用转移指令的分类和原理熟悉在显存中编程的方法二、实验内容及要求(一)寻址方式的汇总及综合应用定位内存单元的寻址方式有几种,并举例说明。寻址方式在结构化数据访问中的应用。Poweridea公司从1975年成立一直到1995年的基本情况如下。年份收入(千美元)雇员人均收入(千美元)1975163?1976227?19773829?1978135613?1979239028?1980800038?1995593700017800?下面的程序中,已经定义好了这些数据:assumecs:codesgdatasegmentdb'1975'5'1976'5'1977','1978'5'1979'5'1980'5'1981'5'1982'5'1983'db'1984'5'1985'5'1986'5'1987'5'1988'5'1989'5'1990','1991'5'1992'db'1993','1994','1995';年份dd16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514dd345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000;公司总收入dw3Z9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226dw11542,14430,15257,17800;公司雇员人数dataendstablesegmentdb21dup('yearsummne??')tableends编程,将data段中的数据按如下格式写入到人均收入(取整),结果也按照下面的格式保存在tabletable段中,并计算21年中的人均收入,结果也按照下面格式保存在table段中。1年地址占1行,0123456789ABCDEF每行的起始地址table:0‘1975’163?table:10H‘1976’227?table:20H‘1977’3829?table:30H‘1978’135613?table:40H‘1979’239028?table:50H‘1980’800038?Mtable:140H‘1995’593700017800提示:可将data段中的数据看成是多个数组,而将table中的数据看成是一个结构型数据的数组,每个结构型数据中包含多个数据项,可用bx定位每个结构型数据,用idata定位数据项,用si定位数组项中每个元素,对于table中的数据的访问可采用[bx].idata和[bx].idata[si]的寻址方式。注意,这个程序是目前为止最复杂的程序,它机会用到了我们以前学过的所有知识和编程技巧。所以,这个程序是对我们从前学习的最好的实践总结。三、实验解答过程及结果(一)寻址方式的汇总及综合应用定位内存单元的寻址方式有5种,如下:(1)[idata]例:movax,[5](ax)=((ds)*16+5)⑵[bx]例:movax,[bx](ax)=((ds)*16+(bx))[bx+idata]例:movax,[bx+5](ax)=((ds)*16+(bx)+5)[bx+si]或[bx+di]例:movax,[bx+si](ax)=((ds)*16+(bx)+(si))[bx+si+idata]或[bx+di+idata]例:movax,[bx+si+5](ax)=((ds)*16+(bx)+(si)+5)寻址方式在结构化数据访问中的应用(1)给出该设计过程或算法该题目地址的变化是有规律的,我们可以知道,程序运行完的table段一共有21行,分别存放21年的数据,每行有16个字节,正好放满所有内容。所以采用loop循环21次,每次都在table段的对应行存放”年份(4字节)+空格+收入(4字节)+空格+雇员数(2字节)+空格+人均收入(2字节)+空格”形式的数据。这里的数据我放在es:[si+idata]里,si最初为0,每次循环+16(即一行)。而从data段的数据可以看出,第一块年数据地址之间相隔4,第二块收入数据地址之间相隔也是4,第三块雇员数据地址之间相隔2。第一块数据和第二块数据地址之间相隔4*21=84(因为一个年数据占了4个字节),第二块数据和第三块数据地址之间也是相隔84(收入是dword数据)。年数据用ds:[bx]定位,收入数据用ds:[bx+84]定位,bx最初为0,每次循环bx+4(即跳到下个相应数据)。雇员数用ds:[di+168]定位,di最初为0,每次循环di+2。代码如下:assumecs:code,ds:data,ss:stackdatasegmentdb'1975','1976','1977','1978','1979','1980','1981','1982','1983'db'1984','1985','1986','1987','1988','1989','1990','1991','1992'db'1993','1994','1995';以上是表示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,15257,17800;以上是表示21年公司雇员人数的21个word型数据dataendstablesegmentdb21dup('yearsummne??')tableendsstacksegmentstackdb128dup(0)stackendscodesegmentstart:movax,stackmovss,axmovsp,128movax,datamovds,ax;设置数据从哪儿来movax,tablemoves,ax;设置数据到哪儿去

movsi,0;ds:[si]si=0年份开始的偏移地址movdi,84;ds:[di]di=84公司总收入开始的偏移地址movbx,168;ds:[bx]bx=168公司雇员人数开始的偏移地址movbp,0;es:[bp]bp=0数据存到table中的开始的偏移地址movcx,21;循环21次inputTable:pushds:[si];把年份放到table的year中用栈转移更简单popes:[bp]pushds:[si+2]popes:[bp+2]movax,ds:[di];把公司总收入放到table的summ中因需算人均收入,故不使用栈movdx,ds:[di+2]moves:[bp+5],axmoves:[bp+7],dx;ddmovdx,ds:[di+2]moves:[bp+5],axmoves:[bp+7],dx;bp+5对应su;bp+7对应mmpushds:[bx];把雇员人数放到table的ne中popes:[bp+0AH]divwordptrds:[bx_moves:[bp+0DH],ax;把人均收入放到talbe的??中;0123456789ABCDEdb21dup('yearsummne??')addsi,4;年份占4个字节adddi,4;总收入占4个字节addbx,2;雇员人数占2个字节addbp,16;放入table中每一年换一行loopinputTablemovax,4c00Hint21Hcodeendsendstart(3)Table段中原始数据与最终结果比对。前后对比如图:A:O0O95A:0010fliOGE©7SA:OG3e5f*:0Grte,心JUMWSjZGFF9FG0£AFFFF-AD©11703A30192Ot-01FFFTFfFFFFFFFF-FF通KSBIBee5A0?・FF@0000000000909-3021CSGO06GOG@00-0000000000OS0900-OGSO0G0000GOORh匚:.?SA;0G5©5fi:O060ft:O0765A;0G6efi:O09©C/jq丽eftDJ^他5A:O0AOA:GOB07SA1O0C05A;G0D6A:00EOn:ooFP7670:7?87Brdmtcrminate:nnorrMLlij90009G10&3ZQ9030OGH000509070:9090:0OBO:eoce;OG®0:O0EO:00F031313131明393^393^333939373?3?37373838383B383B383838383935W3738qrJ4seFEF

0000G1J533ZQ9131ZOC7Z&8120297C3BZOEB3929CA3620ISC3!10Q-0G00-0G90-0090-9000-00ecroe0&-000CK0O01-000g-0003-0G65-D60

温馨提示

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

评论

0/150

提交评论