问题标签 [masm32]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
17811 浏览

assembly - mov ax, bx 与 mov ax, [bx]

以下两行有什么区别?

如果bx包含值 100h 并且内存地址 100h 处的值是 23,那么第二个是否将 23 复制到ax

另外,以下两行之间有什么区别?

0 投票
3 回答
1570 浏览

assembly - 汇编寻址模式

有人可以解释以下两者之间的区别吗?我发现理解寻址模式背后的概念有点困难

非常感谢!

0 投票
2 回答
1796 浏览

assembly - 寄存器如何有地址?

根据书,寄存器是CPU中存储空间小的地方(例如16位CPU上的16位)。那么CPU寄存器是如何有地址的呢?如果它不是在内存中而是在 CPU 上,我们如何能够向它添加位移?

示例:

0 投票
1 回答
1097 浏览

assembly - masm32:简单的数组操作

我有一个非常简单的问题:

我想将字节存储在 masm32 中的一维数组中(我昨天才开始使用它,之前使用过 c#),然后用一些简单的数学对其进行修改,但我在网上没有发现任何有用的东西。

这就是我在 .data 部分中声明数组的方式,基本上我想用 C# 语法做的是:

0 投票
1 回答
1017 浏览

linker - masm32 链接 2 个 .obj 文件(简单)

我刚开始学习 masm32,对 .obj 文件有点困惑,我以前用过 C#,所以编译器为我链接,现在我有 qeditor 但我找不到组合多个 .asm 文件的选项。我有一个非常基本的程序:

当我分别编译它们中的每一个时,我得到 3 个 .obj 文件,它们是什么?我查看了 makeit.bat 的行:

所以我想我可以把它改成

编译我的整个程序,但我错了:(,任何人都可以帮助我成功创建一个 .bat (因为也许我想稍后创建一个小 ide,为此我需要一个 .bat)编译 3 .obj文件转换成 1 个 .exe?

0 投票
2 回答
11206 浏览

assembly - bt 汇编指令

我对bt汇编指令有疑问。我摘录了本书的一部分以提供上下文。请看最后一个例子,bt Testme, bx。为什么要复制TestMe+8?不应该复制TestMe+65吗?

非常感谢您的帮助!

6.6.4.2 比特测试说明:BT、BTS、BTR、BTC

在 80386 或更高版本的处理器上,您可以使用 bt 指令(位测试)来测试单个位。它的第二个操作数指定第一个操作数的位索引。Bt 将寻址位复制到进位标志中。例如,指令

将 ax 的第 12 位复制到进位标志中。

bt/bts/btr/btc 指令仅处理 16 位或 32 位操作数。这不是指令的限制。毕竟,如果你想测试 al 寄存器的第三位,你可以很容易地测试 ax 寄存器的第三位。另一方面,如果索引大于寄存器操作数的大小,则结果未定义。

如果第一个操作数是内存位置,则 bt 指令会测试内存中给定偏移处的位,而不管索引的值如何。例如,如果 bx 包含 65 则

将位置 TestMe+8 的第 1 位复制到进位标志中。再一次,操作数的大小无关紧要。出于所有意图和目的,内存操作数是一个字节,您可以使用适当的索引测试该字节之后的任何位。实际位 bt 测试在位位置索引 mod 8 和内存偏移有效地址 + index/8 处。

0 投票
1 回答
7169 浏览

assembly - 窗口 7 64 位中的 masm32 中的“错误 A2006:未定义符号”?

当我运行这个例子时,我得到一个错误。删除 PROC1 PROC FAR 后,我收到另一个错误“符号类型冲突”。使用 /coff:“起始地址需要前导下划线:START”。

Microsoft (R) 宏汇编程序版本 6.14.8444 版权所有 (C) Microsoft Corp 1981-1997。版权所有。

汇编: D:\Linux\test1.asm D:\Linux\test1.asm(28) : 错误 A2006: 未定义符号 : START
D:\Linux\test1.asm(16) : 错误 A2004: 符号类型冲突
D:\ Linux\test1.asm(28):错误 A2148:表达式中的符号类型无效:STAR

附录:

删除 start 后,它在第 16 行留下了错误。为什么会出现此错误MOV AX, DATA

Microsoft (R) 宏汇编程序版本 6.14.8444 版权所有 (C) Microsoft Corp 1981-1997。版权所有。

汇编:D:\Linux\test1.asm D:\Linux\test1.asm(16):错误 A2004:符号类型冲突

0 投票
1 回答
345 浏览

assembly - 为什么要通过寄存器推送变量,而不是直接用汇编语言推送变量?

我在论坛的 asm 中遇到了一个键盘记录程序。我想我可能会自己创建一个键盘记录器。当我阅读代码以查看该程序中实际发生的情况时,我遇到了一些有趣的事情。

1.程序几乎从不将变量压入堆栈。它将变量的值移动到寄存器,然后压入寄存器。例如。

2.程序使用stosd清除数组。例如:

该程序使用 push-pop 来分配值,如上例所示。

上述约定的优点是什么?

0 投票
1 回答
878 浏览

masm - 这段代码有什么作用?

我在网上遇到了这个键盘记录器,想知道下面的代码实际上是做什么的。连续有 2 个 lodsd 命令让我感到困惑。还有那里的 or 命令的目的是什么?完整代码见: http ://www.rohitab.com/discuss/topic/21205-asm-keylogger-in-4k-d/

这是代码摘录(从第 295 行开始):

0 投票
1 回答
109 浏览

dll - 如何从 .DLL (Windows) 中获取函数(地址)以从 Masm32 调用它们

我正在为类似 Pascal 的语言编写一个编译器,它将程序转换为Masm32(然后转换为 .exe)。我的目标是让编码器包含 Windows Libraries (.DLL)。所以我需要先读出函数名和跳转地址以获得正确的编译器警告。(功能未定义...)

有没有办法做到这一点?我听说每个 Win32 函数都有一个幻数(0xXXXXXXXX),它是它的地址,然后可以调用 0xXXXXXXXX