-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
88ee0c6
commit 2611efa
Showing
1 changed file
with
81 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,81 @@ | ||
# 理解 | ||
|
||
- [ ] 段寄存器存的是段地址,而指针寄存器存的是偏移地址,然后段地址和偏移地址可以得出物理地址 | ||
|
||
# 基础 | ||
|
||
对应网课: | ||
|
||
https://www.bilibili.com/video/BV1Wu411B72F/ | ||
|
||
环境搭建: | ||
|
||
我TM有点忘了我怎么安装的DOSBox模拟器了,但是ubuntu系统的apt或者snap的源是有这个软件包的,除了模拟器本身,其他的汇编工具,如编译器,debug工具等等,这个地址提供了:https://github.com/xDarkLemon/DOSBox_MASM.git | ||
|
||
进去之后挂载工作目录到DOS的c盘: | ||
``` | ||
mount c <your-pc-masm-work-dir> | ||
``` | ||
|
||
<your-pc-masm-work-dir\>是指,当你从上面这个网址把那些汇编工具下载下来之后,你放到你自己的电脑里的哪个目录了,那那个目录就是<your-pc-masm-work-dir\>,因为需要将这个文件夹中的那些工具挂载到DOS模拟器的C盘中。 | ||
|
||
# 寄存器 | ||
|
||
8086有14个寄存器。 | ||
|
||
通用寄存器:AX BX CX DX | ||
|
||
变址寄存器: SI DI | ||
|
||
指针寄存器:SP BP | ||
|
||
指令指针寄存器: IP | ||
|
||
段寄存器: CS SS DS ES | ||
|
||
标志寄存器: PSW | ||
|
||
所有这些寄存器都是16位,2两字节。 | ||
|
||
最大值是$2^{16}-1$,也即`FFFFH`。 | ||
|
||
AX可以按照高八位和低八位分为AH AL,目的是为了兼容之前的8位机,BX CX等通用寄存机同理。 | ||
|
||
8086是16位CPU,也即字长(word **size**)是十六位。 | ||
|
||
# mov指令 | ||
|
||
```assembly | ||
mov ax, 12 | ||
``` | ||
|
||
上面这条指令等价于高级语言中的`ax = 12`这里的`ax`是寄存器 | ||
|
||
# add指令 | ||
|
||
```assembly | ||
add ax, bx | ||
``` | ||
|
||
这条指令等价于`ax += bx` | ||
|
||
# DEBUG | ||
|
||
在8086或其他基于x86架构的计算机上,DEBUG 通常指的是一个具体的程序,它是MS-DOS和早期Windows操作系统中的一个命令行调试工具。这个程序允许用户执行机器语言、汇编语言的代码分析,设置断点,检查寄存器,以及进行内存、寄存器和其他系统资源的检查和修改。 | ||
|
||
DEBUG工具主要用于底层软件开发和故障诊断,特别是在操作系统、驱动程序或与硬件直接交互的程序开发中。由于它直接操作硬件和内存,所以使用时需要特别小心。虽然它在现代编程中不再常用,但在学习计算机的底层原理,尤其是学习汇编语言和操作系统的内部工作时,仍然是一个有用的工具。 | ||
|
||
以下是一些DEBUG中的重要命令: | ||
|
||
1. **A (Assemble)**: 进入汇编模式,允许用户在内存中输入汇编指令。 | ||
2. **D (Dump)**: 显示内存区域的内容。用户可以指定具体的内存范围,DEBUG将以十六进制格式展示这些内存地址的内容。 | ||
3. **E (Enter)**: 用于修改内存中的数据。用户可以指定内存地址,并输入要写入的数据值。 | ||
4. **G (Go)**: 执行程序直到遇到断点。用户可以设定一个或多个断点地址。 | ||
5. **I (Input)**: 从指定的端口读取一个字节或一个字。 | ||
6. **L (Load)**: 载入二进制文件到内存中。 | ||
7. **M (Move)**: 将数据从一个内存区域移动到另一个内存区域。 | ||
8. **O (Output)**: 向指定的端口写入一个字节或一个字。 | ||
9. **Q (Quit)**: 退出DEBUG程序。 | ||
10. **R (Register)**: 查看或修改CPU寄存器的内容。 | ||
11. **T (Trace)**: 单步执行一条指令,并显示寄存器的内容和下一条将要执行的指令。 | ||
12. **U (Unassemble)**: 反汇编显示内存中的机器代码,将其转换为汇编语言形式。 |