网站菜单
日记 - 计算机底层入门-A-02
* 日记 | AB510Q | 计算机底层入门-A-02
Avatar 作者: * AB510Q ( 2026/03/03 14:14)
阅读量: 12
欢迎回来!这是《计算机基本入门》16位卷的第二篇。在第一篇中,初步认识了指令和程序结构。本章讨论 8086 CPU 是如何寄存器和内存之间交换数据的。
第二章:寻址方式与内存读写
0.术语表
有效地址 (Effective Address / EA): 指指令中给出的偏移地址部分。比如 MOV AX, [BX+5],其中 BX 的值 + 5 计算出来的结果就是有效地址。
物理地址 (Physical Address): CPU 真正发送给内存芯片的 20 位地址。
公式: 物理地址=段寄存器×16+有效地址
字 (Word) 与 字节 (Byte): * Byte: 8 位(如 AL),能存 0~255。
Word: 16 位(如 AX),由两个字节组成。
小端序 (Little-Endian): 数据的低位字节存在低地址,高位字节存在高地址。
指针 (Pointer): 本质上就是一个存储地址的变量。在 16 位汇编中,BX、SI、DI 经常充当指针的角色。
偏移量 (Displacement / Offset): 指令中直接给出的常数数值。例如 MOV AX, [BX+10h] 中的 10h 就是偏移量。
基址寄存器 (Base Register): 通常指 BX 或 BP。寻址时的源点。
变址寄存器 (Index Register): 通常指 SI (Source Index) 或 DI (Destination Index)。常用于在基址的基础上进行移动寻找。
1. 寻址方式
理解寻址方式是掌握汇编的基石。常用的有以下几种:
寻址方式 例子 说明 速度
立即寻址 MOV AX, 1234h 操作数直接就在指令里(常数) 最快
寄存器寻址 MOV AX, BX 操作数在寄存器里 极快
直接寻址 MOV AX, [1200h] 操作数在内存中,给出偏移地址 较慢
寄存器间接寻址 MOV AX, [BX] 地址存放在寄存器中 灵活
基址变址寻址 MOV AX, [BX+SI] 常用于处理数组或表格 复杂但强大
2.中括号 []
在汇编中,[ ] 相当于 C 语言中的指针取值。
MOV AX, 1000h :把 1000h 这个数送给 AX。
MOV AX, [1000h] :把地址为 1000h 的内存单元里的内容送给 AX。
注意: 16 位汇编中,用于放在 [] 里做间接寻址的寄存器是有严格限制的。通常只能用 BX, BP, SI, DI。
错误示范:MOV AX, [CX] (CX 不能用于寻址)
正确示范:MOV AX, [BX]


3. 变量的定义与使用
在第一篇的示例程序中提到了 .DATA 段。定义变量的部分。
DB (Define Byte):定义字节(8位),范围 0~255。
DW (Define Word):定义字(16位),范围 0~65535。
DD (Define Double Word):定义双字(32位)。
asm
.DATA
num1 DB 10h ; 定义一个字节变量
num2 DW 2000h ; 定义一个字变量
arr DB 1, 2, 3, 4 ; 定义一个数组
在代码中使用 MOV AL, num1 时,汇编器会自动将其转换为直接寻址。
4. PTR 操作符
8086 是 16 位 CPU,但内存是以字节(8位)为单位的。当执行 MOV [BX], 1 时需要显式指定
MOV BYTE PTR [BX], 1 :存入 1 个字节 (01h)
MOV WORD PTR [BX], 1 :存入 1 个字 (0001h)
5.数组求和
写一个简单的程序,计算数组前两个元素的和。
asm
.MODEL SMALL
.STACK 100H
.DATA
array DW 1234h, 5678h ; 定义两个字变量
sum DW ? ; '?' 表示不赋初始值
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
; 1. 使用直接寻址
MOV AX, array ; 取第一个字 (1234h)

; 2. 使用加法指令
; array + 2 是因为一个字占 2 个字节
ADD AX, array[2] ; AX = 1234h + 5678h = 68ACh
; 3. 存回结果
MOV sum, AX
; 4. 退出
MOV AX, 4C00h
INT 21h
MAIN ENDP
END MAIN
6. 大小端
8086 采用 小端序 (LittleEndian):高位字节存放在高地址,低位字节存放在低地址。
如果在内存 1000h 处存入一个字 1234h:
1000h 单元存的是 34h(低位)
1001h 单元存的是 12h(高位)
当用 MOV AL, [1000h] 时,拿到的会是 34h。
本章小结
1. 寻址方式决定了数据来源。
2. [BX]、[SI]、[DI] 是常用工具。
3. 使用 BYTE PTR 或 WORD PTR 指定 CPU 数据大小。
4. 8086 是小端序。
« 上一页 (第204页 共5951页) 下一页 »
* (0) *
评论: (0)
没有评论
* 日记 | AB510Q | 计算机底层入门-A-02
官方QQ群-310379632
© DCMS-Social