64位汇编语言windows编程A1010,A2034,A2013,MSB3721

严重性 代码 说明 项目 文件 行 禁止显示状态
错误 MSB3721 命令“ml.exe /c /nologo /Zi /Fo"Debug\cool22.obj" /W3 /errorReport:prompt /TaD:\Irvine\Irvine\irvine\examples\Lib64\cool22.asm”已退出,返回代码为 1。 dog C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Microsoft\VC\v160\BuildCustomizations\masm.targets 70
错误 A1010 unmatched block nesting : main dog D:\Irvine\Irvine\irvine\examples\Lib64\cool22.asm 63
。。。。。。
错误 A2034 must be in segment block : main dog D:\Irvine\Irvine\irvine\examples\Lib64\cool22.asm 35
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 A2013 .MODEL must precede this directive dog D:\Irvine\Irvine\irvine\examples\Lib64\cool22.asm 8
GetConsoleScreenBufferInfo Proto
GetStdHandle Proto
WriteConsoleOutputCharacter proto
SetConsoleCursorPosition proto
ExitProcess proto
WriteString proto
max = 100;最大单行字节数
.data
kong byte max dup (' ')
consoleInHandle qword ?
consoleOutHandle qword ?
nb qword ?
STD_OUTPUT_HANDLE equ -11
COORD STRUCT
X WORD ?
Y WORD ?
COORD ENDS
SMALL_RECT STRUCT
Left word ?
Top word ?
Right word ?
Bottom word ?
SMALL_RECT ends
CONSOLE_SCREEN_BUFFER_INFO STRUCT
dwsize COORD<>
dwCursorPosition COORD<>
wAttributes word ?
srWindow SMALL_RECT<>
dwMaximumWindowSize COORD <>
CONSOLE_SCREEN_BUFFER_INFO ENDS

.code
main proc
sub rsp,8
sub rsp,40
mov rcx,STD_OUTPUT_HANDLE
call GetStdHandle
mov consoleOutHandle,rax
mov rcx,consoleOutHandle
mov rdx,offset CONSOLE_SCREEN_BUFFER_INFO
CALL GetConsoleScreenBufferInfo
MOV RDI,OFFSET CONSOLE_SCREEN_BUFFER_INFO.dwCursorPosition
MOV RCX,QWORD PTR (COORD PTR [RDI]).Y
L2:
mov rcx,consoleOutHandle
mov rdx,offset kong
mov r8,qword ptr (COORD ptr [rdi]).X
mov (COORD ptr [rdi]).X,0
mov r9,rdi
mov qword ptr [rsp + 4 * sizeof qword],nb
call WriteConsoleOutputCharacter
dec (COORD PTR [RDI]).Y
loop L2
mov COORD.Y,0
mov rcx,consoleOutHandle
mov rdx,offset COORD
call SetConsoleCursorPosition
mov ecx,0
call ExitProcess
add rsp,40
main endp
end
...全文
1368 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 4 楼 早打大打打核战争 的回复:
比较明显的问题:
1. 64位汇编要用ml64.exe,错误 MSB3721 命令“ml.exe ..."应该是平台设置的问题
2. COORD STRUCT之类的三个结构只是类型声明,不是变量定义,所以后面访问三个结构的指令都是错误的
你要先定义变量,比如 C1 COORD<>
3. mov qword ptr [rsp + 4 * sizeof qword],nb 这是地址到地址传送,因为nb是变量,不是立即数,没有这样的指令
谢谢,程序已经完成了,VS里项目设置完x86并调试后就不可以再运行x64的汇编了,重开一个项目就可以了,其他的错误我也已经改正了,代码在我的博客里
zara 2021-01-07
  • 打赏
  • 举报
回复
#6 是 MSVCv140-VS2015C++ 的吧,MSVCv142-VS2019C++ 没这些了。
#7 ,刚才瞅了半天,硬着头皮选中了“Windows 10 SDK (10.0.19041.0) ”,安装完了,搜索了下,是有了;前面试了几个组件都没。这个,有些奇怪啊,masm32 安装时是创建的本系统的吧,我是系统是 win7 x64,但列表里就只有一堆的 win10 的,不知道用着会不会有异常,要是函数调序了,浪费是难免的。
  • 打赏
  • 举报
回复
.inc用masm32里的还可以继续使用,其实就导入函数和数据结构的声明
.lib需要安装windows SDK,在SDK安装目录下有
  • 打赏
  • 举报
回复
安装了vs之后,vs安装目录\vc\bin\x86_amd64\就是x64工具链,运行里面的vcvarsx86_amd64.bat,环境就设置好了
zara 2021-01-07
  • 打赏
  • 举报
回复
独立完整的 64位汇编哪里有啊?从 vs 里抓,好像不靠谱啊?
刚在虚拟机里安装了 vs2019 选择了 MSVCv142-VS2019 C++ x64/x86 生成工具(v14.27) ,里面有了各种的 ml 和 link 了,有些乱,平台和目标分 32
和 64 位交叉了有 4 个目录。现在 ml64 编译是没问题了,简单的 link 也行,就是如果要涉及到 inc 和 lib 怎么办,尤其是系统的,vs 的 lib 里好像都没系统相关的(拿个 api函数名用 find 搜索所以 lib文件全 0)?32 位的可以通过 inc2l.exe 创建 lib 文件,vs 里没发现有这个程序?
  • 打赏
  • 举报
回复
另外,64位模式下操作数尺寸默认仍然是32位的,不支持 mov [addr], imm64这种指令,唯一支持64位立即数的指令是 mov rax, imm64
  • 打赏
  • 举报
回复
比较明显的问题:
1. 64位汇编要用ml64.exe,错误 MSB3721 命令“ml.exe ..."应该是平台设置的问题
2. COORD STRUCT之类的三个结构只是类型声明,不是变量定义,所以后面访问三个结构的指令都是错误的
你要先定义变量,比如 C1 COORD<>
3. mov qword ptr [rsp + 4 * sizeof qword],nb 这是地址到地址传送,因为nb是变量,不是立即数,没有这样的指令
zara 2021-01-05
  • 打赏
  • 举报
回复
64位的没这些格式?那个提示明确要求要有,那就是你用错了编译工具,或设置错了工程的模式类型?看命令行的提示确实是在 32 位的 Program Files (x86) 目录下的。我没用过 vs 的,不知道具体步骤。不过,可以试试命令行窗口下在 Program Files 目录下找找 ml.exe 在哪个目录,手工编译下看看。
  • 打赏
  • 举报
回复
引用 1 楼 zara的回复:
被邀而来。
我没做过 masm64类的,手头也没 2019,所以无法实证。
照第 3 个错误提示,第 8 行前应该有 .MODEL 语句的,前面的两个错误可能就是因此而来。32 位的在源码的开始要有下面这样的说明的,你也可以看看是不是有示例源码,它们的基本的源程序框架。

.586
.MODEL flat,stdcall

option casemap:none
我的问题就是64位汇编没有加这些的格式啊
zara 2021-01-05
  • 打赏
  • 举报
回复
被邀而来。
我没做过 masm64类的,手头也没 2019,所以无法实证。
照第 3 个错误提示,第 8 行前应该有 .MODEL 语句的,前面的两个错误可能就是因此而来。32 位的在源码的开始要有下面这样的说明的,你也可以看看是不是有示例源码,它们的基本的源程序框架。

.586
.MODEL flat,stdcall

option casemap:none

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧