Ⅰ· 无病呻吟

  学一门语言,不动手实验是学不好的,在实验中不断遇坑然后解决,才有进益。所以写一下我在第一次汇编实验中的所思所想(王爽《汇编语言》第二章章末实验)。

Ⅱ · 实验内容

  •   题解思路:

    这个题需要我们向内存中写入一段代码并单步执行,仔细看过我上篇博文给出的链接,很容易想到,写入一段东西 有两个指令:e和a。

    e是向指定位置写入机器码,(-e [段地址]:[偏移量],可逐个修改,亦可批量修改,下面是逐个修改),输完回车会显示指定内存地址处的原数据,输入要修改为的值。然后个选择,1.空格:修改紧接着的下一个地址的内容。2.回车:不再继续修改。单步执行命令为t,从cs:ip默认地址开始执行命令。

  •   题解过程:

    1.再用 a 指令直接输入一段代码,然后用 d 命令查看其机器码。

    2.t单步执行(每次执行一条指令的时候,会根据指令长度,计算下一个命令的地址,做预读取)

  •   题解思路:

    写入指令倒是没什么难度,a 命令加上个指定地址就好了,重点在于,利用无条件跳转 jmp 达到计算2^8的目的,这就需要自己手动指定什么时候停止。这里用 t 加 指定指令数来实现。那就要算好要执行的指令数,将 add 和 jmp 做为一套运算,每套运算下来相当于ax的值乘以2,所以要计算2^8就是要做8套运算,乘以二就是要执行16条指令,别忘了还有一开始给ax赋初值的一条,所以总共17条指令!这里有个坑!!!dosbox里都是十六进制,所以如果输入条数的时候输入的是17,那实际上执行了23条指令。

    另外,讲过t从cs:ip默认指向的地址开始执行,所以要先改好cs值,ip的值可以在用 t 命令时指定。

  •   题解过程:

    1.写完指令后看下寄存器状态和指令机器码

    2.用 r 查看并修改cs值

    3.单步执行,并查看最后运算结果

  •   题解思路:

    用 d 命令加上起始地址查看指定内容,并用 e 尝试修改

  •   题解过程:

    事实证明,不能修改,原因是这段属于ROM(只读存储),其内容,在一开始就烧录好,只供读取使用。

  •   题解思路:

    照打命令,查看现象。修改命令参数,尝试修改显示的位置、符号、颜色、背景色、闪烁。

  •   题解过程:

    1.照例尝试

    2.上图发现写入不同内容后显示的图案样式颜色有所不同,在找到规律后,如下实验

实际上,这里能看出来两点:一、dos内显示区域起始位置为b8000。二、参数细节不同,显示效果不同。详细如下:

  奇数位的字节表示显示什么符号,这是对应的十六进制ASCII码值,四行命令对比即可体现,诸君可尝试不同图案。

  然后偶数位字节分出来高位(前位)和低位(后位)。低位表示何种颜色(0~F共16种)图中用笑脸和梅花共同展示了所有的16种颜色(黑色在最开头,不过融入窗体黑色,看不到,这里就可以当作“隐藏了”)高位数字又分成两个段,0~7和8~F,他们都有背景色,且一样,但是后段有闪烁效果。

(以上文段为本人总结规律,并非真正原理,有所偏差,以下面链接作矫。)

https://blog.csdn.net/nicholas199109/article/details/8554886

整体上就是这些了,最后一个比较有意思,诸君可以玩出点不同的效果。

Ⅲ · 补充

  补充一张8086PC机内存地址空间分配的基本情况,实验3、4都用到了

【8086汇编-Day3】用debug做实验时的技巧与坑的更多相关文章

  1. 怎样让oracle实验本在不做实验时性能提升——win7下举例

    怎样让oracle实验本在不做实验时性能提升--win7下举例 型号:ThinkPad E431 系统:WIN7 实验使用的笔记本不使用数据库时.建议将oracle关闭,使其释放占用的资源. orac ...

  2. 【8086汇编-Day5】第二次实验

    debug的使用 偷个懒,之前写过了这里不再赘述 实验 1)实验1 要求:用e将一些数据写入内存,用a写入一段程序,t 逐条执行 观察具体参数变化,并探究现象 1.e写入,d检查 2.a写入程序 3. ...

  3. 【8086汇编-Day2】dosbox实验环境配置及测试

    我学习汇编用的是王爽的<汇编语言>第三版,书中是以8086处理器为例,是工作在实模式下的,而当下的个人电脑处理器都是工作在保护模式下的.所以需要一个虚拟的工作在实模式下的处理器,这里主要用 ...

  4. 8086汇编语言学习(二) 8086汇编开发环境搭建和Debug模式介绍

    1. 8086汇编开发环境搭建 在上篇博客中简单的介绍了8086汇编语言.工欲善其事,必先利其器,在8086汇编语言正式开始学习之前,先介绍一下如何搭建8086汇编的开发环境. 汇编语言设计之初是用于 ...

  5. 【8086汇编-Day1】预备知识

    菜鸟的8086汇编入门之旅,偶有错处恭请大佬们指正. Ⅰ· 闲说一下 我为什么学汇编?相对于晦涩难懂的01010101011010机器语言(高低电平变化驱动机器做出不同反应),汇编语言用更便于记忆和使 ...

  6. 8086汇编——Introduction(8086内部寄存器,段寄存器,存储器分段)

    8086汇编--Introduction 一.8086CPU的三种工作模式 实模式:只有低20位地址线起作用,仅能寻址第一个1MB的内存空间.MS DOS运行于该模式下. 保护模式:在该模式下,机器可 ...

  7. 做dg时遇到的log_archive_dest、log_archive_dest_1、db_recovery_file_dest之间互相影响

    前提:归档开启.默认不指定归档文件夹. 今晚遇到客户那里设置了闪回区和log_archive_dest.不停库做DG时,无法指定log_archive_dest_n參数,巨坑. .实验了下.结论例如以 ...

  8. Win10下C语言转8086汇编

    目录 Win10下C语言转8086汇编 简介 开始 写C代码 转换成汇编代码 Win10下C语言转8086汇编 简介 最近学习<王爽汇编>,然后突发奇想,想一边写C语言用编译器将其翻译成汇 ...

  9. 汇编初入门debug实操

    修改cs:ip的值 jmp 段地址:偏移地址 //在汇编指令中用,不是在debug上用的 如 jmp 2AE3:3 //执行后CS=2AE3H ip=0003H 若只修改IP内容 jmp 某一个合法的 ...

随机推荐

  1. [EffectiveC++]item34:区分接口继承和实现继承

    [EffectiveC++]item34:区分接口继承和实现继承

  2. SVN安装操作流程

    SVN 安装操作流程 1.服务端安装流程 1.1 双击打开svn-server安装包 1.2 点击Next 1.3 勾选上“I accert the terms in the License Agre ...

  3. 使用log4j让日志写入数据库

    之前做的一个项目有这么个要求,在日志管理系统里,需要将某些日志信息存储到数据库里,供用户.管理员查看分析.因此我就花了点时间搞了一下这一功能,各位请看. 摘要:我们知道log4j能提供强大的可配置的记 ...

  4. nginx里配置跨域

    发布于 881天前  作者 wendal  1404 次浏览  复制  上一个帖子  下一个帖子  标签: nginx 跨域 if ($request_method = OPTIONS ) { add ...

  5. 【深入理解JVM】:Java内存模型JMM

    多任务和高并发的内存交互 多任务和高并发是衡量一台计算机处理器的能力重要指标之一.一般衡量一个服务器性能的高低好坏,使用每秒事务处理数(Transactions Per Second,TPS)这个指标 ...

  6. BZOJ2342:[SHOI2011]双倍回文(Manacher)

    Description   Input 输入分为两行,第一行为一个整数,表示字符串的长度,第二行有个连续的小写的英文字符,表示字符串的内容. Output 输出文件只有一行,即:输入数据中字符串的最长 ...

  7. IE11,Chrome65,Firefox58 的webdriver驱动下载,调用浏览器打开网址

    一.环境及需求 1.1环境 Windows10 + Python 3.6.4 + selenium 3.141 1.2需求 工作需要实现一个网页自动登录的操作,决定使用selenium+python实 ...

  8. Cocos2dx打包apk时变更NDK引发问题及解决

    现在官方的Cocos Studio已经支持打包apk文件,写该随笔的时候还没试过官方的打包功能,所以就按自己的学习顺序先把打包的心得写下. 问题及最终解决方案: 其中耗时最长的问题就是ndk-r10改 ...

  9. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室 实战系列(内容已过期,阅读请慎重)

    项目简介 利用ASP.NET SignalR技术与Layim前端im框架实现的一个简单的web聊天室,包括单聊,群聊,加好友,加群,好友搜索,管理,群组管理,好友权限设置等功能.涉及技术: Elast ...

  10. 如果将自己的项目共享到github上

    1:创建仓库 点击New repository创建仓库.Git上仓库就相当于项目的意思 创建仓库名(repository) 创建成功后得到自己的github地址 2:在eclipse中创建自己的项目 ...