【asm基础】nasm和masm的一些区别

2023-11-19

差异点说明

1. nasm是区分大小写的;

2. nasm中访问内存需要使用[]将内存地址括起来;

例如:

bar equ 2
mov rax, bar
mov rax, [bar]  ;这个才是存储地址中内容的操作

3. nasm不存储类型信息,所以也不能使用MOVS这样没有表明大小的命令,而只能使用MOVSW这样的命令;

另外往内存中存放数据也需要注意:

如果写成这样:

var equ 2
mov [var], 1

会报错:

需要写成如下的形式:

var equ 2
mov word [var], 1

4. nasm中没有ASSUME伪指令;

5. nasm没有SMALL、COMPACT这样的内存模型;

6. nasm引用浮点寄存器的方式与masm不同;

7. 声明数据块的方式不同:

stack db 64 dup (?)    ; masm
stack resb 64          ; nasm

nasm不支持dup,且?是一个可用的变量名。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【asm基础】nasm和masm的一些区别 的相关文章

  • C 函数的返回值到 ASM

    我正在尝试从 ASM 中调用一个函数 我知道如何调用它 但我无法找到如何获取该函数的返回值 示例如下 C code int dummy return 5 N ASM代码 dummyFunction call dummy grab retur
  • 为什么在 NASM 中使用 RIP 相对寻址?

    我有一个适用于 Mac OS X 的程序集 hello world 程序 如下所示 global main section text main mov rax 0x2000004 mov rdi 1 lea rsi rel msg mov
  • 标签移动到注册和子是什么意思?

    given a a label L1 db beat it 10 0 L2 what is the meaning of mov eax L2 sub eax L1 L2 寄存器 以及来自标签的子寄存器包含字符串 MOV EAX L2将标签
  • 使用 nasm 在 64 位和 32 位架构上从汇编语言调用 printf

    我想在linux中从汇编语言调用printf函数 我想知道64位和32位汇编语言程序的方法 1 如果我想用字符串在 printf 中传递 32 位参数和 64 位参数 请告诉我两种情况 我该怎么做 2 对于 x86 32 位架构 如果我想做
  • NASM 2行db(初始化数据)似乎不起作用

    我有以下 x86 64 代码 可以在 OSX Yosemite 上运行 global main extern exit extern puts DEFAULT REL section data putsmsg db Puts message
  • “创建共享对象时不能使用针对‘.bss’的重定位 R_X86_64_32S”

    我对此完全陌生 但在课堂上 老师给了我们他为我们编写的文件来运行它 然后它运行得很好 但是当我尝试在家中执行此操作时 我在 VirtualBox 上使用 Linux 并使用 nasm f elf64 hello asm o hello o
  • 汇编程序中的寻址

    有件事我无法消化 我正在学习一些汇编程序 现在我正在学习寻址章节 我理解用于解除引用的括号的概念 但不知怎的 当我看到它的用法时 我就是无法理解它的要点 更准确地说 我的困惑是从这里开始的 mov al L1 在这里 我假设 L1 作为示例
  • Hello World 通过一个系统调用打印两条消息?为什么 length equ $-msg1 包括两者? [复制]

    这个问题在这里已经有答案了 section text global start start mov ebx 1 mov eax 4 mov ecx msg1 mov edx len1 int 0x80 mov eax 1 exit mov
  • Nasm - 按值和地址访问结构元素

    我最近开始在 NASM 程序集中编码 我的问题是我不知道如何以正确的方式访问结构元素 我已经在这个网站和谷歌上搜索了解决方案 但我看到的每个地方人们都有不同的说法 我的程序崩溃了 我感觉问题出在访问结构上 查看示例代码时 STRUC Tes
  • 64位nasm除法idiv [重复]

    这个问题在这里已经有答案了 print out division message mov rcx 0 zero out register mov rax input mov rcx input2 idiv rcx divide rax by
  • 汇编代码不识别?和@数据

    这是我的第一个汇编程序 任何人都可以帮助使其成功运行 我看到下面的编译错误 为什么它不识别 and data 我正在尝试交换汇编中的两个变量 我正在执行以下命令 nasm f elf swap asm 但我收到这个错误 swap asm 6
  • NASM %rep 部分中的标签

    I have rep创建预处理器循环的预处理器指令 我想在其中声明标签 可能带有一些串联 但我无法获得正确的语法 assign i 0 rep 64 label i this of course doesn t work inc rax a
  • 显示寄存器内容

    您好 我需要帮助显示寄存器的内容 我的代码如下 我已经能够显示数据寄存器的值 但我想显示标志状态 例如 1 或 0 如果还显示其他寄存器 如 esi ebp 的内容 将会很有帮助 我的代码没有打印标志的状态 我缺少什么 section te
  • 如何获取变量的地址并在 nasm x86 程序集中取消引用它?

    在c语言中我们使用 获取变量的地址并 取消引用该变量 int variable 10 int pointer pointer variable 汇编中没有变量 variable db A 做几件事 它定义了汇编时间符号variable 就像
  • NASM 无法声明初始化数据[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 由于某种原因我无法编译 nasm 程序 如果我尝试在 data 部分中放入某些内容 则会出错 error comma expect
  • Windows 7 中 NASM 程序中的 I/O

    我想用 NASM 汇编语言进行编程 我有 NASM 2 07 和 Borland C 编译器 5 0 bcc32 我的操作系统是Windows 7 我不知道如何在Windows平台上使用NASM进行输入和输出 请问你能帮我吗 最简单的方法是
  • Little Endian 并推入 nasm

    我不明白为什么代码的输出是Ole 小字节序不应该影响push命令 global start section data x dd 3 section text start mov eax 4 mov ebx 1 mov dword x 0x0
  • 在 NASM 中使用 istruc 时:“警告:尝试初始化 BSS 部分‘.bss’中的内存:忽略 [-w+other]”

    在搜索这个错误时我发现this https stackoverflow com questions 65731514 nasm attempt to initialize memory in bss section 77001709问题 但
  • 分配内存空间的宏

    我需要让一个汇编程序员来计算帕斯卡三角形 https en wikipedia org wiki Pascal 27s triangle 这样帕斯卡三角形的每一行都与其他行分开存储在内存中 我想做一个 但我不知道如何使用宏在汇编中做到这一点
  • 弹出 x86 堆栈以访问函数 arg 时出现分段错误

    我正在尝试链接 x86 程序集和 C 我的C程序 extern int plus 10 int include

随机推荐

  • 升级Struts2.5后使用DMI动态方法调用遇到问题

    转自 http www lvhongqiang com blog429 html 问题 升级Struts2 5后使用DMI动态方法调用报错 method 找不到 源码 struts xml
  • std:forward 完美转发

    概述 TEMPLATE CLASS identity template
  • leetcode214. 最短回文串

    给定一个字符串 s 你可以通过在字符串前面添加字符将其转换为回文串 找到并返回可以用这种方式转换的最短回文串 示例 1 输入 s aacecaaa 输出 aaacecaaa 示例 2 输入 s abcd 输出 dcbabcd 提示 0 lt
  • Linux脚本- 执行当前文件下前500个.c文件,并将每个文件对应的执行结果重定向到同名的.ok文件中

    需求 执行当前文件下前500个 c文件 并将每个文件对应的执行结果重定向到同名的 ok文件中 以下是一个用于实现该功能的 Bash 脚本 bin bash 计数器 用于限制处理的文件数量 counter 0 遍历当前目录下的所有 c 文件
  • ChatGPT到底怎么用?

    ChatGPT简介 ChatGPT Chat Generative Pre trained Transformer 全称为生成型预训练变换模型 由美国 OpenAI团队研发 现如今的ChatGPT不仅可以根据聊天上下文进行交互 还可以进行文
  • nodejs之express(二)get和post请求

    获取请求中的参数 nodejs的 express框架 提供了四种方法来实现 req body 解析body不是nodejs默认提供的 需要载入body parser中间件才可以使用req body 此方法通常用来解析POST请求中的数据 2
  • Hadoop3.1.3 集群环境搭建

    Hadoop3 1 3 集群环境搭建 1 集群环境配置 主机名 HDFS YARN IP地址 说明 hadoop0 DataNode NameNode NodeManager 192 168 108 10 主节点 master hadoop
  • 在Ubuntu 18.04系统上安装Jenkins

    该教程只介绍如何在Ubuntu系统上安装Jenkins 想要了解的更多 请访问Jenkins官方安装教程 一 系统要求 最低推荐配置 256MB可用内存 1GB可用磁盘空间 作为一个Docker容器运行jenkins的话推荐10GB 为小团
  • xe7 安装chrome组件(CEF4Delphi)

    缘起 大屏项目需要用到chrome组件 但为了实现firemonkey的矢量和强大的图形功能 所以只能重新在xe7中安装chrome组件 碰到了一些问题 都一 一化解了 将整个过程记录下来 以供大家采用 1 下载CEF4Delphi mas
  • 第5节 实现Callable 接口

    Java 5 0 在java util concurrent 提供了一个新的创建执行 线程的方式 Callable 接口 Callable 接口类似于Runnable 两者都是为那些其实例可能被另一个线程执行的类设计的 但是 Runnabl
  • 阿里代码规范检查工具的安装使用

    阿里巴巴于 10 月 14 日在杭州云栖大会上 正式发布众所期待的 阿里巴巴 Java 开发规约 扫描插件 简单了解一下这插件 该插件由阿里巴巴 P3C 项目组研发 代码已经开源 GitHub https github com alibab
  • 【python】emoji库,增添趣味!

    今天说一下python的外置库emoji 里面提供超多表情使用 一 安装环境 emoji库使用pip接口进行安装 pip install emoji 二 了解下emoji库函数的使用 两个主要用的函数 emoji emojize 根据 co
  • python网络通信时出现乱码_解决Python发送Http请求时,中文乱码的问题

    解决方法 先encode再quote 原理 msg encode utf 8 是解决中文乱码问题 quote 假如URL的 name 或者 value 值中有 或者 等符号 就会有问题 所以URL中的参数字符串也需要把 等符号进行编码 qu
  • 注册ActiveX控件的几种方法

    使用ActiveX控件可快速实现小型的组件重用 代码共享 从而提高编程效率 降低开发成本 但是ActiveX控件对于最终用户并不能直接使用 因为ActiveX控件必须先在Windows中注册 注册ActiveX控件一般来说有六种途径 它们有
  • 请确保此文件可访问并且是一个有效的程序集或COM组件

    重装系统后 打开项目发现一个dll引用失败 于是重新添加引用 结果报错 请确保此文件可访问并且是一个有效的程序集或COM组件 报错是因为此程序集 com组件未注册而导致不能直接引用 解决方法 首先复制程序集所在的路径 如 E aaaa bb
  • Transformer 综述 & Transformers in Vision: A Survey

    声明 因本人课题只涉及图像分类和目标检测 且此综述对这两个领域调查的比较多 所以此文章只对图像分类和目标检测进行精读 若是对 中的论文感兴趣 到原论文中查阅参考文献即可 下图是综述内容涉及的计算机视觉十大领域 图像识别 目标检测 语义和实例
  • Linux命令-推荐

    大侠必备 杀进程 命令 ps ef grep java 先查java进程ID kill 9 PID 生产环境谨慎使用 kill killall pkill命令的区别 kill 通过pid来杀死进程 killall killall 参数 进程
  • JVM参数之GC日志配置

    说到 Java 虚拟机 不得不提的就是 Java 虚拟机的 GC Garbage Collection 日志 而对于 GC 日志 我们不仅要学会看懂 而且要学会如何设置对应的 GC 日志参数 为了能够更直观地显示出每个参数的作用 我们将以下
  • python case when用法_case when

    case when的表达式形式 1 简单Case函数 CASE sex WHEN 1 THEN 男 WHEN 2 THEN 女 ELSE 其他 END 2 Case搜索函数 CASE WHEN sex 1 THEN 男 WHEN sex 2
  • 【asm基础】nasm和masm的一些区别

    差异点说明 1 nasm是区分大小写的 2 nasm中访问内存需要使用 将内存地址括起来 例如 bar equ 2 mov rax bar mov rax bar 这个才是存储地址中内容的操作 3 nasm不存储类型信息 所以也不能使用MO