Ⅰ· 无病呻吟

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

Ⅱ · 实验内容

  •   题解思路:

    这个题需要我们向内存中写入一段代码并单步执行,仔细看过我上篇博文给出的链接,很容易想到,写入一段东西 有两个指令: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. 实战开发一个Nginx扩展 (Nginx Module)

    repo地址 https://github.com/wujunze/nginx-http-echo-module nginx_module_echo 使用echo指令输出一个字符串 Nginx 版本 ...

  2. NFS-heartbeat-drbd模拟NFS高可用

    NFS介绍: NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源.在NFS的应用中,本地NFS ...

  3. February 22 2017 Week 8 Wednesday

    There is only one happiness in life, to love and be loved. 生命中只有一种幸福,爱与被爱. If you think you are not ...

  4. SkyWalking 为.NET Core

    SkyWalking 为.NET Core https://www.cnblogs.com/liuhaoyang/p/skywalking-dotnet-v02-release.html Apache ...

  5. Posix多线程编程学习笔记

    Blaise Barney, Lawrence Livermore National Laboratory )标准制订了这一标准接口.依赖于该标准的实现就称为POSIX threads 或者Pthre ...

  6. Intellij IDEA Organize Imports

    使用Eclipse进行开发时,我喜欢用Ctrl + Shift + O快捷键管理Java类的导入,它可以导入所需的Java类,去除不需要的Java类. Eclipse的Organize Imports ...

  7. Ubuntu16.04死机解决方案

    内核下载地址:http://kernel.ubuntu.com/~kernel-ppa/mainline/ Ubuntu 16.04 LTS,电源设置里面的休眠/挂起/睡眠功能会使电脑会进入死机状态, ...

  8. PHP-------ajax返回值 返回JSON 数据

    ajax返回值  返回JSON  数据 ajax返回值 有text   JSON ajax返回值  返回JSON  数据 <title>无标题文档</title> <sc ...

  9. zabbix-agent安装

    1.下载yum源库 rpm -i http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm ...

  10. Spring Bean自动注册的实现方案

    这里Spring管理的Bean,可以认为是一个个的Service,每个Service都是一个服务接口 自动注册Service的好处: 1.根据指定的name/id获取对应的Service,实现简单工厂 ...