1. 8086寻址方式全解析寻址方式是8086指令系统中最重要的基础概念之一它决定了CPU如何获取操作数。如果把CPU比作餐厅厨师那么寻址方式就是服务员传递食材的不同方式——有的直接端上原料立即数有的告诉你冰箱位置内存地址有的让你自己从指定柜子取寄存器间接。1.1 立即数寻址直接获取数据立即数寻址就像厨师直接拿到写有配方的纸条MOV AL, 26H ; 把26H这个值直接送入AL寄存器 MOV AX, 0FF00H ; 注意十六进制数开头要加0特点操作数直接包含在指令中只能作为源操作数执行速度最快无需内存访问实际应用场景初始化寄存器、设置常数。比如设置计数器初值MOV CX, 100 ; 循环计数器初始化为1001.2 寄存器寻址CPU内部直达寄存器寻址相当于厨师直接从自己的调料台取料MOV DX, AX ; 把AX内容复制到DX XCHG CL, AH ; 交换CL和AH的内容关键点操作数在CPU内部寄存器中源和目的操作数字长必须一致速度仅次于立即数寻址调试技巧在emu8086中单步执行时可以直观看到寄存器值的变化。1.3 内存寻址的五种高级玩法当操作数在内存中时8086提供了多种计算地址的方式1.3.1 直接寻址精确GPS定位MOV AX, [2000H] ; 从DS:2000H处取一个字 MOV ES:[500H], BL ; 使用段超越前缀内存地址计算物理地址 段寄存器×16 偏移地址常见错误忘记加方括号会把地址值当成立即数。1.3.2 寄存器间接寻址指针的妙用MOV [BX], AL ; 用BX的值作为内存地址 MOV AX, [BP] ; 默认使用SS段寄存器使用规则只能用BX/BP/SI/DIBX/SI/DI默认用DS段BP默认用SS段特别适合访问栈中数据1.3.3 基址变址寻址数组访问利器MOV DX, [BXSI] ; 类似C语言的array[i] MOV CL, [BPDI] ; 常用于栈帧访问局部变量这种寻址方式特别适合处理数组和结构体BX/BP作为基地址SI/DI作为索引。2. 指令系统实战应用2.1 数据传送的艺术2.1.1 MOV指令的智能限制MOV DS, AX ; 正确通过AX中转 MOV DS, 1000H ; 错误不能直接送立即数到段寄存器MOV指令的交通规则内存之间不能直接传送CS不能作为目的操作数类型必须匹配字节/字2.1.2 栈操作PUSH/POP的默契配合PUSH AX ; SP先减2再存入AX POP BX ; 先取出数据SP再加2典型应用场景函数调用时保存寄存器临时变量存储参数传递2.1.3 地址传送LEA的魔法LEA BX, [SI10] ; 取地址相当于BXSI10 MOV BX, OFFSET ARRAY ; 编译时确定的地址LEA不访问内存只计算地址比直接MOV效率更高。2.2 算术运算的陷阱与技巧2.2.1 加法指令的三种变化ADD AL, BL ; 普通加法 ADC AH, 0 ; 带进位加法用于多精度运算 INC CX ; 计数器加1不影响CF标志标志位影响CF表示无符号数溢出OF表示有符号数溢出ZF/SF/PF反映结果特性2.2.2 乘除法的特殊处理MUL BL ; AX AL * BL无符号 IMUL CL ; AX AL * CL有符号 DIV BL ; AL AX / BL, AH 余数重要细节乘法结果位数会扩展8位×8位16位除法前可能需用CBW/CWD扩展除数为0会触发异常2.2.3 BCD码调整指令ADD AL, BL DAA ; 压缩BCD调整 AAA ; 非压缩BCD调整这些指令让8086能直接处理十进制数是早期金融软件的基石。2.3 位操作硬件控制的利器2.3.1 逻辑运算的妙用AND AL, 0FH ; 取低4位 OR AL, 30H ; 转换为ASCII码 XOR AL, AL ; 快速清0 TEST AL, 80H ; 测试最高位典型应用位掩码操作标志位检查快速清零2.3.2 移位指令的速度魔法SHL AX, 1 ; 无符号数×2 SAR BL, 1 ; 有符号数÷2 ROR AL, 4 ; 循环右移4位移位比乘除快10倍以上在性能敏感代码中广泛使用。3. 综合编程实战3.1 字符串处理三剑客3.1.1 MOVSB实现内存块复制CLD ; 方向向前 MOV SI, OFFSET SRC MOV DI, OFFSET DST MOV CX, 100 REP MOVSB ; 复制100字节优化技巧用MOVSW代替MOVSB速度更快对齐内存地址可提升性能3.1.2 CMPS实现字符串比较MOV SI, OFFSET STR1 MOV DI, OFFSET STR2 MOV CX, 20 REPE CMPSB ; 比较到不等或CX0 JE EQUAL ; 完全相等跳转3.1.3 SCAS实现快速查找MOV DI, OFFSET BUFFER MOV AL, A MOV CX, 100 REPNE SCASB ; 查找A JNE NOT_FOUND3.2 条件控制的高级玩法3.2.1 循环的四种写法; 标准LOOP MOV CX, 10 L1: ... LOOP L1 ; 条件循环 MOV CX, 5 L2: ... DEC CX JNZ L2 ; 复杂条件 MOV CX, 100 L3: ... CMP [SI], 0 LOOPE L3 ; 为0且CX≠0时循环3.2.2 跳转表实现switch-caseJMP TABLE[BX] ; BX0,2,4... TABLE DW CASE0, CASE1, CASE23.3 中断与IO实战3.3.1 精确延时程序MOV CX, 1000 DELAY: LOOP DELAY ; 约1ms延时3.3.2 端口IO控制IN AL, 60H ; 读取键盘端口 OUT 61H, AL ; 控制扬声器在硬件编程中这些指令是直接与设备通信的桥梁。