小白求教 为啥我在命令行中汇编*.asm文件时总是打开PROTEL软件呢?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小白求教 为啥我在命令行中汇编*.asm文件时总是打开PROTEL软件呢?相关的知识,希望对你有一定的参考价值。

电脑中已经安装了MASM汇编环境。应该怎样做才能实现正常汇编 连接 运行 调试呢?

编译:
进入DOS方式,win7的话先进入cmd,这个会吧?进入 C:\masm 目录,运行masm.exe。

如果源程序文件不是以 asm 为扩展名的话,就要输入它的全名。比如p1.txt。
在输入源程序文件名的时候一定要指明它所在的路径。如果文件就在当前路径下,只输入文件名就可以。
输入要编译的源文件文件名后,一直按 Enter键。搞定,如果报错就修改程序。

连接:
进入DOS方式,进入C:\masm目录,运行link.exe。
如果目标文件不是以obj为扩展名的话,就要输入它的全名。比如:p1.bin。
在输入目标文件名的时候,要注意指明它所在的路径。这里,我们要连接的文件是当前路径下1.obj,所以此处输入“1”。
运行
这个直接运行生成的exe就是
调试
用debug命令+程序运行即可
例如,debug 1.exe
建议新手看王爽的汇编原理,里面讲的很详细
参考技术A 网上下载一个nmake ,把你环境里的BIN, INCLUDE, LIB文件夹取出来放到某个地方,
然后写个BAT文件把路径设置好.
例如:
@echo off
set include=C:\masm32\INCLUDE
set lib=C:\masm32\LIB
set path=C:\masm32\BIN;%path%
echo on
设置好后,在命令行把路径设置到.ASM路径上,然后直接 nmake 回车即可.

调试我也不清楚,没用过那些工具.

C语言GNU中汇编文件.s与.S的差异

本人就职于国际知名终端厂商,负责modem芯片研发。
在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。


博客内容主要围绕:
       5G/6G协议讲解
       算力网络讲解(云计算,边缘计算,端计算)
       高级C语言讲解
       Rust语言讲解

文章目录

GNU中汇编文件.s与.S的差异

今天下午学习ARM64汇编时,写了一段汇编程序,使用gcc编译总是说我没有定义 MY_LABEL,


问题代码如下,

#define MY_LABEL 0x20

.section .data

.section .text
.globl main
main:
        ldr x7,=MY_LABEL
        ret

问题出在文件名上

下面是GNU手册中的描述,

file.s Assembler code.

file.S
file.sx Assembler code that must be preprocessed.

问题找到了,因为我的文件名是 .s后缀 ,所以GNU编译器不会对汇编文件中的 #include、#if、#elif、#else、#endif、#define这些预处理指令做解析

将文件名换成 .S后缀或者 .sx后缀,问题解决了,编译成功。



这里是从善若水的博客,感谢您的阅读📕📕📕



以上是关于小白求教 为啥我在命令行中汇编*.asm文件时总是打开PROTEL软件呢?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 /=2 与有符号整数的 >>=1 不同,并编译为不同的 asm?

C语言GNU中汇编文件.s与.S的差异

C语言GNU中汇编文件.s与.S的差异

NASM中汇编编程的基础知识

小白求教,关于openwrt的Makefile

通过查看Windbg中汇编指令及内存中的值去定位软件崩溃问题