在装完DosBox环境之后,就可以用debug模式进行汇编指令的编程了。

  • 实验内容:

    

首先用a指令进行数据的储存,然后用t命令进行调试。

可以发现ax,bx在不同的命令下发生了改变,cs的地址和指令是相同的,ip的值也是根据输入指令的长度而不断的增加。

(2)将下面3条指令写入从2000:0开始的内存单元中,利用这3条指令计算2的8次方。

    mov ax,1

    add ax,ax

    jmp 2000:0003

先观察一下实验要求,执行完第一步后ax= 1,第二步后ax  = 2,执行add 1次 2*2,执行2次,就是2*2*2就是2的3次方,那么2的8次方 就 add 执行 7次。

执行之前先将指令指向add语句 这样就会重复执行 add语句,用jmp 指令更改CS、IP寄存器的值,从而控制CPU执行目标指令。之后,就可执行我们写的汇编指令了,我们要先使用r指令改变 cs 和ip的指向,cs为代码段寄存器,ip为指针寄存器。在任意时刻,CPU将cs:ip指向的内容当做指令执行。

关于执行命令t的执行次数:执行第一二步执行需 2个t,那么执行第三步的t的时候实际上只是改变cs:ip的指向,并没执行cs:ip指向内容的机器指令,后面的7个jmp 每个需要执行2个t才能执行add方法。所以共需要执行t 16次才能计算出2的8次方。

第一次t命令:

最后一次t命令:(最后短线位置的t手抖了)

(3)查看内存中的内容。

PC机主板上的ROM中有一个生产日期,在内存FFF00H-FFFFFH的某几个单元中,请找到这个生产日期并试图改变它。 

尝试修改:

发现无法修改。

(4)向内存从B8100H开始的单元中填写数据,如:

-e B8100:0000 01 01 02 02 03 03 04 04

请读者先填写不同的数据,观察产生的现象;再改变填写的地址,观察产生的现象。

可以看到,向B8100H单元中输入这些数据后,可以观察到界面上出现了一些彩色的图案,黄方框标识。

接着在相同的地址内填写不同的数据,可以看到出现了完全不同的图案。

下面改变输入数据的地址,可以看到显示的内容不变,位置改变了。

说实话,我也不知道这是怎么回事。我就去查了查,度娘告诉我:这一段内存为显存,是RAM,可以改变其值在屏幕上的显示,其中这一个字符占两个字节,前一个(低)为字符的ASCII码,后一个(高)为要显示的颜色。

实验总结:

(1)首先得理解并且熟练操作的一些指令。

在debug模式下常用的命令:

R命令:查看、改变CPU寄存器的内容;

D命令:查看内存中的内容;

E命令:改写内存中的内容;

U命令:将内存中的机器指令翻译成汇编指令;

T命令:执行一条机器指令;

A命令:以汇编指针的格式在内存中写入一条机器指令。

(2)通过这次实验,对debug的一些基本操作有了基本了解,如何写入机器代码和汇编代码,查看所需要的内容,并且知道了某些内存中存储的内容,以及它们中的内容是否可变等知识。

如果有什么错误的话,还希望各位大佬指出。谢谢!

汇编实验一 查看CPU和内存,用机器指令和汇编语言指令编程的更多相关文章

  1. 汇编语言——用DOSBox的debug查看CPU和内存 & 用机器指令和汇编指令编程

    实验一 查看CPU和内存,用机器指令和汇编指令编程   实验目的 了解什么是Debug,以及Debug中需要用的一些功能 R:查看.改变CPU寄存器的内容 D:查看内存中的内容 E:改写内存中的内容 ...

  2. 实验一 查看CPU和内存,用机器指令和汇编指令编程

    (1):使用debug,将下面的程序段写入内存,逐条执行,观察每条指令执行后,CPU中相关寄存器中内存的变化. 机器码        汇编指令 b8 20 4e     mov ax,4E20H 05 ...

  3. 实验1 查看CPU和内存,用机器指令和汇编指令编程

    ·实验任务 (1)使用Debug,用E命令和A命令以两种方式将指令写入内存 机器码        汇编指令 b8 20 4e    mov ax,4e20h 05 16 14    add ax,14 ...

  4. Linux 查看CPU,内存,硬盘 !转

    Linux 查看CPU,内存,硬盘 本文转自:http://hi.baidu.com/mumachuntian/item/a401368dbe8a66cab07154e8 1 查看CPU 1.1 查看 ...

  5. CentOS查看CPU、内存、网络流量和磁盘 I/O

    安装 yum install -y sysstat sar -d 1 1 rrqm/s: 每秒进行 merge 的读操作数目.即 delta(rmerge)/swrqm/s: 每秒进行 merge 的 ...

  6. Linux查看CPU和内存使用情况 【转】

    Linux查看CPU和内存使用情况 在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应信息分析系统状况的需要.在 CentOS 中,可以通过 top 命令来查看 CPU 使用状况.运行 ...

  7. 操作系统复习——如何查看一个进程的详细信息,如何追踪一个进程的执行过程 ,如何在 Linux 系统下查看 CPU、内存、磁盘、IO、网卡情况?epoll和select区别?

    1. 如何查看一个进程的详细信息,如何追踪一个进程的执行过程 通过pstree命令(根据pid)进行查询进程内部当前运行了多少线程:# pstree -p 19135(进程号) 使用top命令查看(可 ...

  8. CentOS查看CPU、内存、网络流量和磁盘 I/O【详细】

    安装 yum install -y sysstat sar -d 1 1 rrqm/s: 每秒进行 merge 的读操作数目.即 delta(rmerge)/swrqm/s: 每秒进行 merge 的 ...

  9. 『开发技术』Ubuntu与Windows如何查看CPU&GPU&内存占用量

    0 序·简介 在使用Ubuntu或者Windows执行一些复杂数据运算时,需要关注下CPU.GPU以及内存占用量,如果数据运算超出了负荷,会产生难以预测的错误.本文将演示如何用简单地方式,实时监控Ub ...

随机推荐

  1. Django_简单的数据库交互案例

    https://www.jianshu.com/p/bd0af02e59ba 一.页面展示 做一个简单的数据库交换的练习案例   页面.png 二.创建mysql 表 (1)创建django (2)创 ...

  2. mpeg2文件分析(纯c解析代码)

    参考链接: 1. MPEG-2码流结构分析 https://www.cnblogs.com/CoderTian/p/9246225.html(本文语法采用这里的截图,代码原创) 1. mpeg2的码流 ...

  3. java算法01 - 链表

    1.链表 在Java中实现链表,每个节点都有一个值,然后把它链接到下一个节点.下面来看一下节点的实现 class Node<E> { private E e; private Node&l ...

  4. 将springboot打包成的jar文件做成windows服务,解决java程序自启动问题

    https://blog.csdn.net/weixin_40411331/article/details/80193376 https://blog.csdn.net/qq_33188180/art ...

  5. 前段学习的roadmap

    引自http://www.cnblogs.com/IMxinu/p/9693041.html

  6. https://www.cnblogs.com/soundcode/p/4174410.html

    https://www.cnblogs.com/soundcode/p/4174410.html 1.首先要在服务器端新建一个网站axpx页 然后再网站的后台写代码获取winform传过来的文件名. ...

  7. 运维shell全部语法进阶

    Linux运维之shell脚本进阶篇 一.if语句的使用 1)语法规则 1 2 3 4 5 6 7 8 9 if [条件]     then         指令 fi 或 if [条件];then ...

  8. VUE处理 组件赋值 watch 监听不到赋值问题

    开发中,遇到了一个BUG,做的页面类似于 导航切换效果.两个组件传值. 上方导航组件   (主动) 左侧导航组件   (被动) 点击上方导航,左侧导航实现变换对应的栏目. 实现过程中,遇到了点问题.左 ...

  9. iOS跳转第三方应用举例一号店和京东

    1.首先要跳转到第三方应用都需要知道第三方应用的scheme,虽然百度能得到很多,但是不乏一些新增的或者改了的,怎么获得APP的scheme,鉴于现在iTunes不好用了,介绍一个app ---app ...

  10. MySQL之内连接、左连接和右连接

    数据表内数据如下: books表:                                                                                    ...