From eda7940552f9fef60690bbde5864174ccc25e082 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=B0=E7=B3=96=E9=9B=AA=E7=8B=B8?= Date: Sat, 10 Feb 2024 12:49:42 +0300 Subject: [PATCH] =?UTF-8?q?=E5=9C=A8=20README=20=E4=B8=AD=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=AF=B9=E5=AF=84=E5=AD=98=E5=99=A8=E7=9A=84=E8=AF=B4?= =?UTF-8?q?=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 68 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index db18246..746f623 100644 --- a/README.md +++ b/README.md @@ -17,13 +17,13 @@ In this folder, I recorded notes and codes for learning assembly language in the 注:部分代码及练习基于王爽《汇编语言》第三版,具体题目及要求请见书中
- + **笔记请详见:** - + [这是 Word 格式的笔记呀](https://github.com/NekoSilverFox/Assembly/blob/master/%E3%80%90%E7%AC%94%E8%AE%B0%E3%80%91%E6%B1%87%E7%BC%96%E8%AF%AD%E8%A8%80.docx) - +
- + 文件夹编号说明: 其中,为了避免文件夹命名及编号混乱:【预留空位】指的是为以后复习或者相关新项目所预留出来的编号。 @@ -80,7 +80,70 @@ In this folder, I recorded notes and codes for learning assembly language in the | 300 - 310 | C/C++ 下汇编测试 | | 500 | 高级汇编例程 | - +# 寄存器 + +## 普通寄存器 + +| 英文名 | 寄存器 | 类型 | 具体名称 | 常用关联 | +| ------------------- | ------ | ---------- | ------------------ | ------------------------------------------------------------ | +| Accumulator | ax | 数据寄存器 | 累加寄存器/累加器 | div除法指令和mul乘法指令会调用;端口的输入输出只能用ax、al存放 | +| Base | bx | 数据寄存器 | 基地址寄存器 | 经常与ds, es连用;[bx] 默认调用ds:[bx] | +| Count | cx | 数据寄存器 | 计数器寄存器 | 储存循环次数,loop、jcxz指令会调用cx | +| Data | dx | 数据寄存器 | 数据寄存器 | 常用来储存数据 | +| Stack Pointer | sp | 指针寄存器 | 堆栈指针寄存器 | 存放栈顶的偏移地址 | +| Base Pointer | bp | 指针寄存器 | 基指针寄存器 | 默认与ss相关联,比如 [bp] 默认调用 ss:[bp] | +| Source Index | si | 变址寄存器 | **源**地址寄存器 | 常用于 ds:[si],存放偏移地址,数据**从**哪里来 | +| Destination Index | di | 变址寄存器 | **目的**地址寄存器 | 常用于 es:[di],存放偏移地址,数据**到**哪里去 | +| Data Segment | ds | | 数据段寄存器 | 常用于 ds:[si],存放段地址,数据从哪里来 | +| Extra Segment | es | | 附加段寄存器 | 常用于 es:[di],存放段地址,数据到哪里来 | +| Stack Segment | ss | | 堆栈段寄存器 | 存放栈的段地址 | +| Code Segment | cs | | 代码段寄存器 | 存放执行指令的段地址 | +| Instruction Pointer | ip | 控制寄存器 | 指令指针寄存器 | 存放执行指令的偏移地址 | +| Flag | FLAG | 控制寄存器 | 标志寄存器 | 请见下一表格《标志寄存器 PSW》 | + + + +## 标志寄存器 (PSW) + +> PWD - program status word 程序状态字 + +- Flag寄存器是**按位起作用**的,也就是说,它的**每一位都有专门的含义,记录特定的信息** +- mov、push、pop 对标志位寄存器没有影响 +- 溢出:运算结果超出了机器所能表达的范围,把符号位给顶了 +- 注意CF和OF的区别 +- 16进制数大于80H时既可以看作是有符号数,也可以看作为无符号,这取决于将标志位视为什么(对于8位寄存器) + +```assembly +标志寄存器在Debug中的表示: + +AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 +DS=0000 ES=0000 SS=0000 CS=0000 IP=0000 NV UP EI PL NZ NA PO NC + ↑ ↑ ↑ ↑ ↑ ↑ + OF DF SP ZF PF CF + +``` + +| 位 | 中文名称 | 标志寄存器 | 真值 1 | 假值 0 | 首字母含义 | 操作的编码 | 说明 | +| ---- | -------- | ---------- | ------ | ------ | ---------- | ---------- | ---- | +| | | | | | | | | +| | | | | | | | | +| | | | | | | | | +| | | | | | | | | +| | | | | | | | | +| | | | | | | | | +| | | | | | | | | +| | | | | | | | | +| | | | | | | | | +| | | | | | | | | +| | | | | | | | | +| | | | | | | | | +| | | | | | | | | +| | | | | | | | | +| | | | | | | | | + + + +# 指令 ---