当前位置: 首页 > 知识库问答 >
问题:

内存地址-dos程序集x86

宋高寒
2023-03-14

这是一个用于x86处理器的简单dos汇编程序。这是一个简单的helloworld程序。

我不明白的是图像中下面的连续内存地址。程序似乎从十六进制中的地址0100开始,即256。下一个地址是258。差异似乎是2个字节。是不是这样指令(操作码地址)是2个字节?

然后再往下-mov dx指令似乎占用3个字节(0117-011A),而mov ah指令占用2个字节

我以为指令(操作码地址)应该在内存中占用相同数量的字节。但显然我没有正确理解这一点

共有1个答案

王俊楚
2023-03-14

是的,x86是一种可变机器代码大小的架构。命令的大小可能从1字节到10多个不等,解码规则相当复杂。

这里介绍x86编码/解码。有关详尽的参考资料,请参阅《英特尔软件开发人员手册》,尽管它重点介绍32位和64位模式

 类似资料:
  • 1. 内存与地址 图 17.1. 邮箱的地址 我们都见过像这样挂在墙上的很多个邮箱,每个邮箱有一个房间编号,根据房间编号找到相应的邮箱投入信件或取出信件。内存与此类似,每个内存单元有一个地址(Address),内存地址是从0开始编号的整数,CPU通过地址找到相应的内存单元,取其中的指令或者读写其中的数据。与邮箱不同的是,一个地址所对应的内存单元不能存很多东西,只能存一个字节,以前讲过的int、fl

  • 我正在研究32位NDK项目向64位的迁移。我们在项目中调用了这么多库:比如-libssl.so、libcrypto.so、libc.so、liblog.so、libcrashlytics.so 在这个项目中,我将通过fopen读取内核进程,但不知怎的,我得到了致命的信号错误和Android logcat,如下所示 A/libc:tid 12462(eradocs.android)中的致命信号11(

  • 问题内容: 这是关于Linux中的C语言。 我在其中创建2个子进程。然后,在两个子进程中都运行一个函数,其中有一个局部变量。我在其中写一些价值。然后,我用打印此变量的地址。 这两个过程都打印相同的地址。我以为每个孩子都会得到父母记忆的(独立)副本。我需要每个进程都有自己的变量。我该怎么办或我做错了什么? 问题答案: 您需要了解,物理内存与进程的虚拟地址空间之间存在脱节。 每个进程都有 自己的 4G

  • 问题内容: 我正在尝试调试使用很多指针的二进制文件。有时为了快速查看输出以找出错误,我打印了对象的地址及其对应的值,但是对象地址是随机的,这违背了快速检查的目的。有没有一种方法可以暂时/永久禁用此功能,以便每次运行程序时都获得相同的值。 哎呀。操作系统是 问题答案: 在Ubuntu上,可以使用…禁用它。 在Windows上,这篇文章可能会有所帮助… http://blog.didiersteven

  • 问题内容: 关于Swift如何管理内存地址我有些不了解 1.参考类型 这里和是指向 相同存储位置的 2个指针。 好。 2.值类型 现在和现在都涉及到该机制。 […]但是,Swift仅在绝对必要时才在幕后执行实际复制。Swift会管理所有值复制以确保最佳性能,因此,您不应避免分配以试图抢占该优化。https://developer.apple.com/library/ios/documentatio

  • 金山云天津机房 tj-eco-vision.api.xiaomi.net