|
网站菜单
|
日记 - 计算机底层入门-A-02
欢迎回来!这是《计算机基本入门》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 是小端序。 评论: (0) 没有评论 |