我使用过的所有 C++ 运算符都会返回一些东西,例如+运算符返回加法的结果。
是否所有 C++ 运算符都返回某些内容,或者是否有一些 C++ 运算符不返回任何内容?
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寄存器
我在" 从头开始编程 "一书中已经阅读了以下内容:
处理器有许多不同的访问数据的方式,称为寻址模式.最简单的模式是立即模式,其中要访问的数据嵌入在指令本身中.例如,如果我们想要将寄存器初始化为0,而不是给计算机一个地址来读取0,我们将指定立即模式,并给它数字0.
在寄存器寻址模式中,指令包含要访问的寄存器,而不是存储器位置.其余模式将处理地址.
这是否意味着例如指令mov eax, 123处于立即模式和 寄存器寻址模式?
我是C++的新手,但之前我曾与C合作过.
用C编写的程序必须与libcmt.lib包含C函数的CRT(在Windows中,它是文件)链接(例如:)printf().
但我想知道,有没有"C++ RT"(与CRT相对),我的意思是C++函数和类(例如std::ofstream:)存储在哪里.
我有另一个问题,如果我使用了一些C函数(例如:) printf(),我的C++程序是否会与CRT和"C++ RT"链接,或者"C++ RT"是否包含CRT?
内存寻址的一般形式(在这里找到)是:
[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 多页!)。