[Intel汇编-NASM]进入保护模式全过程

2023-11-06

enter_pm.mbr

            org		0x7C00          ; 该命令表示程序将被装在到偏移地址为0x7C00的地方
                                    ; 该命令效果是全局的,但只能使用一次,之后不得再用
                                    ; 从该位置开始到整个源代码结束之间的所有标号在被访问时都会隐式地自动加上0x7C00
                                    ; 但是和vstart=0x7C00不同,vstart会将整个段内所有指令的汇编地址都加上0x7C00
                                    ; 而org不影响汇编地址,仅仅就是在访问标号的时候临时加一个0x7C00
                                    ; 并将这个临时的和作为访问结果返回

			jmp		start

GDT_BEG: ; GDT表的定义
DESC_SG_NULL	dd	0x00000000, 0x00000000
DESC_SG_CODE	dd	0x7C0001FF, 0x00409A00 ; TYPE=1010,代码段必须可读,否则msg中的内容是无法读出并写到显卡中的
DESC_SG_VIDEO	dd	0x8000FFFF, 0x0040920B
DESC_SG_STACK	dd	0x00007A00, 0x00409600
GDT_END:

; 段选择子
SLCT_NULL		equ	DESC_SG_NULL - GDT_BEG
SLCT_CODE		equ	DESC_SG_CODE - GDT_BEG
SLCT_VIDEO		equ DESC_SG_VIDEO - GDT_BEG
SLCT_STACK		equ	DESC_SG_STACK - GDT_BEG

; GDT总共有多少个双字
GDT_SIZE_DWORD	equ	(GDT_END - GDT_BEG) / 4

GDTR
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[Intel汇编-NASM]进入保护模式全过程 的相关文章

  • 无法使用 nasm 编译具有 xmmword 操作数大小的汇编代码

    我试图使用编译汇编代码nasm nasm o file input asm 并在以下代码片段的第 2 行抛出错误 mov rsi 0x400200 movdqu xmm0 xmmword rsi nop 我不确定是否可以使用 128 位寄存
  • 将bootloader和内核制作成iso? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 如何创建将内核加载到 iso 的简单引导加载程序 已经过去 5 天了 我在 google 中搜索并进行
  • MinGW 32“未定义对‘ExitProcess@4’的引用”

    出于学习目的 我编写了一个小型汇编程序 test asm global main extern ExitProcess 4 section text main mov ebx 0 push ebx call ExitProcess 4 比我
  • “创建共享对象时不能使用针对‘.bss’的重定位 R_X86_64_32S”

    我对此完全陌生 但在课堂上 老师给了我们他为我们编写的文件来运行它 然后它运行得很好 但是当我尝试在家中执行此操作时 我在 VirtualBox 上使用 Linux 并使用 nasm f elf64 hello asm o hello o
  • 如何在 Linux x86 NASM 中打印字符?

    我正在尝试使用打印单个字符或数字NASM 针对 x86 GNU Linux 架构 这是我正在使用的代码 section text global start start Linux printing preparation mov eax 4
  • 在 Assembly 中实现流程“(1) if {...} else if {...} ... (2)”

    我在 C 中有以下流程 some stuff1 if something1 func1 func2 else if something2 func3 func4 some stuff2 我想知道如何在汇编中对其进行编码 我的意思是 不是精确
  • Gas .org 与 nasm 中的 ORG 不同吗?

    我使用 gnu 作为简单的启动 是这样的 text org 0x7c00 start movw 0x7c0 ax movw ax ds movw ax es leaw greeting msg si call prtstr end fill
  • 在保护模式下将字符打印到屏幕 ASM

    我正在尝试进入保护模式 然后打印出 Hi 但相反 它只是从我的 BIOS 中断调用中打印 正在加载操作系统 在进入 pmode 之前发生 而没有其他内容 My 引导加载程序 asm DEFINE KERNEL LOAD OFFSET 0x1
  • 汇编代码不识别?和@数据

    这是我的第一个汇编程序 任何人都可以帮助使其成功运行 我看到下面的编译错误 为什么它不识别 and data 我正在尝试交换汇编中的两个变量 我正在执行以下命令 nasm f elf swap asm 但我收到这个错误 swap asm 6
  • x86 asm 中 NOT 指令的简单示例

    有人能解释一下 x86 汇编器中 NOT 指令的具体作用吗 在我所知道的编程语言中 NOT 用于检查特定状态是否不正确 例如 if Isset var 但在汇编器中 运算符似乎做了其他事情 我不明白操作数到底是做什么用的 有人可以用一个简单
  • Xcode 和 NASM 编码

    如何在 Xcode 中用汇编语言编写和构建程序 我寻找它但没有成功 你能帮助我吗 如果无法在 xcode 中编写 NASM 代码 请推荐一些好的 IDE 自从您提出这个问题以来 这可能已经发生了变化 但目前 安装Xcode 命令行工具 ht
  • 显示寄存器内容

    您好 我需要帮助显示寄存器的内容 我的代码如下 我已经能够显示数据寄存器的值 但我想显示标志状态 例如 1 或 0 如果还显示其他寄存器 如 esi ebp 的内容 将会很有帮助 我的代码没有打印标志的状态 我缺少什么 section te
  • “mov eax, [num]”和“mov eax, num”之间的区别

    我是一名初学者 正在编写汇编程序 使用以下代码打印从 1 到 9 的数字 section text global start start mov ecx 10 mov eax 1 l1 mov num eax mov eax 4 mov e
  • assembly x86 qemu:致命:尝试在 RAM 或 ROM 之外执行代码

    我正在开发一个非常基本的 shell 其中当前唯一的命令是 help 如果您输入错误 系统会通知您该命令无法识别 在段和堆栈设置的某个地方 我有一个错误 导致 shell 在我输入任何内容后吐出一些废话 然后完全冻结 我在终端中遇到错误 q
  • NASM 无法声明初始化数据[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 由于某种原因我无法编译 nasm 程序 如果我尝试在 data 部分中放入某些内容 则会出错 error comma expect
  • Gas 与 nasm:哪个汇编器生成最好的代码?

    这两种工具都将汇编指令直接翻译成机器代码 但是是否有可能确定哪一个生成最快 最干净的代码 当你用汇编程序编写时 您正在准确地描述生成的指令所以它不依赖于汇编器 这取决于你 您编写的助记符与机器代码中的实际指令之间存在一一对应的关系
  • 汇编语言中的全局_start是什么?

    这是我的汇编级代码 section text global start start mov eax 4 mov ebx 1 mov ecx mesg mov edx size int 0x80 exit mov eax 1 int 0x80
  • 在 x86 汇编中将 64 位常量移至内存

    我正在使用 Intel x64 程序集 NASM 编译器 尝试将 0x4000000000000000 常量移至内存 该常量在 ieee 754 标准双精度中应等于 2 0 我正在使用的代码是 define two 0x4000000000
  • 将十进制转换为十六进制

    首先 这是家庭作业 我正在尝试将 5 位数字读入寄存器 bx 假定该数字不大于 65535 16 位 以下是我尝试这样做的方法 但是 当我尝试打印该号码时 我仅打印输入的最后一位数字 这让我猜测 当我向 bx 添加另一个数字时 它会覆盖以前
  • 0 和双字 0 有什么区别?

    正如问题所述 有什么区别 例如 mov eax 0 and mov eax dword 0 我一直在使用 cmp 语句 但我无法理解其中的区别 一个是地址 另一个是数值 如前所述 MOV 指令没有区别 对于 CMP 您将有以下区别 qwor

随机推荐

  • 程序员就业和发展前景,一文带你了解

    程序员 英文是 code worker 顾名思义就是计算机程序的作者 它通常指从事计算机软件开发的人员 当然也包括用计算机语言编写程序来进行各种信息处理的人 现在软件行业中 程序员属于技术含量较高的一个群体 程序员就业和发展前景也是在众多行
  • 微信小程序-伸缩性最强的table组件

    微信小程序 伸缩性最强的table组件 微信小程序很大的一个诟病之一就是没有table组件 小程序中正常显示表格依然是令人头痛的问题 下面使用flex布局模拟现实一个小程序的table组件 支持内容过多滑动 设置单元格宽度等 1 效果图 微
  • Java---System类,RunTime类,Random类

    System类 系统类 主要获取系统的属性数据 还有标准的输入 输出及错误输出流 主要介绍一些常用的方法 1 数组拷贝 arraycopy Object src int srcPos Object dest int destPos int
  • open3d显示rope3d标注内容

    open3d是我发现比较好用且功能全面的3D库 下面演示显示rope3d的标注内容 其他调用的库有pandaset geometry等 usr bin env python3 coding utf 8 import pcl import o
  • 关于联想G480BIOS中的设置

    由于一段时间对笔记本电脑中的BIOS设置很感兴趣 故在网上搜索一下 找到这篇博客 为了以后那天能用上就先转载一下 以备后用 地址为 关于G480BIOS设置
  • 微信小程序登录问题--第一次登录失败刷新再次登录成功问题

    出现这样问题都是先获取用户信息wx getUserInfo encryptedData与iv 再进行登录wx login 获取code code是用来生成session key用来解密encryptedData与iv的 所以等你先获取用户e
  • Java实现二阶魔方旋转

    魔方可以对它的6个面自由旋转 我们来操作一个2阶魔方 如图1所示 为了描述方便 我们为它建立了坐标系 各个面的初始状态如下 x轴正向 绿 x轴反向 蓝 y轴正向 红 y轴反向 橙 z轴正向 白 z轴反向 黄 假设我们规定 只能对该魔方进行3
  • linux延迟函数sleep

    include
  • 不用密码卸载symantec

    之前在某公司实习的时候 需要安装这个软件 后面尝试了很多网上的方法 都无法卸载掉 最后还是使用了杀手锏 官方的卸载软件cleanwipe 按照步骤 很简单的就卸载掉了 这里附上链接 最后面的附件可以下载 Download the Clean
  • 滑动拼图和文字点选两种类型的验证码

    前言 行为验证码通过用户的操作来完成验证 常见的行为验证码有拖动式和点触式 拖动式验证就是根据图片显示 将指定的图形拖动到指定位置完成验证 而点触式验证码就是通过鼠标点击出示例中出现的图形完成验证 行为验证码应用 今天推荐一款非常优秀的行为
  • DOM操作-上移下移

    HTML ul li span 啦啦啦啦 span i 1 i li ul
  • anaconda prompt 常用命令

    1 查看已安装的包 conda list 2 更新所有包 conda upgrade all 3 安装包 conda install package name 4 删除包 conda remove package name 5 更新包 co
  • 以太坊学习

    ubuntu 安装go 自行百度 下载ethererum客户端 github 将ethererum 解压放在GOPATH下 进入 ethererum文件夹 执行 make geth 或者make all 可能会报错 原因 所下载的库依赖有官
  • java中的数据类型转换,常量类型

    文章目录 一 隐式转换 二 强制转换 三 java中常量优化机制 四 常量类型 一 隐式转换 所谓隐式转换 就是将数据类型中 取值范围小的数据 给取值范围大的类型数据赋值 可以直接赋值 首先 看一段代码 int a 10 double b
  • IMAGE INPAINTING

    IMAGE INPAINTING We need get good Int i j I t n i j Here using Laplacian Operator http www cnblogs com xfzhang archive 2
  • Java中访问控制符

    说明 Java中提供了四种访问控制符 分别是private default protected和public 其访问控制级别从小到大如图所示 1 private 当前类访问权限 用private修饰的变量或方法只能被该类自身所访问和修改 而
  • 虚拟机自动重启问题

    性能测试一般要运行好几天不能关机的 万一遇到系统重启之前跑的可能都前功尽弃了 真的是很头疼的 同样 如果是运行中的项目服务遇到这种情况给用户的使用感受也是特别差的 所以 我会修改系统的自动重新启动设置 Windows Server自动重启的
  • tomcat默认端口号(三个tomcat端口号)

    tomcat默认端口号 三个tomcat端口号 2020 05 08 10 43 21 共10个回答 Tomcat的默认端口号是多少 您好 提问者 Tomcat的默认端口号是 8080 weblogic的默认端口号是 7001 tomcat
  • MSP430学习笔记-架构篇

    最近开始接触MSP430单片机了 打算先把手册结合着书看一遍 之后用来做一个小玩意儿 学习笔记就按照学习进度来更新吧 也算做个备忘 有什么东西不记得了可以来翻一翻 今天我们来聊聊MSP430架构 一 MSP430简介 MSP430是由德州仪
  • [Intel汇编-NASM]进入保护模式全过程

    enter pm mbr org 0x7C00 该命令表示程序将被装在到偏移地址为0x7C00的地方 该命令效果是全局的 但只能使用一次 之后不得再用 从该位置开始到整个源代码结束之间的所有标号在被访问时都会隐式地自动加上0x7C00 但是