第八次汇编试验_第1页
第八次汇编试验_第2页
第八次汇编试验_第3页
第八次汇编试验_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

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

文档简介

汇汇 编编 语语 言言 实实 验验 报报 告告 Assembly Language Programming Lab Reports 班级 班级 2133621336 姓名 姓名 韦涛韦涛 学号 学号 21336202133620 实验日期 实验日期 2015 05 30 2015 05 30 学院 学院 计算机与通信工程学院计算机与通信工程学院 专业 专业 计算机科学与技术计算机科学与技术 实验顺序 实验顺序 原创 原创 实验名称 实验名称 1616 位和位和 3232 位的差别位的差别 实验分数 实验分数 考评日期考评日期 指导教师 指导教师 张旭张旭 1 1 实验目的实验目的 1 掌握简化段定义 2 理解实模式和保护模式 3 学会在保护模式下编译调试汇编程序 2 2 实验环境实验环境 操作系统 windows xp 编译程序 Visual C 6 0 3 3 实验原理实验原理 1 定义工作模式 model 内存模式 调用规则 其他模式 2 选择指令集 3 option 语句 4 includelib 语句 5 invoke 语句 6 函数声明语句 函数名称 PROTO 调用规则 第一个参数类型 后续参数类型 4 4 实验步骤及结果分析实验步骤及结果分析 1 分析实模式与保护模式之间的区别 实模式 又叫实地址模式 CPU 完全按照 8086 的实际寻址方法访问从 00000h FFFFFh 1MB 大小 的地址范围的内存 在这种模式下 CPU 只能 做单任务运行 寻址公式为 物理地址 左移 4 位的段地址 偏移地址 即 物理地址是由 16 位的段地址和 16 位的段内偏移地址组成的 保护模式 又叫内存保护模式 寻址采用 32 位段和偏移量 最大寻址 空间 4GB 在这种模式下 系统运行于多任务 设计这种模式的原因和好处 是 保护模式增加了寻址空间 增加了对多任务的支持 增加了段页式寻址 机制的内存管理 分段机制使得段具有访问权限和特权级 各应用程序和操 作系统的代码和核心是被保护的 这也是多任务支持的实现关键和保护这个 名字的由来 寻址过程为 物理地址 由段地址查询全局描述符表中给出 的段基址 偏移地址 即 物理地址由影像寄存器中的基址加上 16 位或者 32 位的偏移组成 实模式将整个物理内存看成分段的区域 程序代码和数据位于不同区域 系统程序和用户程序没有区别对待 而且每一个指针都是指向 实在 的物理 地址 这样一来 用户程序的一个指针如果指向了系统程序区域或其他用户 程序区域 并改变了值 那么对于这个被修改的系统程序或用户程序 其后 果就很可能是灾难性的 为了克服这种低劣的内存管理方式 处理器厂商开 发出保护模式 这样 物理内存地址不能直接被程序访问 程序内部的地址 虚拟地址 要由操作系统转化为物理地址去访问 程序对此一无所知 至 此 进程 这时我们可以称程序为进程了 有了严格的边界 任何其他进程 根本没有办法访问不属于自己的物理内存区域 甚至在自己的虚拟地址范围 内也不是可以任意访问的 因为有一些虚拟区域已经被放进一些公共系统运 行库 这些区域也不能随便修改 若修改就会提示出现错误 CPU 启动环境为 16 位实模式 之后可以切换到保护模式 但从保护模 式无法切换回实模式 2 在保护模式下用 Visual C 编译调试汇编程序 输出 hello world 1 建立工程 1 启动 VC 后 从菜单中选择 File New 2 在打开的 New 对话框顶部 单击 Projects 再选中 Win32 Console Application 在 Location 编辑框中输入 c asm 再在 Project name 中输入 test 输入 test 时 它自动地添加到 Location 编辑框中 c asm 的后面 3 单击 OK 键后 出现一个新的对话框 单击 Finish 4 接下来 VC 的窗口的左边显示出 test classes 下面有 ClassView 和 FileView 两种视图 5 这时 可将 hello asm 或其他的一个 asm 源程序文件 复制到 c asm test 中 并改名为 test asm 也可以将其他的汇编程序源文件复 制到 c asm test test asm 6 接下来 再从菜单中选择 Project Add to Projects Files 在该对话框中的文件名处输入 c asm test test asm 7 在 VC 窗口左边的视图中 展开 FileView 中的 Source Files 显示 出 test asm 在 test asm 上 单击鼠标右键 出现菜单 8 在菜单中选择 Setting 弹出另一个对话框 在 Commands 编辑框中 输入 ml c coff Zi test asm 在 Outputs 编辑框中输入 test obj 再单击 OK 9 最后 再将 ML EXE 和 ML ERR 两个文件复制到 c windows 如 果 Windows 安装到其他目录 则需要把这两个文件复制到相应的目录 可 用 set windir 命令显示出 Windows 的安装目录 10 最后 验证是否能在 VC 中编译 test asm 在 VC 中按 F7 键 应该自动编 译生成 test exe 如果源程序中有错误 编译后将错误信息显示在 Output 的 Build 视图中 点击该错误信息 光标自动定位到出现错 误的程序行 也可以按 F4 键定位到错误的程序行 11 为了使 VC 适合于汇编语言的调试 从 Tools 菜单中选择 Options 再选择 Debug 页 选中 Disassembly window 中的 Code bytes 12 在 Memory window 中 选中 Fixed width 在后面填入数字 16 13 在 General 中 选中 Hexdecimal display 14 不选 View floating point registers 2 hello asm 386 model flat stdcall option casemap none includelib msvcrt lib printf proto c ptr sbyte vararg data szMsg byte Hello world 0ah 0 code start invoke printf offset szMsg ret end start 3 相关说明 386 定义使用 386 指令集 model flat stdcall 定义内存模式为 flat 即可执行文件最大可以用 4 GB 内存 定义调用规则为 stdcall option casemap none 定义程序中的变量和子程序名对大小写敏 感 includelib msvcrt lib 则调用 msvcrt lib 库文件 printf proto c ptr sbyte vararg 定义 printf 函数使用 C 调用规则 第一个参 数是字符串指针 后面的参数数量及类型不定 invoke 用于调用函数 4 调试程序 在 invoke printf offset szMsg 处设置断点 然后调出 Registers Watch 和 Disassmebly 窗口 如果某一个寄存器或内存单元的值被 改变 则它的值用红色显示出来 按 F10 键可一步一步地执行程序 执行过程 中 可以在内存窗口中观察变量的变化 在寄存器窗口中可以看到寄存器的变 化 更加方便的是 可以把鼠标移动到编辑窗口中的寄存器或变量上 停留几 秒钟后 VC 会自动地显示它们的值 可以看到 szMsg 的偏移地址为 00404000 在内存窗口中查看该地址 可 以看到该数据段保存了一个字符串 Hello world 之后 invoke printf 则跳转到 printf 函数

温馨提示

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

评论

0/150

提交评论