第一章 初识debug

8086汇编语言学习目录

第一章 初识debug

第二章 字与段的总结

参考课程:CSDN贺利坚汇编视频课
参考书籍:汇编语言 王爽
衷心感谢老师们的耐心教导,课程和书籍都非常用心,内容十分详细,再次感谢老师们的贡献。


前言

汇编语言保持了机器语言的优点,具有直接和简捷的特点,可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等,且占用内存少,执行速度快,是高效的程序设计语言。


一、实践环境搭建

根据附录里面的链接以及里面的帮助文档配置。

  • 驱动器C已经挂载到本地目录d:\masm:在dos中用到的C盘,实际上对应的是当前目录上的d盘的MASM文件夹(从解压包拷贝的)
mount c d:\masm
  • c: 转换到C盘工作,dir是查看当前目录中的文件和文件夹
c:

二、debug的使用

1. 启动debug

挂载
mount c d:\masm  

进入到C盘
c:

查看
dir

启动debug
debug

2. R命令

查看寄存器(R命令)
r

选择某个寄存器,并修改地址
ax
1234

请添加图片描述

rax与r ax涵义一样

3. D命令

列出预设地址内存处的128个字节的内容(D命令)
d

查看内存中指定地址处的内容
d 2000:0000

列出内存中指定地址范围内的内容
d 2000:0 f

请添加图片描述
为段地址:偏移地址

  • 再次敲d,偏移量继续往下走,每一次都列出128个字节,一行是16个字节,一共是8行

请添加图片描述
还能指定找某个地址,如2000:0000
请添加图片描述

  • 最后再加上结尾偏移地址,一次可以显示若干个,如f,即0-f共有16个数据;如2f,是48个数据

请添加图片描述

4. E命令

改变内存中的内容(E命令)
e 2000:0000 12 34 56 AB 3F F3

逐个询问式修改; 空格 - 接受,继续; 回车 - 结束
e 2000:0 12:61 34:41

12 34都是16进制数
请添加图片描述
逐个询问修改,空格是继续,回车是结束
请添加图片描述

5. U命令

将内存中的机器指令翻译成汇编指令(U命令)
先写入数据(不区分大小写)
e 2000:0 b8 23 01 bb 03 00 89 d8 01 d8

查看
d 2000:0 f

查看汇编代码
u 2000:0

将机器指令转换为汇编指令
请添加图片描述

6. A指令

以汇编指令格式在内存中写入机器指令
查看寄存器
r

写入汇编指令
a 073f:100
mov ax,0123
mov bx,3
mov ax,bx
add ax,bx

查看数据
d 073f:100

查看代码
u 073f:100

请添加图片描述
U查看代码
请添加图片描述

7. T命令

cs是073f,IP是0100的时候,执行的是上面的代码,还能用rip修改ip

查看寄存器
r

修改IP
rip
0000

查看寄存器
r

用t执行指令
t

请添加图片描述
用t执行指令
请添加图片描述

8. q命令

退出debug
q

请添加图片描述

总结

以上就是今天要讲的内容,本文仅仅简单介绍了debug的使用,而使用debug可以查看CPU各种寄存器中的内容、内存的情况,并且在机器指令级跟踪程序的运行。

附录

8086环境下载链接(百度网盘)

寄存器

请添加图片描述
请添加图片描述

216-1为FFFFH
H为16进制,D为10进制,B为2进制

请添加图片描述

AX十六位的可以看成两个八位的,AH高八位和AL低八位

请添加图片描述

mov和add指令

请添加图片描述

ADD与add是同义的
请添加图片描述
8266H+8266H=1044CH
但是图中为044CH,是因为溢出问题,1超出4位(16进制)了,没法保存,即汇编中存在溢出问题

请添加图片描述

ax,bx都是16位,ah,bh都是高八位,al,bl都是低八位
C5H+93H=158,但是图上为58H,1溢出了,不能进到高位去,因为al是一个八位的寄存器,两个八位作为字节的相加,结果是58,产生的进位被丢掉

物理地址

请添加图片描述

  • 物理地址是5位的16进制数,对应的是20位的2进制,如A0000
  • 20根地址总线,寻址能力是1M,10的20次方是1M
  • 16位地址意味寻址能力是64KB,本身寻址能力有1M这么大,中间这个巨大的差异矛盾该如何解决?

用两个16位的地址(段地址、偏移地址)合成20位的物理地址

请添加图片描述

  • 段地址x16是左移4个二进制位,即x16,左移一位是乘以2,左移四位就是x16,就是已经凑成20位了,再把偏移地址加上,最后得到的值就是物理地址了
  • 如上图所示的例子,四位十六进制数,左移一位,相当于二进制左移四位,再加上偏移地址00C8,得到物理地址123C8,即两个16位的地址合成20位的地址。

两个16位地址,经过加法器运算后,得到20位地址,最后到达内存完成寻址

请添加图片描述

不同的段地址,经过调整偏移地址后,可以得到相同的物理地址。

请添加图片描述

内存的分段表示法

  • 内存本身并不分段,内存本身的逻辑地址空间是连续的,段的划分是CPU干的事情

请添加图片描述

  • 段地址x16,最后一位一定是0,是16的倍数
  • 2的16次方位64K

请添加图片描述

某个单元位置表示 段地址:偏移地址,如2000:1F60,多用于书面语

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吃鱼从来不吐刺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值