这段代码中DATA SEGMENT下的代码什么时候执行?

2023-12-07

我是汇编编程的初学者... 我在谷歌上浏览了很多。信息很多,但是我还是看不懂下面的代码。如果有人能解释,我将不胜感激

MOV AX、数据

我也不明白数据段中存在的代码何时会在此程序中执行。

ASSUME CS:CODE,DS:DATA

CODE SEGMENT
 MOV AX,@DATA
 mov DS,AX
 ...
 ...
CODE ENDS


DATA SEGMENT
   ...
   ...
   ... //SOMECODE
DATA ENDS 

另外,有人可以向我解释以下说明的作用吗?...

MOV AH , ??H ( ?? can be filled with 09,4c etc).

MOV DS,AX

MOV ES,AX


警告:我一生中从未编写过 8086 汇编,但这就是我的想法。

MOV AX,@DATA是运行的第一行代码。我相信 @DATA 是一个变量,它保存数据段所在内存位置的值。它将 @DATA 的内存位置移动到 AX 寄存器(16 位寄存器)中。这里需要注意的一件事是 DATA 一词前面的@。我相信这是因为 @DATA 在链接过程中被评估,并将被其实际值替换。请注意其他示例前面没有@,因为它们首先引用的是实际的内存位置。

MOV DS,AX然后将该内存位置设置为变量DS这是 8086 汇编的标准变量(或本例中的寄存器)。它应该始终指向您想要保存值的存储位置(如果您熟悉 C++ 术语,则为堆)。

AX 寄存器只是一个临时占位符,您可以加载值并对其执行执行命令。

MOVE AH, ??H首先,AH指的是AX寄存器的“高”端。它的兄弟是 AL,它指的是 AX 寄存器的“低”端。当您想要针对 8 位而不是 16 位执行命令时,可以使用此选项。第二部分,您所指的 ??H 是您要存储在 AH 寄存器中的值。末尾的H表示“十六进制”。因此,如果您有 00H,则意味着零(十六进制)。如果输入 FFH,则与十进制中的 255 相同。

回到你最初的问题“这段代码中DATA SEGMENT下的代码什么时候执行?” -- 我相信你问的是DATA SEGMENT什么时候会被执行。通常不应执行此操作,因为它应该存储在代码段中使用的数据(变量)。在某些操作系统上,我相信您可以绕过这个问题,只需跳转或分支到该代码段并将其视为常规代码段即可。有时,这就是堆栈溢出、堆溢出、(黑客)等的工作原理。

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

这段代码中DATA SEGMENT下的代码什么时候执行? 的相关文章

  • 减法进位标志

    我正在使用 MASM32 有了这个代码 mov eax 5 sub eax 10 CF 状态标志将被设置 但使用我的铅笔和纸 我实际上看到 MSB 没有任何进位 是的 我知道从较少的数字中减去大的数字集CF 但我想知道为什么 因为使用这段代
  • 为什么 RISC-V S-B 和 U-J 指令类型以这种方式编码?

    我正在读一本书 计算机组织与设计RISC V版 我遇到了 S B 和 U J 指令类型的编码 我上面提到的那些类型有奇怪的编码立即字段 S B 类型将直接字段分为两部分 这是有道理的 因为所有指令编码都必须相似 但我无法理解为什么立即字段以
  • 两个基本的 ANTLR 问题

    我正在尝试使用 ANTLR 来获取简单的语法并生成汇编输出 我在 ANTLR 中选择的语言是 Python 许多教程看起来非常复杂或详细阐述与我无关的事情 我真的只需要一些非常简单的功能 所以我有两个问题 将值从一个规则 返回 到另一规则
  • 有没有办法使用 i387 fsqrt 指令获得正确的舍入?

    有没有办法使用 i387 fsqrt 指令获得正确的舍入 除了改变精确模式在 x87 控制字中 我知道这是可能的 但这不是一个合理的解决方案 因为它存在令人讨厌的重入型问题 如果 sqrt 操作中断 精度模式将出错 我正在处理的问题如下 x
  • 如何知道寄存器是否是“通用寄存器”?

    我试图了解寄存器必须具备什么标准才能被称为 通用寄存器 我相信通用寄存器是一个可以用于任何用途的寄存器 用于计算 将数据移入 移出等 并且是一个没有特殊用途的寄存器 现在我读到了ESP寄存器是通用寄存器 我猜是ESP寄存器可以用于任何事情
  • AVX-512CD(冲突检测)与原子变量访问有何不同?

    所以我在看他们展示了如何 void Histogram const float age int const hist const int n const float group width const int m const float o
  • 如何在 Linux x86_64 上模拟 iret

    我正在编写一个基于 Intel VT 的调试器 由于当 NMI Exiting 1 时 iret 指令在 vmx guest 中的性能发生了变化 所以我应该自己处理vmx主机中的NMI 否则 guest会出现nmi可重入错误 我查了英特尔手
  • ARMv8 A64 汇编中立即值的范围

    我的理解是 ARMv8 A64 汇编中的立即参数可以是 12 位长 如果是这样的话 为什么这行汇编代码是 AND X12 X10 0xFEF 产生此错误 使用 gcc 编译时 Error immediate out of range at
  • 使用 NEON 优化 Cortex-A8 颜色转换

    我目前正在执行颜色转换例程 以便从 YUY2 转换为 NV12 我有一个相当快的函数 但没有我预期的那么快 主要是由于缓存未命中 void convert hd uint8 t orig uint8 t result uint32 t wi
  • linux x86 汇编语言 sys_read 调用的第一个参数应为 0 (stdin)

    我正在编写一个简单的汇编程序来从标准输入读取 如 scanf 这是我的代码 section bss num resb 5 section txt global start start mov eax 3 sys read mov ebx 0
  • 这个反斜杠在这段汇编代码中起什么作用?

    我不确定这些推线有什么区别 修剪下来来自 Linux 的 x86 entry calling h https github com torvalds linux blob 241e39004581475b2802cd63c111fec43b
  • 这种没有推送寄存器的交换有多安全?

    我对汇编非常陌生 下面的代码应该通过两个不同的函数交换两个整数 首先使用swap c然后使用swap asm 但我怀疑 我是否需要push 我的意思是保存 汇编代码之前寄存器的每个值和pop稍后 就在返回之前 main 换句话说 如果我返回
  • 使用 Turbo C 编译并链接到 .com 文件

    我正在尝试使用 Turbo C 编译器和链接器编译一个简单的程序并将其链接到 DOS com 文件 我尝试了我能想到的最简单的 C 程序 void main Turbo C 链接器中是否有链接到 com 文件的命令行参数 我从链接器收到的错
  • 在 x86 程序集中存储大量布尔值的最佳方法是什么?

    最近我一直在处理充满布尔值的大型数组 目前 我将它们存储在 bss部分有一个 space指令 它允许我创建字节数组 但是 由于我只需要存储布尔值 因此我希望从数组中逐位读取和写入数据 目前 我能想到的最好方法是有一个 space指令所需存储
  • 如何使用 Bochs 运行汇编代码?

    我想使用 Bochs 作为 8086 模拟器 是否有捷径可寻 我想要的是类似 emu8086 的东西 http www emu8086 com http www emu8086 com 如果程序的初始部分适合 512 字节 并且您不介意将自
  • 错误 LNK2019:函数 main 中引用的外部符号无法解析

    我正在尝试在 C 中运行我的简单汇编代码 我只有两个文件 cpp 文件和 asm 文件 编译时出现错误 见下文 如果有人可以提供帮助 我将不胜感激 这是我的 main cpp 文件 include
  • 从类模板参数为 asm 生成唯一的字符串文字

    我有一个非常特殊的情况 我需要为类模板中声明的变量生成唯一的汇编程序名称 我需要该名称对于类模板的每个实例都是唯一的 并且我需要将其传递给asm关键字 see here https gcc gnu org onlinedocs gcc 12
  • NASM 中的 equ 和 db 有什么区别?

    len equ 2 len db 2 它们是否相同 产生可以用来代替的标签2 如果不是 那么每种申报表的优点或缺点是什么 它们可以互换使用吗 第一个是equate 与 C 类似 define len 2 因为它实际上并没有在最终代码中分配任
  • 汇编器8086将32位数字除以16位数字

    我尝试将 32 位数字除以 16 位数字 例如 10000000h 除以 2000h 根据我尝试做的设计除以 右 4 位数字除以除数 然后左 4 位数字除以除数 这是我的代码 DATA num dd 10000000h divisor dw
  • Grub 和进入实模式(低级汇编语言编程)

    我一直在开发一个玩具操作系统 并一直使用 grub 作为我的引导加载程序 最近尝试使用 VGA 时 我发现无法使用硬件中断 我发现这是因为我被 grub 置于保护模式 有人知道如何在不删除 grub 的情况下回到实模式吗 如果您使用 GRU

随机推荐

  • 在 C 中传递二维指针数组

    对于我的程序 我需要将一个二维指针数组传递给单独文件中的函数 我在下面编写了一个类似语法的文件 include
  • 使用 py2exe 捆绑时导入错误

    我使用 py2exe 捆绑了一个用 python 编写的小脚本 该脚本使用了许多包 其中之一是reportlab 使用 py2exe 捆绑后 我尝试运行可执行文件 但它返回以下错误 C Python26 dist gt DELchek ex
  • 在Python中调用C函数并返回2个值

    我试图弄清楚如何从我在 python 中调用的 C 函数返回 2 个值 我已阅读在线材料并使用 struct 输出这两个变量 当我在同一个 C 文件中调用此函数时 我能够输出变量 然而 当我尝试在 python 中调用它时 它仍然只返回一个
  • 外部存储上应用程序特定文件夹的权限

    有人可以解释一下应用程序特定文件夹的权限吗 Android data lt package name gt files 如此处所述http developer android com guide topics data data stora
  • 处理字母数字字符时 ksort 会产生错误的结果

  • 是否可以从获取的 url 而不是规范的 url 中提取元数据?

    我有一个像这样的 Facebook 链接到我没有完全控制权的页面 我可以修改但不是页面的 因此 我尝试在我拥有完全控制权的新页面上设置 like 按钮的链接 在此页面上设置opengraph元标记 并设置一个链接到原始页面的og url 但
  • 如何捕获全局异常?

    有没有办法捕捉global代码中的 崩溃 应用程序异常 例如 objc exception throw EXC ARITHMETIC 等 我需要它 因为我想在应用程序被系统杀死之前做一些事情 您可以使用以下方法为任何未捕获的异常设置处理程序
  • MySQL查询从一个表中获取最佳排名并用另一个表更新结果

    我有一个排名板 列出了每种性别 男性和女性 的前 100 个最佳博客 我有一个博客表 PRIMARY blogs id users id blogs score blogs score time gender 1 11 2852 2015
  • 如何使用天蓝色连接字符串覆盖本地连接字符串

    我在 Net core 项目中使用 appsettings json 作为连接字符串 我的连接字符串是 ConnectionStrings OT DB Connection Data Source 108 Initial Catalog O
  • 运行 Composer Laravel 8 时出现 Symfony 进程错误

    突然在我的 Laravel 8 项目中 我运行了 Composer 来卸载一个依赖项 我想重新安装该依赖项 只是为了顺序并从头开始 我开始抛出这个与 Symfony Process 有关的错误 PHP 致命错误 未捕获的类型错误 fclos
  • 如何将每个 DStream 保存/插入到永久表中

    我一直面临着 Spark Streaming 的问题 关于将输出 Dstream 插入到永恒的SQL 表 我想将每个输出 DStream 来自 Spark 处理的单个批次 插入到一个唯一的表中 我一直在使用 Python 和 Spark 版
  • 在Java中禁用键盘/鼠标

    我正在开发一个程序 它允许用户锁定计算机 这样其他人就不能使用它 无论如何 我可以禁用鼠标和键盘上的特定键吗 谢谢 不 但是您可以创建让程序锁定屏幕 然后使用 MouseMovementListener 以便每次鼠标移动时 您都以编程方式将
  • 使用 Javascript 选定单词的索引

    如何使用 Javascript 获取 HTML 中选定文本的索引 例如 在一个 HTML 文件中 有如下段落 我住在印度 印度是一个非常美丽的国家 现在如果用户选择India在第一句话中应该有一个alert 5如果用户选择India第二行然
  • C# lambda 编译成什么?堆栈框架,匿名类型的实例,还是?

    C lambda 编译成什么 堆栈框架 匿名类型的实例 还是 我读过这个question 这主要回答了 为什么 在使用隐式类型功能时不能使用 lambda 但是 这个问题旨在回答编译器生成什么构造来实际执行 lambda 代码 它是匿名类型
  • 使用 Telnet 从 Gmail 发送电子邮件

    我正在 Windows 上工作 并且启用了 telnet 客户端 在cmd提示符下 telnet smtp gmail com 587 220 mx google com ESMTP dk3sm50678627pbc 32 gsmtp He
  • gulp:如何在不刷新的情况下更新浏览器(仅适用于 css 更改)

    我已经设置了 gulp 以便在进行更改时浏览器会重新加载 但是 对于 css 更改 我希望浏览器无需刷新即可更新 但我不知道如何执行此操作 对于我当前的设置 我使用了this教程 var debug require gulp debug c
  • 使用正则表达式拆分列中的值

    我的 data frame 有两列 如下所示 dat ID Details id 1 box1 homodomain gn box1 os homo sapiens p 4 se 1 id 2 sox2 plurinet gn plu os
  • 如何在 unicode 中管理混合 LTR 和 RTL 语言?

    有时我们必须在显示屏上显示混合了 RTL 和 LTR 语言的消息 该消息采用 unicode 格式 那么 unicode 如何处理混合呢 对平台有依赖吗 该过程由此处描述的 Unicode 双向算法描述 http www unicode o
  • 如何使用 md5 代替 bcrypt?

    我需要使用md5 代替bcrypt 用于存储密码 但是当我这样做时 protected function create array data return Account create username gt data username e
  • 这段代码中DATA SEGMENT下的代码什么时候执行?

    我是汇编编程的初学者 我在谷歌上浏览了很多 信息很多 但是我还是看不懂下面的代码 如果有人能解释 我将不胜感激 MOV AX 数据 我也不明白数据段中存在的代码何时会在此程序中执行 ASSUME CS CODE DS DATA CODE S