我是汇编编程的初学者...
我在谷歌上浏览了很多。信息很多,但是我还是看不懂下面的代码。如果有人能解释,我将不胜感激
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(使用前将#替换为@)