问题标签 [masm]

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 回答
309 浏览

assembly - MASM 中的长代码长度错误?

我目前正在开发一个相当大的汇编程序,它是一个聊天机器人。它目前跨越 700 多行代码。在我的程序中,我有两个标签,我的程序使用这些标签来跟踪以随机方式移动的某些数据。

让我向你解释发生了什么。程序要做的工作很大,所以我倾向于将这些代码切成小块。我为我的程序需要的所有功能创建单独的项目,当它们工作时,我将它们包含在主程序中。

我刚刚完成了其中一个功能,并将其集成到我的程序中。该功能介于我之前告诉过您的两个标签之间。

当我尝试编译程序时,我收到一条错误消息:

ChatterBot.asm<22>:不明符号:EEEndLenght(这是第二个标签的名称)

标签在第 655 行更远的 633 行,如果我再次删除该函数,错误就会消失,我确定新函数中不会出现相同的标签,我已经多次更改它的名称

有谁知道为什么会发生这种情况以及我该如何解决?

概述:

编辑:现在我是这样看的,我想我已经找到了问题所在,结束 main - 那是错误的。我很抱歉浪费你们的时间,确实是 :end main 搞砸了。

0 投票
3 回答
7038 浏览

windows - masm32和masm的区别?

我正在尝试学习 windows 的组装,并看到有 2 个组装器:

masm:https ://www.microsoft.com/downloads/en/details.aspx?FamilyID=7a1c9da0-0510-44a2-b042-7ef370530c64

masm32:http : //masm32.com/index.htm

这些是等价的吗?我应该选择哪一个来学习 windows 组装?

0 投票
4 回答
1948 浏览

c - 将 C 代码转换为汇编

我需要将此 C 代码翻译成汇编语言代码

我真的只需要知道如何将变量与汇编语言中的字符串结合起来,就像上面的 C 代码一样。我想我可以处理其他所有事情。谁能告诉我。我是否必须使用某种参考[]。

注意我正在使用 MASM 并使用 Kip Irvine's Assembly Language for x86 处理器第 6 版书

更新我试图从回答者的答案之一写入 MASM 的代码,我不断收到错误消息。就像我在使用 Kip Irvine 的汇编语言之前所说的那样,所以我必须包含库链接 INCLUDE Irvine32.inc

这是错误>>>> programb.obj:错误 LNK2019:未解析的外部符号 _scanf 在函数 _main@0 中引用

包括 Irvine32.inc

有人可以帮我解决这个问题吗

我很抱歉汇编语言代码....我不知道如何格式化它以便更容易阅读....

0 投票
2 回答
11080 浏览

winapi - 错误 LNK2001:无法解析的外部符号 _MessageBox

我正在尝试仅使用 masm 而不是 masm32 库创建一个 helloworld 程序。这是代码片段:

我可以使用 masm 组装它:

但是,我无法链接它:

我在链接期间包含了库,所以不知道为什么它仍然显示未解析的符号?

更新:

更新 2:最终工作代码!

0 投票
1 回答
490 浏览

assembly - masm 如何在变量定义中使用符号名称?

在 .data 部分我已经定义:

但是我怎样才能设置一个等于 MyString 的变量?

谢谢!

0 投票
1 回答
8518 浏览

assembly - 压缩十进制到 ascii 程序集

我正在尝试将压缩十进制数转换为 ascii 字符串。到目前为止,这是我的理解:

以下:

“解包”后应转换为十进制数 34。现在我不确定这样做的最佳方式。如果我将此十六进制数转换为二进制,则如下...

现在,如果我的程序一次打印出每个 4 位二进制值,那么它应该打印 ascii 数字字符串,对吗?所以如果我通过一个循环,获取第一个 4 位二进制数,打印出它的实际值,它会打印 3.. 然后做同样的事情,它会打印 4。

所以,这是我的一般想法:

取一个 8 位值“34h”,将其移动到 AH 和 AL 中。在 AH 中,使用以下命令清除后半部分:

在 AL 中,使用以下命令清除前半部分:

所以 AH = 0110b 或 3 和 AL = 0100b 或 4,然后相应地打印出来..

这是一个好方法吗?还是我的想法完全不正确或过度思考?

编辑:这是我的最终解决方案,原始值为 12345678h。感谢所有帮助过的人!

0 投票
3 回答
2831 浏览

assembly - INVOKE MASM 自动保存寄存器?

当我在 masm 中使用 Invoke 指令时,是否可以自动保存 cpu 寄存器?

0 投票
1 回答
1421 浏览

masm - MASM611中的乘法

嗨,我在 MASM611 中工作的 5 位以上的乘法有问题,请告诉我 MASM611 中至少 8 位乘法的解决方案

0 投票
3 回答
337 浏览

c++ - 为什么 __int16 和 int (32) 用 C++ 生成不同的 asm?

我最近开始学习 masm 汇编,我一直在反汇编我的许多程序只是为了看看。我注意到,当您使用 __int16 (字)时,它的值首先复制到 eax 然后复制到变量本身,但是使用 int (dword/32) 它直接复制到变量中:这是两者的反汇编代码

我注意到 __int16 的大小为 16 ......这是 eax 大小的一半,这就是为什么它先放入 eax 然后才将 ax 放入 x 的原因吗?

另外,哪个最快?

有什么好的masm网站可以推荐吗?

感谢您的输入

0 投票
3 回答
1339 浏览

assembly - 我的第一次装配练习

我在 Visual Studio 2005 下使用程序集(我是新手),我想创建一个程序,使用该规则计算算术级数:A n = 2*A n-1 + An n-2 但是。我真的不知道如何使用寄存器,我只需要你的一个例子来继续我的练习。

这是我的代码: