当前位置: 首页 > news >正文

汇编语言期末快速过手笔记

一、计算机系统组成

  1. 计算机系统组成:由硬件系统和软件系统组成

    • 硬件系统:CPU、存储器、输入/输出设备等物理部件
    • 软件系统:操作系统、各种语言、系统软件和应用软件
  2. 汇编语言分类

    • 属于低级语言(直接面向硬件)
    • 与高级语言(面向问题)和机器语言(二进制代码)相区别

二、汇编程序开发过程

  1. 源文件扩展名

    • .ASM:汇编语言源程序
    • .OBJ:汇编后产生的目标文件
    • .EXE:链接后生成的可执行文件
  2. 开发步骤

    • 编辑(.ASM)→ 汇编(.OBJ)→ 链接(.EXE)→ 执行
  3. 相关命令

    • MASM:汇编命令,生成.OBJ和可选.LST文件
    • LINK:链接命令,生成.EXE文件

三、8086/8088 CPU结构

  1. CPU组成

    • 运算器(ALU):算术逻辑运算
    • 控制器:指令译码和执行控制
    • 寄存器组:数据暂存和地址处理
  2. 寄存器分类

    • 通用寄存器(AX,BX,CX,DX,SI,DI,BP,SP)
    • 段寄存器(CS,DS,SS,ES)
    • 控制寄存器(IP,FLAGS)
  3. 寄存器位数

    • 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)

  1. 标志位组成

    • 条件状态位(6个):CF,PF,AF,ZF,SF,OF
    • 控制状态位(3个):DF,IF,TF
  2. 各标志位含义

    • CF(进位标志):无符号数溢出
    • PF(奇偶标志):结果低8位1的个数为偶数
    • AF(辅助进位):BCD运算时低4位向高4位进位
    • ZF(零标志):结果为0
    • SF(符号标志):结果为负(最高位为1)
    • OF(溢出标志):有符号数溢出
    • DF(方向标志):串操作方向(0=递增,1=递减)
    • IF(中断允许):是否允许可屏蔽中断
    • TF(陷阱标志):单步执行

五、存储器组织

  1. 存储单元编址

    • 按字节编址
    • 1字节=8位
    • 1字=2字节=16位
  2. 物理地址形成

    • 物理地址 = 段地址×16 + 偏移地址
    • 段地址左移4位(相当于×16)加偏移地址
  3. 逻辑地址与物理地址转换

    • 例:236FH:1000H → 246F0H
    • 计算方法:236F0H + 1000H = 246F0H
  4. 段寄存器使用规则

    • 默认段选择:
      • CS:代码段
      • DS:数据段
      • SS:堆栈段(BP作基址时使用)
      • ES:附加段(串操作目的地址)

六、寻址方式

  1. 寻址方式分类

    • 立即寻址:操作数在指令中
    • 寄存器寻址:操作数在寄存器
    • 存储器寻址:
      • 直接寻址:[偏移地址]
      • 寄存器间接:[BX/BP/SI/DI]
      • 寄存器相对:[BX/BP/SI/DI + 位移量]
      • 基址变址:[BX/BP + SI/DI]
      • 相对基址变址:[BX/BP + SI/DI + 位移量]
  2. 转移地址寻址

    • 段内转移:只修改IP
    • 段间转移:修改CS和IP
    • 直接寻址:目标地址在指令中
    • 间接寻址:目标地址在寄存器或内存

七、指令系统

  1. 数据传送指令

    • MOV:传送(不能直接段寄存器间传送)
    • XCHG:交换(不能与段寄存器交换)
    • PUSH/POP:堆栈操作(16位操作)
    • LEA:取有效地址
    • LDS/LES:装入远指针
  2. 算术运算指令

    • ADD/ADC:加法/带进位加
    • SUB/SBB:减法/带借位减
    • INC/DEC:加1/减1(不影响CF)
    • NEG:求补(相当于0-操作数)
    • MUL/IMUL:无/有符号乘法
    • DIV/IDIV:无/有符号除法
  3. 逻辑运算指令

    • AND/OR/XOR/NOT:与/或/异或/非
    • TEST:测试(相当于AND但不保存结果)
    • SHL/SHR:逻辑左/右移
    • SAL/SAR:算术左/右移
    • ROL/ROR:循环左/右移
    • RCL/RCR:带进位循环左/右移
  4. 串操作指令

    • MOVS/CMPS/SCAS/LODS/STOS
    • 前缀:REP/REPE/REPNE
    • 方向控制:CLD(DF=0)/STD(DF=1)
  5. 控制转移指令

    • JMP:无条件转移
    • Jcc:条件转移(JA,JB,JE,JG,JL等)
    • LOOP/LOOPE/LOOPNE:循环控制
    • CALL/RET:子程序调用/返回
    • INT/IRET:中断调用/返回
  6. 处理器控制指令

    • CLC/STC:清/置CF
    • CLD/STD:清/置DF
    • CLI/STI:清/置IF
    • HLT/NOP:暂停/空操作

八、伪指令与程序结构

  1. 伪指令类型

    • 数据定义:DB/DW/DD(字节/字/双字)
    • 符号定义:EQU/=(等值)/LABEL(类型重定义)
    • 段定义:SEGMENT/ENDS
    • 过程定义:PROC/ENDP
    • 程序结束:END
  2. 程序结构

    DATA SEGMENT; 数据定义
    DATA ENDSSTACK SEGMENT STACK; 堆栈定义
    STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK
    START:; 程序代码MOV AH,4CHINT 21H
    CODE ENDSEND START
    
  3. 变量与标号

    • 变量:存储单元符号地址,有段、偏移和类型属性
    • 标号:指令地址符号,有段、偏移和距离属性(NEAR/FAR)

九、中断与I/O

  1. 中断类型

    • 内部中断:除法错、单步、断点、溢出、指令中断
    • 外部中断:NMI(非屏蔽)、INTR(可屏蔽)
  2. 中断向量表

    • 位于内存0000:0000~0000:03FFH
    • 每个中断占4字节(CS:IP)
  3. DOS功能调用

    • 使用INT 21H
    • 常用功能:
      • 01H:键盘输入
      • 02H:显示输出
      • 09H:显示字符串
      • 4CH:程序结束
  4. I/O指令

    • IN:从端口输入
    • OUT:向端口输出
    • 端口地址:0~FFFFH

十、典型程序结构

  1. 顺序结构

    • 指令顺序执行
  2. 分支结构

    CMP AL,BL
    JA LABEL1  ; AL>BL时转移
    JB LABEL2  ; AL<BL时转移
    JE LABEL3  ; AL=BL时转移
    
  3. 循环结构

    MOV CX,10
    LOOP1:; 循环体LOOP LOOP1  ; CX=CX-1, CX≠0时循环
    
  4. 子程序结构

    ; 调用
    CALL SUB1; 定义
    SUB1 PROC NEAR/FAR; 子程序体RET
    SUB1 ENDP
    

十一、数值处理

  1. 数制转换

    • BCD码调整指令:
      • AAA/AAS:非压缩BCD加减调整
      • AAM/AAD:非压缩BCD乘除调整
      • DAA/DAS:压缩BCD加减调整
  2. 符号扩展

    • CBW:AL符号扩展到AX
    • CWD:AX符号扩展到DX:AX
  3. 算术运算注意事项

    • 乘法:8位×8位→16位,16位×16位→32位
    • 除法:被除数位数是除数两倍

十二、调试与排错

  1. DEBUG命令

    • R:查看/修改寄存器
    • D:显示内存内容
    • E:修改内存内容
    • U:反汇编
    • T/P:单步执行
    • G:连续执行
    • Q:退出
  2. 常见错误

    • 操作数类型不匹配
    • 非法寻址方式
    • 段寄存器使用不当
    • 跳转超出范围
    • 堆栈不平衡

创作不易,如果您都看到这里了,可以给我一个点赞、收藏并关注一下么?您的支持与喜爱是激励我创作的最大动力!

如果内容有误请及时联系我进行修改

http://www.lryc.cn/news/571987.html

相关文章:

  • React Native WebView键盘难题:如何让输入框不被键盘遮挡?
  • Alpha WORLD上线在即:首发AIOT,重塑项目价值格局
  • 48-Oracle CDB下的SID-实例名-服务名
  • Transformer-BiGRU、Transformer、CNN-BiGRU、BiGRU、CNN五模型多变量时序预测
  • 【计算机常识】--docker入门+docker desktop的使用(一)
  • MySQL 多表查询、事务
  • 如何使用ChatGPT快速完成一篇论文初稿?
  • Controller Area Network (CAN) 通信机制简介
  • Ubuntu服务器启动jupyter notebook,本地电脑Mobaxterm访问
  • 一个电脑装了多个python哪个生效?在 Windows 系统中修改环境变量 PATH 的优先级
  • Vue.js 按键修饰符详解:提升键盘事件处理效率
  • 筑牢安全防线:电子文件元数据驱动的 AI 知识库可控管理方案
  • TradingAgents:基于多智能体的大型语言模型(LLM)金融交易框架
  • 从零学起VIM
  • 解决sql查询中in查询项过多时很慢的问题
  • django 获取 filter后的某一个属性的list
  • 【Java学习笔记】Java绘图基础
  • 【学习笔记】2.2 Encoder-Decoder
  • Neo4j 入门到精通(Cypher语言详解)
  • 湖北理元理律师事务所小微企业债务重组方案:司法与经营的共生逻辑
  • b站视频如何下载到电脑上
  • jupter 如何修改文件位置
  • 【AI Study】第四天,Pandas(8)- 最佳实践
  • 湖北理元理律师事务所债务优化模型:法律与生活的平衡之道
  • 《汇编语言:基于X86处理器》第2章 x86处理器架构
  • 《仿盒马》app开发技术分享--未完成订单列表展示逻辑优化(61)
  • 机器学习常用评估指标
  • springboot使用nacos注册中心、配置中心的例子
  • C/Fortran多核并行计算
  • (LeetCode 面试经典 150 题 ) 26. 删除有序数组中的重复项 (双指针)