Skip to content

Commit

Permalink
added a new note about 8086 masm
Browse files Browse the repository at this point in the history
  • Loading branch information
lilhammer111 committed Mar 26, 2024
1 parent 88ee0c6 commit 2611efa
Showing 1 changed file with 81 additions and 0 deletions.
81 changes: 81 additions & 0 deletions CsBasics/ASM/MASM_8086_DOSBox.md
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)**: 反汇编显示内存中的机器代码,将其转换为汇编语言形式。

0 comments on commit 2611efa

Please sign in to comment.