汇编学习笔记

汇编语言
在这里插入图片描述
可以看到图中的CS和IP的值,CS=073F,IP=0100,CS:IP就是CPU当前要读取和执行的指令。在所有的最下面那行,显示073F:0100中存储的机器码,值为0000,对应的指令为ADD [BX+SI],AX。
通过使用-r ax这样的命令,可以修改ax寄存器中的值。如下图:
在这里插入图片描述
输入-r ax后,就会输出当前AX的值,并出现一个“:”,在冒号后写上要将AX修改成的值即可。
在这里插入图片描述
可以看到AX的值也变成1111了。
这个指令也可以用于修改CS和IP寄存器的值。
在图2.33中,一进入Debug,用 R 命令查看,CS:IP指向 0B39:0100,书上的内容是这个值,但是我自己机器是073F:0100,机器码存储的是0000,对应的汇编指令是ADD [BX+SI],AL
图 2.33 用 R 命令修改 CS和 IP 中的内容
接着,用R 命令将 IP 修改为 200,则 CS:IP 指向 073F:0200,此处机器码为0000,对应的汇编指令是ADD [BX+SI],AL,注意,我这里是我自己机器的值,其他机器可能不同。
在这里插入图片描述
接着,用 R 命令将 CS 修改为 ff00,则 CS:IP 指向 ff00:0200,此处存放的机器码为0000,对应的汇编指令是ADD [BX+SI],AL。
(5)用 Debug 的 D 命令查看内存中的内容
用 Debug 的 D 命令,可以查看内存中的内容。
可以用 “d 段地址:偏移地址” 格式来查看,如下图:
在这里插入图片描述
要查看某个地址的内存信息,就需要把这个内存地址先表示为段地址:偏移地址的格式。
(1)然后解释一下这里展示的内存地址信息,这里每行开头会显示一个地址,是表示后面的内容就是从这个地址开始的内存信息,从左到右依次占一个内存地址,单位是十六进制的,而第一行和第二行可以看到相差16,比如1000:0000相比1000:0100少16个,再数一下每行的信息数,刚好是16个,所以这里每行的信息都是一个地址中的信息。
(2)左边是每行的起始地址
(3)右边显示的是内存的ASCII码字符。如图上,右边有个4。如果没有对应的值,就用.来替代。
注意上述的内存中的内容,每台电脑可能都是不同的,学习的时候要根据实际的情况自己判断。
使用命令 d 1000:9 查看内存,输出如下:
在这里插入图片描述
Debug 从 1000:9 开始显示,一直到 1000:88,一共是 128 个字节。第一行的 1000:0 ~ 1000:8 单元中的内容不显示。
在输入Debug后,用 D 命令直接查看,不加任何后面的命令,将会列出 Debug 预设的地址处的内容,如下:
在这里插入图片描述
不管是用预设的值,还是设置了地址参数,接着使用 D命令,都会继续列出后续的内容,如下所示:
在这里插入图片描述
也可以指定 D 命令的查看范围,此时采用 “d 段地址:起始偏移地址 结尾偏移地址”的格式。如下所示:

在这里插入图片描述
如果想要查看内存单元 10000H 中的内容,可以用下图中的任何一种方法查看:
在这里插入图片描述
(6)用 Debug 的 E 命令改写内存中的内容。
可以使用 E 命令改写内存中的内容,比如,要将内存 1000:0 ~ 1000:9 单元中的内容分别写为 0、1、2、3、4、5、6、7、8、9,可以用 “e 起始地址 数据 数据 数据 数据…” 的格式来进行,如图下图所示。
在这里插入图片描述
上图中先用 D 命令查看 1000:0 ~ 1000:f 单元的内容,再用 E 命令修改从 1000:0 开始的 10 个单元的内容,最后用 D 命令查看 1000:0 ~ 1000:f 中内容的变化。
也可以采用提问的方式来一个一个地改写内存中的内容,如下图所示:
在这里插入图片描述
可以用 E 命令以提问的方式来逐个地修改从某一地址开始的内存单元中的内容,以从 1000:10 单元开始为例,步骤如下。
(1)输入 e 1000:10 ,按 Enter 键。
(2)Debug 显示起始地址 1000:0010和第一单元:我这里显示的是00,然后光标停在 “.” 的后面提示要输入的内容,输入要改写的内容,然后按空格即可。要么不输入任何内容,直接空格,就不会改写当前内存的内容。
(3)按上一步处理完成后,会继续提示下一个内存地址的信息,可以按第二步的方式进行修改。
(4)将所有希望修改的内存修改完成后,按 Enter 就完成修改了。
可以用 E 命令向内存中写入字符,比如,用 E 命令从内存 1000:0 开始写入数据,如图所示:
在这里插入图片描述
可以看到结果,正和输入的数据一致。a的ASCII码值是61,b和c依次类推。
也可以用 E 命令向内存写入字符串,比如,用 E 命令从内存 1000:0 开始写入: 数值 1、字符串 “a+b”、数值 2、字符串 “c++”、字符 3、字符串 “IBM”,如下图所示:
在这里插入图片描述
(7) 用 E 命令向内存中写入机器码,用 U 命令查看内存中机器码的含义,用 T 命令执行内存中的机器码。
如何向内存中写入机器码呢?我们知道,机器码也是数据,当然可以用 E 命令将机器码写入内存。比如我们要从内存1000:0 单元开始写入这样一段机器码:
机器码 对应的汇编指令
b80100 mov ax,0001
b90200 mov cx,0002
c1c8 add ax,cx
可用如下图所示的方法进行。
在这里插入图片描述
如何查看写入的或内存中原有的机器码所对应的汇编指令呢?可以使用 U 命令。比如可以用 U 命令将从 1000:0 开始的内存单元中的内容翻译为汇编指令,并显示出来,如下图所示:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值