zoukankan      html  css  js  c++  java
  • 汇编学习总结

    汇编学习笔记

    一、基础知识

    汇编语言的组成

    • 汇编语言由 3 类指令组成
      1. 汇编指令:机器码的助记符,有对应的机器码
      2. 伪指令:没有对应的机器码,由编译器执行,计算机并不执行
      3. 其他符号:如+ 、- 、 * 、 /等,由编译器识别,没有对应的机器码

    汇编语言的核心是汇编指令,它决定了汇编语言的特性

    存储器

    即为内存

    指令和数据

    存储单元

    存储器被分为若干个存储单元,每个存储单元从 0 开始顺序编号,例如 0 ~ 127
    计算机最小信息单位是 bit 也就是一个二进制位。8 个bit 组成一个 byte 也就是通常所说的一个字节。

    一个汇编程序的基本结构

    1. 这是定义一个段,名称为 abc

       abc segment
         .
         .
       abc ends
      
    2. 在这个段中写入汇编指令,来实现相关任务

       abc segment
      
       mov ax,2
       add ax,ax
       add ax,ax
      
       abc ends
      
    3. 然后 要指出程序在何处结束

       abc segment
      
       mov ax,2
       add ax,ax
       add ax,ax
      
       abc ends
      
       end
      
    4. abc 被当做代码段来用,所以,应该将 abc 和 cs 联系起来。(当然这个程序,也不是非这样做不可)

       assume cs:abc
       abc segment
      
       mov ax,2
       add ax,ax
       add ax,ax
      
       abc ends
      
       end
      
    5. 程序返回

    一个程序结束后,将 CPU 的控制权 交给使它得以继续运行的程序,我们称这个过程为:程序返回
    那么如何返回呢? 应该在程序的末尾 添加返回的程序段

      mov ax,4c00H
      int 21H
    // 这两条指令 所实现的功能就是程序返回
    
    • 与结束相关的概念
      目的 相关指令 指令性质 指令执行者
      通知编译器一个段结束 段名 ends 伪指令 编译时,由编译器执行
      通知编译器程序结束 end 伪指令 编译时,由编译器执行
      程序返回 mov ax,4c00H int 21H 汇编指令 执行时,由 CPU 执行

    执行一个汇编源程序的步骤在 dosbox 下

    在 dosbox 下 输入 masm 可以显示出版本

    • masm

      编译文件 masm xx.asm
      第一个回车 确定输出目标文件名称
      第二个回车 忽略列表文件生成
      第三个回车 忽略交叉引用文件生成

    在 dosbox 下 输入 link 可以显示出版本

    • link

      连接 目标文件 从而得到可执行文件
      连接文件 link xx
      第一个回车 输入可执行程序的名称
      第二个回车 忽略映像文件生成
      第三个回车 输入调用的子程序 忽略库文件的连接 忽略按回车
      最后会报一个错LINK : warning L4021:no stack segment // 没有栈段 这里我们不理会这个错误

    说完复杂的 方法 现在换简单的

    masm xx; // 在结尾加上分行,按enter后,编译器就对xx文件进行编译,在当前目录生成目标文件xx.obj,并在编译的过程中自动忽略中间文件的生成

    link xx; // 同上

    有什么不同见解可以在评论区共同讨论
  • 相关阅读:
    Android 去除最上面应用名称及图标
    Android 仿QQ消息界面
    多线程断点续传及下载
    android 断点下载---XUtils
    Android判断网路是否畅通加权限
    Android_按两次返回键退出程序和长按返回键退出程序
    Android JPush(极光推送)的使用教程
    使用VS2013自带的PreEmptive Dotfuscator and Analytis来混淆C#代码
    Entity Framework 6连接Oracle、Postgresql、SQLite、LocalDB数据库字符串详解
    Fluent Nhibernate 数据库配置
  • 原文地址:https://www.cnblogs.com/lambertlt/p/12663597.html
Copyright © 2011-2022 走看看