码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • x86汇编代码学习-计算机工作原理1


    文章目录

    • 前言
    • 1.CPU架构
    • 2.8086寄存器
    • 3. 指令流水线
    • 4.内存模型
    • 5.总线
    • 6.硬盘
    • 7 计算机启动过程BIOS
    • 8.BootLoader
    • 9.地址映射
    • 10.为什么boot loader要放在0x7c00这个位置?
    • 11 显卡是如何显示的
    • 12.汇编指令
      • 1.环境搭建
    • 12 程序
    • 13 x86 汇编指令介绍

    前言

    x86汇编

    详解x86汇编

    1.CPU架构

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    2.8086寄存器

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    32位进行了简单的继承
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    3. 指令流水线

    在这里插入图片描述
    。在这里插入图片描述

    4.内存模型

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    5.总线

    在这里插入图片描述
    在这里插入图片描述
    a
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    6.硬盘

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    7 计算机启动过程BIOS

    第一条指令在哪里呢
    主板刷BIOS

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    8.BootLoader

    在这里插入图片描述
    在这里插入图片描述

    9.地址映射

    8086是16位

    1MB
    在这里插入图片描述
    地址分配
    在这里插入图片描述

    10.为什么boot loader要放在0x7c00这个位置?

    在这里插入图片描述

    这主要是历史遗留问题,5150支持32KB寻址
    在这里插入图片描述
    在这里插入图片描述
    然后从rom里面读取指令开始执行

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    找到后加载到内存里面
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    所以放在内存最后面,用完就释放。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    11 显卡是如何显示的

    在这里插入图片描述
    在这里插入图片描述
    要让显示器显示文字,就要把内容写到现存里面去,现存很大,但是系统分配的却很少地址空间
    在这里插入图片描述
    通过映射,来写显卡内存
    在这里插入图片描述

    显卡也有自己的汇编指令,这些指令就可以完成切换映射地址空间的操作
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    除了显示本身外,还有下面一个属性字节,所以需要两个字节,所以最后的代码是两个字节

    在这里插入图片描述

    12.汇编指令

    1.环境搭建

    86汇编
    8086汇编语言精讲

    NASM编译器之下载安装使用

    Nasm下载

    VS Code:https://code.visualstudio.com/
    Nasm:https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/
    VBox:https://www.virtualbox.org/

    关软件已全部上传云盘,链接: https://pan.baidu.com/s/1YN7mB5uPuIzcacS-Q-YCmg 提取码: 5ua2

    安装后可以在vscode的terminal中能识别nasm,如果识别不了,设置nasm的环境PATH,重启vscode后就可以了

    在这里插入图片描述

    代码如下

    mov ax,0b800h
    mov ds,ax
    
    mov byte [0x00], '2'
    mov byte [0x02], '0'
    mov byte [0x04], '2'
    mov byte [0x06], '4'
    mov byte [0x08], 'h'
    mov byte [0x10], 'e'
    mov byte [0x12], 'l'
    mov byte [0x14], 'l'
    mov byte [0x16], 'o'
    mov byte [0x18], '0'
    mov byte [0x1a], '2'
    mov byte [0x00], '4'
    
    jmp $
    
    times 510-($-$$) db 0
    db 0x55,0xaa
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    如下图编译
    在这里插入图片描述
    打开ORacle VM VirtualBox
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    一步步发现没有vhd的选项,结果最后发现了
    在这里插入图片描述
    在这里插入图片描述
    再次返回发现成功了,当然还要设置第一和第二选项,一定要选择提前分配
    在这里插入图片描述

    接着打开vhd writer,下面是因为磁盘没有选择提前分配,重新创建磁盘,选择提前分配后
    在这里插入图片描述
    选择提前分配后,终于可以了
    在这里插入图片描述
    打开虚拟机,注意一定要 虚拟化开启
    在这里插入图片描述
    如何开启虚拟化,重启电脑,按F2,将Disabled 改为Enabled
    在这里插入图片描述

    在这里插入图片描述

    12 程序

    8086是16位处理器,但是数据总线却有20位
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    mv ds,ax
    指定数据段基准地址
    在这里插入图片描述

    800H是因为这段地址是显卡的显存地址
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    下面单中写法是一样的
    在这里插入图片描述

    ;开辟200字节内存空间
    times 200 db 0
    
    ;开辟200字节内存空间
    db 200 dup (0)
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    MBR 512字节
    $ 代表程序的起始位置, 代表程序的起始位置, 代表程序的起始位置,代表jmp所在的位置

    − - −$=从开头到jmp的位置一共有多少个字节
    下面这段代码是为了在最末尾添加0x55aa
    在这里插入图片描述
    在这里插入图片描述

    13 x86 汇编指令介绍

    在这里插入图片描述
    红色的表示不能传递
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    深度学习的三维重建 论文+源码+解析+译文+批注 MVSNet系列最新顶刊总结 下载
    OrCAD原理图关联Allegro PCB交互设计设置的方法
    研究发现AI写的代码和人类一样也会有BUG
    GPT如何避免从入门到放弃(一)——认识GPT
    看板系统如何异地电脑手机访问?主机内网ip端口映射域名外网访问
    BSV 上基于智能合约的众筹
    springcloud适配mysql和oracle数据库
    删除Windows网络连接的网络编号,网络号,有线网卡的网络1,网络2....,快速批量删除每次增加的网络序号
    我们被一个 kong 的性能 bug 折腾了一个通宵
    Word插入希腊字母及特殊符号 分类整
  • 原文地址:https://blog.csdn.net/weixin_43360707/article/details/134243866
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号