汇编基础知识之二debug的使用
DEBUG的使用
(要在win32位习题下进行,win7 64位需要安装DosBox和debug这2个软件):
1:win64位下debug的使用教程:
下载debug.exe,这里我把debug放在了c盘根目录下
下载DosBox并安装好,
输入mount c c:\ 加载目录到c盘
输入c:\ 进入到c盘,看到我们已经在c盘下了。
输入debug,表示打开放在c盘下的debug工具,使用r命令,可以看到,我们进入了熟悉的debug环境。

2:debug的基本命令:
R 查看以及改变CPU寄存器的内容
例如 r ax 修改ax 的内容

D 查看内存中的内容
E 改写内存中的内容
U 将内存中的机器指令翻译成汇编指令
T 执行一条机器指令
A 以汇编指令的格式在内存中写入一条机器指令
quit 退出debug模式
3:实例讲解:
1)将下面3条指令写入从2000:0开始的内存单元中,利用这2条指令计算2的8次方。
mov ax,1
add ax,ax
jmp 2000:0003
(1): 说明2的8次方是256,也就是10000 0000(B)=256(十进制)=100(16进制),算到ax=0100时就是结果
注意:debug里面的数字都是16进制的

(2)然后修改cs的值为2000和ip的值为0

可见此时的cs=2000,ip=0
(3)使用t命令单步执行:

(4)注意:jmp 0003是跳转到2000:0003内存地址,然后在相加,然后在跳转,一直循环

最后的结果,现在里面的只看ax,cs,ip

2)查看内存的内容,PC机主板上的ROM中写的一个生产日期,在内存FFF00H~~FFFFFH的某几个单元中,请找到生成日期并试图改变它。
解析:FFF00H是20位,有段地址和偏移地址合成,FFF0段地址,0偏移地址,FFFFFH有FFF0段地址和FF偏移地址
先修改CS为fff0,IP地址值位0

查看内存的范围fff0:0 ff

最右边部分是ascii的值是10进制的,中间的是16进制的,通过ascii表可查,十进制30是对应的ascii值是0(30(H)-->48(十进制),48对应的ascii是0),以此类推可得
日期是92年1月1日。
下面尝试修改日期,e命令是改写内存的东西

但是日期并没有改变,因为是主板上的ROM是只读存储器,不能修改
3)向内存从B8100H开始的单元中填写数据
e B810:0000 01 01 02 02 03 03 04 04

可以看到上面出现了小图标,这是因为B810是显存的地址,修改显存的地址改变在屏幕上显示。
汇编基础知识之二debug的使用的更多相关文章
- Java JDBC的基础知识(二)
在我的上一篇Java JDBC的基础知识(一)中,最后演示的代码在关闭资源的时候,仅仅用了try/catch语句,这里是有很大的隐患的.在程序创建连接之后,如果不进行关闭,会消耗更多的资源.创建连接之 ...
- LeetCode刷题191130 --基础知识篇 二叉搜索树
休息了两天,状态恢复了一下,补充点基础知识. 二叉搜索树 搜索树数据结构支持许多动态集合操作,包括Search,minimum,maximum,predecessor(前驱),successor(后继 ...
- Ajax基础知识(二)
接上一篇 Ajax基础知识(一) 在上一篇博客里,抛弃了VS中新建aspx页面,拖个button写上C#代码的方式.使用ajax的方式,异步向服务器请求数据.我们让服务器只简单的返回一个" ...
- HTTP基础知识(二)
接着上一章的内容:HTTP基础知识(一) 二.简单的HTTP协议 1.客户端:请求访问文本或图像等资源的一端称为客户端: 服务器端:提供资源响应的一端 2.以百度为例子 这是请求头: 在起始行 ...
- XML的相关基础知识分享(二)
前面我们讲了一下XML相关的基础知识(一),下面我们在加深一下,看一下XML高级方面. 一.命名空间 1.命名冲突 XML命名空间提供避免元素冲突的方法. 命名冲突:在XML中,元素名称是由开发者定义 ...
- python基础知识(二)
以下内容,作为python基础知识的补充,主要涉及基础数据类型的创建及特性,以及新数据类型Bytes类型的引入介绍
- Android中的一些基础知识(二)
这几天在回顾Android的基础知识,就把一些常见的知识点整理一下,以后忘了也可以翻出来看一看. 简单介绍一下Activity的生命周期 在API文档中对生命周期回调的函数描述的很详细,这里我只是翻译 ...
- 《Java从入门到失业》第一章:计算机基础知识(二):计算机组成及基本原理
1.2计算机组成及基本原理 1.2.1硬件组成 这里说的计算机主要指微型计算机,俗称电脑.一般我们见到的有台式机.笔记本等,另外智能手机.平板也算.有了一台计算机,我们就能做很多事情了,比如我在写这篇 ...
- C#基础知识系列二(值类型和引用类型、可空类型、堆和栈、装箱和拆箱)
前言 之前对几个没什么理解,只是简单的用过可空类型,也是知道怎么用,至于为什么,还真不太清楚,通过整理本文章学到了很多知识,也许对于以后的各种代码优化都有好处. 本文的重点就是:值类型直接存储其值,引 ...
随机推荐
- 关于C/C++中数组元素的初始化
1.一维数组初始化 对于一维数组,其初始化有一个错误的观点是:一直以为 int a[256]={0};是把a的所有元素初始化为0,int a[256]={1};是把a所有的元素初始化为1. 数组可 ...
- TCP拆包粘包之分隔符解码器
TCP以流的方式进行数据传输,上层的应用协议为了对消息进行区分,往往采用如下4种方式. (1)消息长度固定,累计读取到长度总和为定长LEN的报文后,就认为读取到了一个完整的消息:将计数器置位,重新开始 ...
- 分享Kali Linux 2016.2第47周镜像
分享Kali Linux 2016.2第47周镜像Kali Linux官方于11月20日发布Kali Linux 2016.2的第47周镜像.这次发布仍然包含11个镜像文件.其中,不仅包含Gnome桌 ...
- delphi公共函数 UMyPubFuncFroc--版权所有 (C) 2008 勇者工作室
{*******************************************************} { } { Delphi公用函数单元 } { } { 版权所有 (C) 2008 勇 ...
- 【面试题】TB
动态库与静态库区别: 堆栈区别,这样区分的意义: 不用第三个变量,交换两个变量的值: 链表公共节点: 判断链表是否有环: 常用排序算法,哪个可以链表实现: 哪科学的好,感兴趣: 项目介绍,遇到的最大问 ...
- 由case 和 break 引发的思考
我在使用case 语句的时候,发现结果不对劲,原来我是忽略了break这个语句的添加 然后,我要反思的是,这样基本的语句,我这样的错误也能犯,证明我自己之前还没有真正掌握这个语句的使用. 所以,真正地 ...
- Hadoop2.2.0 hive0.12 hbase0.94 配置问题记录
环境:centos6.2 Hadoop2.2.0 hive0.12 hbase0.94 1>hadoop配好之后,跑任务老失败,yarn失败,报out of memory错误,然后怎么调整内存大 ...
- leetcode Container With Most Water
Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). ...
- 移动端开发——javascript
javascript(简称js)语言在移动前端应用很广.可以说必不可少,许多效果都是和js相关的.包括现在移动端的一些框架.jqmobi.jqtouch.sencha touch.jquerymobi ...
- The Skins of the Substance
This blog is about a java jar file : Substance.jar well, you can get it from links as below: http:// ...