小编use*_*761的帖子

所有 C++ 运算符都会返回一些东西吗?

我使用过的所有 C++ 运算符都会返回一些东西,例如+运算符返回加法的结果。

是否所有 C++ 运算符都返回某些内容,或者是否有一些 C++ 运算符不返回任何内容?

c++ operators

83
推荐指数
7
解决办法
8017
查看次数

RESB,RESW,RESD,RESQ在NASM中分配多少字节?

DB 分配1个字节.

DW 分配2个字节.

DD 分配4个字节.

DQ 分配8个字节.

所以我假设:

RESB 1 分配1个字节.

RESW 1 分配2个字节.

RESD 1 分配4个字节.

RESQ 1 分配8个字节.

我对么?


文件并没有太多发言权:

3.2.2 RESB和朋友:声明未初始化的数据

RESB,RESW,RESD,RESQ,REST,RESO,RESY和RESZ设计用于模块的BSS部分:它们声明未初始化的存储空间.每个操作数采用一个操作数,即字节数,字数,双字数或任何要保留的值.如2.2.7节所述,NASM不支持通过编写DW来保留未初始化空间的MASM/TASM语法?或类似的东西:这就是它的作用.RESB类型伪指令的操作数是一个关键表达式:参见3.8节.

例如:

缓冲区:resb 64; 保留64个字节

wordvar:resw 1; 保留一个字

realarray resq 10; 十个实际的阵列

ymmval:resy 1; 一个YMM注册

zmmvals:resz 32; 32个ZMM寄存器

x86 assembly nasm

7
推荐指数
1
解决办法
2万
查看次数

指令可以同时处于两种寻址模式吗?

我在" 从头开始编程 "一书中已经阅读了以下内容:

处理器有许多不同的访问数据的方式,称为寻址模式.最简单的模式是立即模式,其中要访问的数据嵌入在指令本身中.例如,如果我们想要将寄存器初始化为0,而不是给计算机一个地址来读取0,我们将指定立即模式,并给它数字0.

寄存器寻址模式中,指令包含要访问的寄存器,而不是存储器位置.其余模式将处理地址.

这是否意味着例如指令mov eax, 123处于立即模式寄存器寻址模式

x86 assembly addressing-mode

5
推荐指数
1
解决办法
234
查看次数

什么是CRT的C++等价物?

我是C++的新手,但之前我曾与C合作过.

用C编写的程序必须与libcmt.lib包含C函数的CRT(在Windows中,它是文件)链接(例如:)printf().

但我想知道,有没有"C++ RT"(与CRT相对),我的意思是C++函数和类(例如std::ofstream:)存储在哪里.

我有另一个问题,如果我使用了一些C函数(例如:) printf(),我的C++程序是否会与CRT和"C++ RT"链接,或者"C++ RT"是否包含CRT?

c c++ windows

3
推荐指数
1
解决办法
2092
查看次数

使用`esp*scale 时寻址内存时出错

内存寻址的一般形式(在这里找到)是:

[base + index*scale + disp]
Run Code Online (Sandbox Code Playgroud)

当我尝试汇编/编译以下代码时:

mov eax, [ebx + esp*4 + 2]
Run Code Online (Sandbox Code Playgroud)

NASM 给出以下错误:“错误:无效的有效地址”

但以下工作正常:

 mov eax, [ebx + esp + 2]
Run Code Online (Sandbox Code Playgroud)

以下也可以正常工作:

mov eax, [ebx + ecx*4 + 2]
Run Code Online (Sandbox Code Playgroud)

所以看起来使用scalewithesp作为索引寄存器会导致错误。

我对么?我在哪里可以阅读更多相关信息(英特尔手册除外,长达 4000 多页!)。

x86 assembly nasm

1
推荐指数
1
解决办法
867
查看次数

标签 统计

assembly ×3

x86 ×3

c++ ×2

nasm ×2

addressing-mode ×1

c ×1

operators ×1

windows ×1