问题标签 [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.
assembly - mov ax, bx 与 mov ax, [bx]
以下两行有什么区别?
如果bx
包含值 100h 并且内存地址 100h 处的值是 23,那么第二个是否将 23 复制到ax
?
另外,以下两行之间有什么区别?
assembly - 汇编寻址模式
有人可以解释以下两者之间的区别吗?我发现理解寻址模式背后的概念有点困难
非常感谢!
assembly - 寄存器如何有地址?
根据书,寄存器是CPU中存储空间小的地方(例如16位CPU上的16位)。那么CPU寄存器是如何有地址的呢?如果它不是在内存中而是在 CPU 上,我们如何能够向它添加位移?
示例:
assembly - masm32:简单的数组操作
我有一个非常简单的问题:
我想将字节存储在 masm32 中的一维数组中(我昨天才开始使用它,之前使用过 c#),然后用一些简单的数学对其进行修改,但我在网上没有发现任何有用的东西。
这就是我在 .data 部分中声明数组的方式,基本上我想用 C# 语法做的是:
linker - masm32 链接 2 个 .obj 文件(简单)
我刚开始学习 masm32,对 .obj 文件有点困惑,我以前用过 C#,所以编译器为我链接,现在我有 qeditor 但我找不到组合多个 .asm 文件的选项。我有一个非常基本的程序:
当我分别编译它们中的每一个时,我得到 3 个 .obj 文件,它们是什么?我查看了 makeit.bat 的行:
所以我想我可以把它改成
编译我的整个程序,但我错了:(,任何人都可以帮助我成功创建一个 .bat (因为也许我想稍后创建一个小 ide,为此我需要一个 .bat)编译 3 .obj文件转换成 1 个 .exe?
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 处。
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:符号类型冲突
assembly - 为什么要通过寄存器推送变量,而不是直接用汇编语言推送变量?
我在论坛的 asm 中遇到了一个键盘记录程序。我想我可能会自己创建一个键盘记录器。当我阅读代码以查看该程序中实际发生的情况时,我遇到了一些有趣的事情。
1.程序几乎从不将变量压入堆栈。它将变量的值移动到寄存器,然后压入寄存器。例如。
2.程序使用stosd清除数组。例如:
该程序使用 push-pop 来分配值,如上例所示。
上述约定的优点是什么?
masm - 这段代码有什么作用?
我在网上遇到了这个键盘记录器,想知道下面的代码实际上是做什么的。连续有 2 个 lodsd 命令让我感到困惑。还有那里的 or 命令的目的是什么?完整代码见: http ://www.rohitab.com/discuss/topic/21205-asm-keylogger-in-4k-d/
这是代码摘录(从第 295 行开始):
dll - 如何从 .DLL (Windows) 中获取函数(地址)以从 Masm32 调用它们
我正在为类似 Pascal 的语言编写一个编译器,它将程序转换为Masm32(然后转换为 .exe)。我的目标是让编码器包含 Windows Libraries (.DLL)。所以我需要先读出函数名和跳转地址以获得正确的编译器警告。(功能未定义...)
有没有办法做到这一点?我听说每个 Win32 函数都有一个幻数(0xXXXXXXXX),它是它的地址,然后可以调用 0xXXXXXXXX