cpu-registers相关内容
我知道无符号Long存储在eax/edX中,但我想知道如何才能知道执行一条rdtsc指令需要多少个时钟周期? 编辑:这样的东西能用吗? .lobl rdtsc rdtsc: rdtsc 移动%eax,%ecx 移动%edX,%eBX rdtsc subl%ecx,%eax subl%eBX,%edX 退回 推荐答案 您的代码看
..
我想知道这个x86寄存器标志在DOS/Windows程序调试中的含义: 辅助进位(AC = 1或NA = 0) 它与公共进位的含义相同吗?(CY = 1或NC = 0) 推荐答案 当指令导致进位或借出位3时,设置辅助进位标志。与CY的概念相同,只是用于字节中的低位半字节的高位。缩写AC是旧式,该标志在英特尔处理器手册中命名为“AF”,是“调整标志”的缩写。它被少数执行BCD
..
我只是想验证CPU本身是否支持“寄存器”名称。我是说阿格0阿格特2..。ETC在“名字”的末尾。CPU也支持名字吗?!我不是问寄存器本身,我是问CPU是否支持它可以操作的寄存器的名称? 推荐答案 名字是一种神奇的东西,而不是物理上的 这就是重点。名字纯粹是我们人类阅读的。CPU完全没有名称的概念。它们唯一处理的是数字。字符是数字,地址是数字,指令是数字……寄存器也是如此,它们也只
..
我对计算机组织和系统非常陌生,所以如果我说错了什么,我提前道歉。 我正在学习MIPS架构,我有一大堆关于内存和寻址的问题:
..
解决方案手册中的答案对于这个位域提取问题似乎是错误的。我的问题发布在下面。 以下是设置: 提出的问题是: 查找最短的MIPS指令序列,以提取 常量值i=22和j=5的$t0中的字段,并将该字段放入$t1 采用数据表中显示的格式。 解决方案手册给出了以下答案: lui $t1, 0x003f ori $t1, $t0, 0xffe0 and $t1, $t0, $t1 sr
..
在我的计算机组织课程中,我遇到了这些基本的MIPS说明: lw $to, AddrConstant4($s1) //&t0 = constant 4 add $s3, $s3, St0 //$s3 = $s3 + $t0 ($t0 == 4) 我的老师说$s1是一个寄存器地址,常量4存储在内存中。 在我看来,内存地址和寄存器地址似乎断开了连接。 我想
..
查看各种MIPS引用,您可以使用通用名称或寄存器编号访问寄存器。这些语句是否有任何差异: addi $t0, $t0, 1 addi $8, $8, 1 此外, addi $4, $t3, $zero 本质上只表示$T2=$T4,对吗? 推荐答案 它们是字面上相同的,是的。如果您想要确定,请汇编并检查输出二进制文件。示例文件: .globl f f:
..
我知道寄存器变量的概念及其用例,但根据我的尝试,我的脑海中几乎没有问题. 虽然我可以在 C++ 中访问,但我无法访问 C 中的寄存器变量的地址!为什么?访问寄存器变量的地址有什么问题吗? 假设如果我在 C++ 中将一个字符串变量声明为寄存器,那么该变量将存储在哪里?将C++中的'string'等非数字数据类型的存储类声明为register有什么意义? 更新:我认为 C++ 允许我
..
反汇编中有这样的代码: movl $0x6,-0x4(%rbp) 我尝试以这种方式打印值但失败: (gdb) p 0x4(%esp)表达式中的语法错误,在 `%esp)' 附近.(gdb) p 0x4+$esp算术运算的参数不是数字或布尔值. 如何正确打印? 解决方案 看起来你正在使用 64 位代码,在这种情况下你只需要,例如: (gdb) p $rbp-0x4$1 = (voi
..
在 gdb 中,我似乎无法访问任何伪寄存器:r8b、r9b、r10b、r11b、r12b、r13b、r14b 和 r15b(但是,r15d 和 r15w 似乎可以工作,sil 也一样). 看一个例子: section .text全球主要主要的:xor esi, esimov sil, 0x1f异或 r13d, r13dmov r13b, silret 使用 gdb 运行: (gdb)
..
如何打印%eax和%ebp的值? (gdb) p $eax$1 = 无效 解决方案 info registers 显示所有寄存器;info registers eax 只显示寄存器 eax.该命令可简写为i r
..
我有一个 C 和汇编代码中的开关条件代码.但在我看来,设置什么是非常随意的,edx 或 eax 或 ecx? 如何区分 edx、epx、ecx、ebp?连教科书都没有给我充分的解释. #include //枚举类型创建一组常量//编号为 0 及以上typedef enum {MODE_A, MODE_B, MODE_C, MODE_D, MODE_E} mode_t;in
..
我正在尝试按照以下步骤在我的 ARM9 (SAM9X25) 上读取和写入寄存器:http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka3750.html 我以以下代码结束: #include "stdio.h"#define PIO_WPMR_BANK_D 0xFFFFFAE4//PIO 写保护模式寄存器 Bank
..
我是汇编编程的新手,我正在为 ARM 编程.我正在制作一个包含两个子例程的程序:一个在内存中的字节向量上附加一个字节信息,一个打印这个向量.向量的第一个地址包含后面的元素数量,最多 255 个.当我使用 GDB 调试它时,我可以看到“appendbyte"子例程工作正常.但是当涉及到“printvector"时,就会出现一些问题.首先,在寄存器 r1 中加载的元素是错误的(它加载了 0,而它应该是
..
我的理解是,CPU 的简单模型是状态机. 当我查看 prolog 时,它似乎是树搜索(或图形搜索)组合,同时在约束处停止运行,直到找到它的目标. 有人告诉我,您可以在 prolog 中模拟一个简单的 CPU. 是否可以在 prolog 中像简单的 CPU 一样表示状态机模型? 解决方案 Prolog 是图灵完备的语言,因此您可以在其中表达任意计算,包括对 CPU 的模拟.
..
我用c++写了一个小程序: #include使用命名空间标准;诠释主要(){诠释 x=10;整数 y=20;cout 只是出于好奇,我想了解一个幕后的程序,所以我在玩 gdb &遇到 info registers 命令.当我在 gdb 中使用 info registers 时,我得到如下输出: (gdb) 信息寄存器拉克斯 0x400756 4196182RBX 0x0 0回复 0x6 6r
..
x86 汇编语言不得不改变,因为 x86 处理器架构已经从 8 位变为 16 位,再到 32 位和现在的 64 位. 我知道在 32 位汇编寄存器名称(EAX、EBX 等)中,每个名称的前缀 E 代表 Extended 表示寄存器的 32 位形式而不是 16 位形式(AX、BX 等).). 这些寄存器名称的 R 前缀在 64 位中代表什么? 解决方案 我认为它只是 R 代表“寄
..
Google 不显示结果, 有人知道吗? 解决方案 X 表示 pair,至少可以追溯到 8080.它有 8 位寄存器 B、C、D、E、H、L(以及其他)也可以成对使用(BC、DE 和 HL).BC 和 DE 对主要用于 16 位算术;HL 对通常持有一个内存地址.X 用于 pair 的一些示例: LXI D,12ABH ;“立即加载对"DCX B ;“递减对"STAX D ;“以对
..
我编写了一个程序,试图读取和写入控制寄存器. 程序编译正常,但是当内联汇编即将执行时,它产生了一个分段错误. 代码: void 指令(int val){国际我;整数值;for(i = 0; i 我使用 GDB 并通过每条装配线,在 mov %cr0,%eax 上发生了分段错误. 谁知道哪里出了问题? 解决方案 引用自 英特尔® 64 和 IA-32 架构软件开发人员
..
据我所知,IA-32 架构有十个 32 位寄存器和六个 16 位寄存器. 32位寄存器如下: 数据寄存器 - EAX、EBX、ECX、EDX 指针寄存器 - EIP、ESP、EBP 索引寄存器 - ESI、EDI 控制寄存器 - EFLAG(EIP 也被归类为控制寄存器) 16 位寄存器如下: 代码段:它包含要执行的所有指令. 数据段:它包含数据、常量和工作区.
..