gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 06:31:11 25 4
gpt4 key购买 nike

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

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 (?? 可以用 09,4c 等填充)。

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

关于assembly - 这段代码中DATA SEGMENT下的代码什么时候执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5330306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com