版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
汇编语⾔(第四版)实验5编写、调试具有多个段的程序解答实验5编写、调试具有多个段的程序(1)将下⾯的程序编译、连接、⽤Debug加载、跟踪、然后回答问题assumecs:code,ds:data,ss:stackdatasegmentdw0123,0456h,0789h,0abch,0defh,0fedh,0cbah,0987hdataendsstacksegmentdw0,0,0,0,0,0,0,0stackendscodesegmentstart:movax,stackmovss,axmovsp,16movax,datamovds,axpushds:[0]pushds:[2]popds:[2]popds:[0]movax,4c00hint21hcodeendsendstart①CPU执⾏程序,程序返回前,data段中的数据为多少?解答:我们先⽤debug加载跟踪⼀下看看结果如何在程序刚载⼊内存时,由于还没有执⾏设定数据段地址的指令(movds,data),DS段地址默认指向程序起始位置(包括PSP数据区),此时DS:0~DS:FF为PSP数据区(占256个字节),DS:100开始为数据段、栈段、代码段内容。(如上图)在执⾏了movds,data指令后,数据段被⼿⼯设定为DS:0~D:F为数据段(DS段地址已经被更改)(如下图)但在设定逻辑上的数据段前后,物理上的数据段是始终没有发⽣改变的,始终处于1299:0~1299:f部分由实验结果可知,data段中的数据为230156048907BC0AEF0DED0FBA0C8709②CPU执⾏程序,程序返回前,CS=______、SS=______、DS=______执⾏到movax,4c00h指令时,各寄存器内容如下由实验结果可知CS=129B,SS=129A,DS=1299③设程序加载后,code段的段地址为X,则data段的段地址为_____,stack段的段地址为_____。由②可知DS=CS-2,SS=CS-1。故data段地址为X-2,stack段地址为X-1(2)将下⾯的程序编译、连接,⽤Debug加载、跟踪,然后回答问题assumecs:code,ds:data,ss:stackdatasegmentdw0123,0456hdataendsstacksegmentdw0,0stackendscodesegmentstart:movax,stackmovss,axmovsp,16movax,datamovds,axpushds:[0]pushds:[2]popds:[2]popds:[0]movax,4c00hint21hcodeendsendstart①CPU执⾏程序,程序返回前,data段中的数据为多少?由实验结果可知,data段中的数据为23015604000000000000000000000000②CPU执⾏程序,程序返回前,CS=______、SS=______、DS=______由实验结果可知CS=129B,SS=129A,DS=1299③设程序加载后,code段的段地址为X,则data段的段地址为,stack段的段地址为。这⾥与(1)⼤致相同,因为段的结构顺序和⼤⼩是⼤致相同的由②可知DS=CS-2,SS=CS-1。故data段地址为X-2,stack段地址为X-1④对于如下定义的段:nameends如果段中的数据占N个字节,则程序加载后,该段实际占有的空间为如果N⼩于16,那么实际占⽤16个字节;如果N⼤于16,那么实际占⽤(N/16的取整数+1)*16个字节。即如果段中的数据占N个字节,则程序加载后,该段实际占有的空间为(3)将下⾯的程序编译、连接,⽤Debug加载、跟踪,然后回答问题assumecs:code,ds:data,ss:stackcodesegmentstart:movax,stackmovss,axmovsp,16movax,datamovds,axpushds:[0]pushds:[2]popds:[2]popds:[0]movax,4c00hint21hcodeendsdatasegmentdw0123,0456hdataendsstacksegmentdw0,0stackendsendstart①CPU执⾏程序,程序返回前,data段中的数据为多少?(3)与(1)(2)所不同的是(3)将数据段和栈段放到了代码段的后⾯由实验结果可知,data段中的数据为23015604000000000000000000000000②CPU执⾏程序,程序返回前,CS=______、SS=______、DS=______由实验结果可知CS=1299,SS=129D,DS=129C③设程序加载后,code段的段地址为X,则data段的段地址为,stack段的段地址为。由②可知DS=CS+3,SS=CS=+4故data段的段地址为X+3,stack段的段地址为X+4(4)如果将(1)、(2)、(3)题中的最后⼀条伪指令“endstart”改为“end”(也就是说,不指明程序的⼊⼝),则哪个程序仍然可以正确执⾏?请说明原因。在程序设计中,我们⽤伪指令end描述了程序的结束和程序的⼊⼝。在编译链接后,由“endstart”指明的程序⼊⼝,被转化为⼀个⼊⼝地址,我们可以发现在程序中设置了start和endstart后程序执⾏时会从start位置开始,到endstart位置结束。如果不设endstart,只设置end。那么此时程序会默认从PSP数据区后开始执⾏(即使设置了start,程序也不会从start位置开始执⾏)。如果要保证程序正确执⾏,那么在PSP数据区之后必须为代码段才⾏。由(1)(2)(3)三个程序可知只有程序(3)代码段在开头,故最后⼀条伪指令“endstart”改为“end”后,程序(3)仍然可以正确执⾏,程序(1)(2)虽然也能执⾏,但它们的开头是数据段,将数据段中数据视作代码来执⾏有可能会导致混乱。因此,若代码段不在程序的开头,就应当指明⼊⼝防⽌程序执⾏时逻辑上发⽣错误(5)程序如下、编写code段中的代码,将a段和b段中的数据依次相加,将结果存到c段中。assumecs:codeasegmentdb1,2,3,4,5,6,7,8;按字节存放aendsbsegmentdb1,2,3,4,5,6,7,8bendscsegmentdb0,0,0,0,0,0,0,0csegmentcodesegmentstart:___________codeendsendstart这⾥⾸先要注意的是,a段、b段和c段的数据都是按字节存放的,所以在使⽤寄存器转移数据时⼀定要使⽤8位寄存器⽽不是16位寄存器!不然就有可能引起错误(虽然本题使⽤16位寄存器与使⽤8位寄存器结果⼀样,但⼀定要规范)。这⾥笔者使⽤的思想是使⽤DS存储a段地址,b段地址可以直接使⽤DS+16表⽰(a段不⾜16个字节⽤0补上后占16个字节)ES存储c段地址,每次循环将a段和b段的⼀个字节相加后存⼊c段中即可代码如下:assumecs:codeasegmentdb1,2,3,4,5,6,7,8aendsbsegmentdb1,2,3,4,5,6,7,8bendscsegmentdb0,0,0,0,0,0,0,0cendscodesegmentstart:movax,amovds,ax;ds存放a段地址movax,cmoves,ax;es存放c段地址movbx,0movcx,8;对字进⾏8次循环操作s0:moval,[bx]addal,[bx+16]//a段不⾜16个字节⽤0补上后占16个字节moves:[bx],al//a+16后即为b段地址incbxloops0movax,4c00hint21hcodeendsendstart实验结果如下:(6)程序如下,编写code段中的代码,⽤push命令将a段中的前8个字型数据,逆序存储到b段中。assumecs:codeasegmentdw1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh;按字存储aendsbsegmentdw0,0,0,0,0,0,0,0bendscodesegmentstart:__________codeendsendstart本题与上⼀题有所不同,本题是数据是按字存储的,故使⽤16位寄存器。要求使⽤push指令将前8个字型数据存储到b段中,这⾥应当a段为数据段、b段为栈段才能使⽤push指令将a段的数据压⼊b段中,循环8次即可代码如下:assumecs:codeasegmentdw1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffhaendsbsegmentdw0,0,0,0,0,0,0,0bendscodesegmentstart:movax,am
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年云南锡业职业技术学院单招职业倾向性测试题库含答案详解
- 2026年广西水利电力职业技术学院单招职业适应性测试题库及答案详解一套
- 2026年广东省广州市单招职业倾向性考试题库及参考答案详解1套
- 新昌社工面试题目及答案
- 甘孜州消防队面试题及答案
- 安全一夏快乐暑假-暑假假期安全主题班会课件
- 园区内企业反恐怖管理协议书范本
- 什邡市人力资源和社会保障局什邡市民政局关于2025年面向全市公开选调工作人员的备考题库及一套答案详解
- 广东省第二荣军优抚医院2025年非编人员招聘备考题库及参考答案详解
- 2025年中国能源建设集团辽宁电力勘测设计院有限公司社会成熟人才招聘备考题库及1套完整答案详解
- 科研诚信和伦理管理制度(3篇)
- 肝硬化的康复护理
- 2025年淮北市交通投资控股集团有限公司及下属子公司面向社会招聘工作人员4名笔试考试参考试题及答案解析
- 露营旅游营地运营与配套服务升级方案2026年
- 2025黑龙江大兴安岭地区韩家园林业局工勤岗位人员招聘40人参考笔试试题及答案解析
- 2025年妇产科考试试题(含答案)
- 整车感知质量PQ内外饰评价标准
- 2025江苏南通海安市人民法院招聘劳务派遣制法官助理2人(公共基础知识)综合能力测试题附答案解析
- 2026年湖南中医药高等专科学校单招职业技能考试题库附答案
- 兴国县2025年招聘城市社区专职网格员【23人】考试历年真题汇编带答案解析
- 四川省凉山彝族自治州2024-2025学年七年级上学期语文期末试卷(含答案)
评论
0/150
提交评论