柳州网站专业网站优化外包
一、计算机系统组成
-  
计算机系统组成:由硬件系统和软件系统组成
- 硬件系统:CPU、存储器、输入/输出设备等物理部件
 - 软件系统:操作系统、各种语言、系统软件和应用软件
 
 -  
汇编语言分类
- 属于低级语言(直接面向硬件)
 - 与高级语言(面向问题)和机器语言(二进制代码)相区别
 
 
二、汇编程序开发过程
-  
源文件扩展名
- .ASM:汇编语言源程序
 - .OBJ:汇编后产生的目标文件
 - .EXE:链接后生成的可执行文件
 
 -  
开发步骤:
- 编辑(.ASM)→ 汇编(.OBJ)→ 链接(.EXE)→ 执行
 
 -  
相关命令
- MASM:汇编命令,生成.OBJ和可选.LST文件
 - LINK:链接命令,生成.EXE文件
 
 
三、8086/8088 CPU结构
-  
CPU组成
- 运算器(ALU):算术逻辑运算
 - 控制器:指令译码和执行控制
 - 寄存器组:数据暂存和地址处理
 
 -  
寄存器分类:
- 通用寄存器(AX,BX,CX,DX,SI,DI,BP,SP)
 - 段寄存器(CS,DS,SS,ES)
 - 控制寄存器(IP,FLAGS)
 
 -  
寄存器位数
- 8位寄存器:AH,AL,BH,BL,CH,CL,DH,DL(共8个)
 - 16位寄存器:AX,BX,CX,DX,SI,DI,BP,SP,CS,DS,SS,ES,IP,FLAGS(共14个)
 
 
四、标志寄存器(PSW)
-  
标志位组成
- 条件状态位(6个):CF,PF,AF,ZF,SF,OF
 - 控制状态位(3个):DF,IF,TF
 
 -  
各标志位含义:
- CF(进位标志):无符号数溢出
 - PF(奇偶标志):结果低8位1的个数为偶数
 - AF(辅助进位):BCD运算时低4位向高4位进位
 - ZF(零标志):结果为0
 - SF(符号标志):结果为负(最高位为1)
 - OF(溢出标志):有符号数溢出
 - DF(方向标志):串操作方向(0=递增,1=递减)
 - IF(中断允许):是否允许可屏蔽中断
 - TF(陷阱标志):单步执行
 
 
五、存储器组织
-  
存储单元编址
- 按字节编址
 - 1字节=8位
 - 1字=2字节=16位
 
 -  
物理地址形成
- 物理地址 = 段地址×16 + 偏移地址
 - 段地址左移4位(相当于×16)加偏移地址
 
 -  
逻辑地址与物理地址转换
- 例:236FH:1000H → 246F0H
 - 计算方法:236F0H + 1000H = 246F0H
 
 -  
段寄存器使用规则
- 默认段选择: 
- CS:代码段
 - DS:数据段
 - SS:堆栈段(BP作基址时使用)
 - ES:附加段(串操作目的地址)
 
 
 - 默认段选择: 
 
六、寻址方式
-  
寻址方式分类:
- 立即寻址:操作数在指令中
 - 寄存器寻址:操作数在寄存器
 - 存储器寻址: 
- 直接寻址:[偏移地址]
 - 寄存器间接:[BX/BP/SI/DI]
 - 寄存器相对:[BX/BP/SI/DI + 位移量]
 - 基址变址:[BX/BP + SI/DI]
 - 相对基址变址:[BX/BP + SI/DI + 位移量]
 
 
 -  
转移地址寻址:
- 段内转移:只修改IP
 - 段间转移:修改CS和IP
 - 直接寻址:目标地址在指令中
 - 间接寻址:目标地址在寄存器或内存
 
 
七、指令系统
-  
数据传送指令:
- MOV:传送(不能直接段寄存器间传送)
 - XCHG:交换(不能与段寄存器交换)
 - PUSH/POP:堆栈操作(16位操作)
 - LEA:取有效地址
 - LDS/LES:装入远指针
 
 -  
算术运算指令:
- ADD/ADC:加法/带进位加
 - SUB/SBB:减法/带借位减
 - INC/DEC:加1/减1(不影响CF)
 - NEG:求补(相当于0-操作数)
 - MUL/IMUL:无/有符号乘法
 - DIV/IDIV:无/有符号除法
 
 -  
逻辑运算指令:
- AND/OR/XOR/NOT:与/或/异或/非
 - TEST:测试(相当于AND但不保存结果)
 - SHL/SHR:逻辑左/右移
 - SAL/SAR:算术左/右移
 - ROL/ROR:循环左/右移
 - RCL/RCR:带进位循环左/右移
 
 -  
串操作指令:
- MOVS/CMPS/SCAS/LODS/STOS
 - 前缀:REP/REPE/REPNE
 - 方向控制:CLD(DF=0)/STD(DF=1)
 
 -  
控制转移指令:
- JMP:无条件转移
 - Jcc:条件转移(JA,JB,JE,JG,JL等)
 - LOOP/LOOPE/LOOPNE:循环控制
 - CALL/RET:子程序调用/返回
 - INT/IRET:中断调用/返回
 
 -  
处理器控制指令:
- CLC/STC:清/置CF
 - CLD/STD:清/置DF
 - CLI/STI:清/置IF
 - HLT/NOP:暂停/空操作
 
 
八、伪指令与程序结构
-  
伪指令类型:
- 数据定义:DB/DW/DD(字节/字/双字)
 - 符号定义:EQU/=(等值)/LABEL(类型重定义)
 - 段定义:SEGMENT/ENDS
 - 过程定义:PROC/ENDP
 - 程序结束:END
 
 -  
程序结构:
DATA SEGMENT; 数据定义 DATA ENDSSTACK SEGMENT STACK; 堆栈定义 STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK START:; 程序代码MOV AH,4CHINT 21H CODE ENDSEND START -  
变量与标号:
- 变量:存储单元符号地址,有段、偏移和类型属性
 - 标号:指令地址符号,有段、偏移和距离属性(NEAR/FAR)
 
 
九、中断与I/O
-  
中断类型:
- 内部中断:除法错、单步、断点、溢出、指令中断
 - 外部中断:NMI(非屏蔽)、INTR(可屏蔽)
 
 -  
中断向量表:
- 位于内存0000:0000~0000:03FFH
 - 每个中断占4字节(CS:IP)
 
 -  
DOS功能调用:
- 使用INT 21H
 - 常用功能: 
- 01H:键盘输入
 - 02H:显示输出
 - 09H:显示字符串
 - 4CH:程序结束
 
 
 -  
I/O指令:
- IN:从端口输入
 - OUT:向端口输出
 - 端口地址:0~FFFFH
 
 
十、典型程序结构
-  
顺序结构:
- 指令顺序执行
 
 -  
分支结构:
CMP AL,BL JA LABEL1 ; AL>BL时转移 JB LABEL2 ; AL<BL时转移 JE LABEL3 ; AL=BL时转移 -  
循环结构:
MOV CX,10 LOOP1:; 循环体LOOP LOOP1 ; CX=CX-1, CX≠0时循环 -  
子程序结构:
; 调用 CALL SUB1; 定义 SUB1 PROC NEAR/FAR; 子程序体RET SUB1 ENDP 
十一、数值处理
-  
数制转换:
- BCD码调整指令: 
- AAA/AAS:非压缩BCD加减调整
 - AAM/AAD:非压缩BCD乘除调整
 - DAA/DAS:压缩BCD加减调整
 
 
 - BCD码调整指令: 
 -  
符号扩展:
- CBW:AL符号扩展到AX
 - CWD:AX符号扩展到DX:AX
 
 -  
算术运算注意事项:
- 乘法:8位×8位→16位,16位×16位→32位
 - 除法:被除数位数是除数两倍
 
 
十二、调试与排错
-  
DEBUG命令:
- R:查看/修改寄存器
 - D:显示内存内容
 - E:修改内存内容
 - U:反汇编
 - T/P:单步执行
 - G:连续执行
 - Q:退出
 
 -  
常见错误:
- 操作数类型不匹配
 - 非法寻址方式
 - 段寄存器使用不当
 - 跳转超出范围
 - 堆栈不平衡
 
 
创作不易,如果您都看到这里了,可以给我一个点赞、收藏并关注一下么?您的支持与喜爱是激励我创作的最大动力!
如果内容有误请及时联系我进行修改
