“mov eax, [num]”和“mov eax, num”之间的区别

2024-03-26

我是一名初学者,正在编写汇编程序,使用以下代码打印从 1 到 9 的数字:

section .text    
   global _start                    
_start:                     
   mov ecx,10    
   mov eax, '1'     
l1:    
   mov [num], eax    
   mov eax, 4    
   mov ebx, 1    
   push ecx     
   mov ecx, num            
   mov edx, 1            
   int 0x80     
   mov eax, [num]    
   sub eax, '0'    
   inc eax    
   add eax, '0'    
   pop ecx    
   loop l1      
   mov eax,1             ;system call number (sys_exit)    
   int 0x80              ;call kernel    
section .bss    
num resb 1

在此,我们有以下三个说法:

  1. mov [数字], eax
  2. mov ecx , 数字
  3. mov eax, [数字]

我想知道为什么我们应该使用mov ecx,num而不是mov ecx,[num]


如果您熟悉 C/C++,这里有一个解释。

mov ecx, num相当于:

int num;
ecx = & num;

while mov ecx, [num]相当于:

int num;
ecx = num;

这里说下这条线的原因mov ecx, num是因为你正在调用系统函数int 0x80,这要求ecx包含您的号码地址。所以应该是这样的。

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

“mov eax, [num]”和“mov eax, num”之间的区别 的相关文章

  • MAC-1 汇编递归

    如何在 MAC 1 汇编器中调用递归函数 在 C 中你会做类似的事情 int func int num if num 0 return 1 return num func num 1 我知道如何使用调用函数 CALL 以及如何将参数加载到堆
  • 添加饱和 32 位有符号整数内在函数?

    有人可以推荐一种使用 Intel 内在函数 AVX SSE4 添加饱和 32 位有符号整数的快速方法吗 我查看了内在指南并发现 mm256 adds epi16但这似乎只添加 16 位整数 我没有看到 32 位有任何类似的东西 其他电话似乎
  • 为什么每次在 GDB 中构建和反汇编函数时都会得到相同的地址?

    每次反汇编函数时 为什么总是得到相同的指令地址和常量地址 例如 执行以下命令后 gcc o hello hello c ggdb gdb hello gdb disassemble main 转储代码将是 当我退出 gdb 并重新反汇编 m
  • 调用/返回/jmp等后x86代码执行?

    我希望这个问题不会太愚蠢 因为它看起来似乎很明显 当我对缓冲区溢出进行一些研究时 我偶然发现了一个简单的问题 调用 返回 跳转后转到新指令地址后 CPU是否会执行该地址处的OP代码 然后将一个字节移动到下一个地址并执行下一个OP代码 依此类
  • 使用 XCHG 解锁的自旋锁

    维基百科提供的使用 x86 XCHG 命令的自旋锁的示例实现是 Intel syntax locked The lock variable 1 locked 0 unlocked dd 0 spin lock mov eax 1 Set t
  • MS-DOS - 是否可以对 24 位图形进行编程?

    是否可以在 DOS 机器上以 24 位颜色深度进行编程 我知道 VGA 支持 8 位色深 但是有没有办法弄出 24 位色深 谷歌的研究没有发现任何结果 我正在 FreeDOS 而不是 MS DOS 上编程 如果这会影响答案的话 对的 这是可
  • int 13h 42h 不会在 Bochs 中加载任何内容

    我将引导加载程序从 CHS 更改为 LBA 因此我更换了int 13h 02h with int 13h 42h 它在 QEMU 中工作正常 但是 我在 Bochs 和我的笔记本电脑上运行它时遇到问题 我将引导加载程序写入 USB 闪存驱动
  • 是否可以调用驻留在 exe 中的非导出函数?

    我想调用驻留在第 3 方 exe 中的函数并获取其结果 好像有should是一种方法 只要我知道函数地址 调用约定等 但我不知道如何 有谁知道我会怎么做 我意识到任何解决方案都是非标准的黑客 但有must成为一种方式 我的非恶意用例 我正在
  • 段错误...关于你好世界

    这段代码非常简单 但我在 x86 64 Linux 系统上遇到了段错误 这让我很烦恼 刚开始接触asm 请耐心等待 与 NASM 组装nasm f elf64 test asm 与连接ld o test test o SECTION tex
  • 二元炸弹 - 第 6 阶段

    这是拆解phase 6 08048dbf
  • 简单内核无法在 GRUB 中启动

    我正在学习一些操作系统开发的知识OSDev org http osdev org 我有一个内核 我正在尝试使用 qemu 在 GRUB Legacy 0 97 中启动 但是 当我输入kernel 200 9 我收到消息 Multiboot
  • 如何在 MOS 6502 的 asm 中创建延迟

    我是 ASM 新手 我正在尝试研究如何为以下代码创建延迟 org 1000 loop inc d021 jmp loop 我想评论已经足够清楚了 每帧更改颜色的代码示例 1 50 秒 sei enable interrupts loop1
  • 该程序如何知道该字符串存储的确切位置?

    我用 Radare2 反汇编了一个 C 程序 在这个程序中有很多调用scanf像下面这样 0x000011fe 488d4594 lea rax var 6ch 0x00001202 4889c6 mov rsi rax 0x0000120
  • 内存映射图形输出

    我正在探索使用内存映射图形绘制像素和线条 我在 Windows 的 Textpad 中使用 TASM 当我单击 运行 时 整个屏幕变成蓝色 就是这样 没有绘制像素 model small stack data saveMode db xVa
  • 在汇编中,指令指定数据类型吗?

    我是汇编语言编程 x86 的初学者 以下说法是否正确 在汇编中 BYTE WORD DWORD 等数据类型分别表示 8 位 16 位和 32 位模式 而不仅仅是整数 它们本身没有意义 它们只是位模式 使用它们的指令赋予了它们意义 汇编 代码
  • 汇编程序中的过程调用如何工作?

    我刚刚开始摆弄 ASM 我不确定我对过程调用的理解是否正确 假设代码中的某个时刻有一个过程调用 call dword ptr 123 该过程仅包含一个命令 ret ret 0004 该过程调用的效果是什么 返回值将存储在哪里 我在某处读到
  • 就分页分段内存而言的程序寿命

    我对 x86 Linux 机器中的分段和分页过程有一个令人困惑的概念 如果有人能澄清从开始到结束所涉及的所有步骤 我们将很高兴 x86 使用分页分段内存技术进行内存管理 任何人都可以解释一下从可执行的 elf 格式文件从硬盘加载到主内存到它
  • 函数地址不是实际代码地址

    在 Visual Studio 2008 C 中调试一些代码时 我注意到函数指针变量中的地址不是函数本身的实际地址 这是一个外部 C 函数 int main void printaddr const char print debug sho
  • 在汇编中初始化字符串数组

    我想创建一个数据数组 在初始化数据部分保存 5 个字符串 每个字符串正好有 4 个字符 每个字符串都有一些初始数据 例如第一个字符串的 abcd 第二个字符串的 efgh 等等 无效的 0任何字符串都不需要字符 如何用汇编语言初始化字符串数
  • x86 asm 的 NASM 语法中的括号是什么意思?

    给出以下代码 L1 db word 0 mov al L1 mov eax L1 括号里是什么意思 L1 代表 这个问题专门针对 NASM Intel 语法汇编的另一个主要风格是 MASM 风格 当不涉及寄存器时 括号的工作方式有所不同 S

随机推荐

  • 使用 -L 添加 link_library 时,Cmake 未设置 RPATH

    按以下方式设置链接库时 target link libraries SOME TARGET L somedir lfoo cmake 不处理 RPATH 使用 L 和 l 不是最佳实践 还是实际上完全错误 创建我自己的 Find cmake
  • 是否有 PHP 的 identicon 库 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我正在寻找一个可以创建的 PHP 库 函数 类识别图标 http en wikipedia org wiki Identicons 我用这个 clas
  • 如何从本地文件夹安装/更新 powershell 模块 - 设置内部模块存储库

    我需要在一台生产机器上安装 PowerShell 模块 即 sqlserver 但是 生产服务器没有任何互联网连接 我使用的另一种方法是使用 save module 将模块文件保存到共享文件夹中 然后将文件从共享文件夹直接复制到生产服务器的
  • git ls-remote --tags:如何获取日期信息?

    我在用git ls remote tags
  • XTS 中滚动列表的时间不等

    我有报价级别的股票数据 并且想创建前 10 秒所有报价的滚动列表 下面的代码可以工作 但对于大量数据需要很长时间 我想矢量化这个过程或以其他方式使其更快 但我没有想出任何办法 任何正确方向的建议或推动将不胜感激 library quantm
  • 如何使用 systemctl systemd 启动 svnserve

    debian jessie 中的 subversion 软件包不包含 systemd 服务文件 自动启动的最简单解决方案是什么 我尝试 Unit Description Subversion protocol daemon After sy
  • C++ 中将值作为常量、引用和常量引用返回有何含义?

    我正在学习C 但我仍然对此感到困惑 在 C 中将值作为常量 引用和常量引用返回有何含义 例如 const int exampleOne int exampleTwo const int exampleThree 以下是您所有案件的内幕 通过
  • 使用委托将数据从一个 TableView 传输到另一个 TableView

    我需要从一个传输一个字符串tableview通过单击一个内的按钮到另一个UITableView 我知道如何获得indexPath通过按钮 如下所示 let button sender as MyButton let view button
  • Powerpoint 2010 多个实例

    我在这里看到了很多关于这个主题的帖子 但似乎没有一个直接回答这个问题 我想控制在第二台显示器上运行的两个 Powerpoint 实例 理想的解决方案如下所示 PowerPoint Application PPTViewer1 new Pow
  • Spring MVC 处理会话过期

    我正在与Jboss EAP 6 2 Java EE 6 and Spring MVC 4 0 2 当会话过期时 我想执行页面重定向 我开发了一个 Spring 拦截器 Component public class SessionExpire
  • 分割seeds.rb文件[重复]

    这个问题在这里已经有答案了 My seeds rb文件变得非常大 重构文件中数据的最佳方法是什么 我可以将数据放入各种文件中吗 require他们在seeds rb file 我们将所有种子存储在文件夹中db seeds并在里面db see
  • 等待异步调用在完成块内完成

    我目前正在开发一个 POC 应用程序 我之前曾在这里发布过相关内容 https stackoverflow com questions 47418653 nsurlsessiondatatask authentication challen
  • 基于 Licenses.licx 的 .Net 组件许可模型如何工作?

    我遇到过多个使用许可方案的第三方 Net 组件供应商 在评估副本上 组件会显示导航屏幕或水印或某些此类指示器 在获得许可的机器上 许可证 licx被创建 看起来是什么just程序集全名 标识符 构建客户端程序集时必须包含此文件 这个模型如何
  • 从 NOT EXISTS 转换为 NOT IN

    我有三张桌子 sailor 姓名 评级 boat 名称 颜色 等级 reservation sname bname 工作日 开始 结束 为了获得预订每艘红船的水手名单 我有 select s sname from sailor s wher
  • 从字符串中提取除方括号中的单词之外的所有单词

    我再次完全陷入创建正则表达式的困境 我有一个字符串模式 例如 str wordA wordAB xyz wordABC x 所以总有一个词后面跟有括号里的东西 或空括号 单词的长度 前导和尾随空格以及括号内的字符数是随机的 该序列重复的频率
  • 使用 SQLAlchemy 时 pandas.read_sql() 比 pyodbc 慢得多

    我正在尝试从 SQL 读取一个小表 并且正在考虑从 pyodbc 切换到 SQLAlchemy 以便能够使用 pd to sql 当我比较两者时 sql alchemy 慢得多 s py import pandas as pd import
  • 为什么 amp-video 和 amp-audio 强制对 src 使用 https?

    关于文档AMP 视频 https www ampproject org docs reference amp video html这表明 src 如果没有孩子在场 则需要 必须是 HTTPS 为什么需要这个 这是出于安全问题吗 我的视频和音
  • 将年份添加到 Java 日历不起作用

    请赐教我这一点 我只是想在当前日期上加上 10 年 然后从中减去到期日期以返回年数 public int getMaxYears int max 0 Calendar ten year later Calendar getInstance
  • Django 的 Redshift DB 后端

    我需要处理存储在 Amazon Redshift 服务器中的一些数据 由于我最熟悉 Django 因此我正在考虑在应用程序层使用它 但我不知道如何连接到 Redshift 并检索数据 我只有连接到本地 MySQL 服务器并工作的经验 所以这
  • “mov eax, [num]”和“mov eax, num”之间的区别

    我是一名初学者 正在编写汇编程序 使用以下代码打印从 1 到 9 的数字 section text global start start mov ecx 10 mov eax 1 l1 mov num eax mov eax 4 mov e