首页 文章
  • 2 votes
     answers
     views

    x86汇编寄存器和mov指令,以及跳转偏移量

    我刚才有一个问题,我似乎找不到合适的答案 .我给了这个代码: 0020 mov eax, [ebp+0x0c]; value inside = 0x000000ff 0023 mov cl, [ebp+ox08]; value inside- 0x82 0026 cmp al, cl 0028 jl label ;label is at address 003c, jl...
  • 2 votes
     answers
     views

    AMD有不同的CPU寄存器吗? “rax”与“eax”有什么不同? [重复]

    这个问题在这里已有答案: What do the E and R prefixes stand for in the names of Intel 32-bit and 64-bit registers? 1回答 我正在读“黑客:剥削的艺术” . 在书中,寄存器与我在电脑上看到的寄存器不同 . 这些是我的cpu寄存器: rax,rbx,rcx,rdx,rsi,rdi,rbp,rsp,r8,r9...
  • -1 votes
     answers
     views

    如何扭转movl的影响

    因此,当调用movl(在intel x84-64机器代码中)并且具有寄存器作为目标时,它将寄存器的高阶字节设置为0.那么我如何使用movl指令使得我保留原始值登记册?在这种情况下,我们不能将rsi / rdi用于movl指令(仅限esi和edi) . 例如,如果我去 movq %rsp, %rax 然后打电话 movl %eax, %edx 有没有办法在movl之后调用movl /做一些事情,...
  • 3 votes
     answers
     views

    使用ES寄存器会出错

    我正在将程序从EMU8086环境转换为NASM . 组装NASM时会出现以下错误: system \ kernel.asm:14:错误:操作码和操作数system \ kernel.asm的无效组合:20:错误:操作码和操作数system \ kernel.asm的无效组合:28:错误:操作码和操作数的无效组合 我的代码是: jmp start ;===================...
  • -3 votes
     answers
     views

    操作系统陷阱:导致寻址错误的原因是什么?

    为特定进程分配逻辑内存空间后,使用 base register 和 limit register 强制保护该空间 . 为了防止在进程的分配存储空间之外访问存储器,CPU硬件将每个请求的存储器地址与这些寄存器进行比较 . 如果满足以下两个条件之一,则会发生操作系统陷阱: 目标地址小于基址寄存器 . 目标地址大于或等于限制寄存器 . 可以在下面的 Figure 7.2 中直观地观察到该逻辑...
  • 0 votes
     answers
     views

    在ASM中为cmpxchg16b设置寄存器

    我正在尝试使用lock cmpxchg16b指令进行原子比较并交换C中的外部函数 . 对函数的调用有3个128位对象,其中我要比较前2个,并替换为第3个他们应该相互平等 . 这些是我收集的参数: rdi:旧状态 rsi:cur状态 rdx:mod状态 现在,我想要做的是将rdi(不应该有下半部分?)加载到rax中,并将此状态的后半部分加载到rdx中 . (rdi 8 ??) 如果我在那里做的是正...
  • 0 votes
     answers
     views

    用于寄存器的VHDL代码,用于二进制乘法电路

    我在二进制乘法电路中为寄存器(制作移位寄存器电路)编写了一段VHDL代码 . 一旦我在Quartus II中对它进行了分析,就会显示几个语法错误 . 这是我的代码: ENTITY memory IS PORT (can_load, can_shift, can_ad, sb_input, ab_input, UserInput : IN BIT; Out_Bit, Z : OUT ...
  • 2 votes
     answers
     views

    如何确定寄存器是从右到左加载,反之亦然

    在查看gdb输出并查看汇编调用时,通常我可以找到一个使用硬编码值的命令来确定寄存器是从右到左加载,反之亦然 . 通常类似于以下内容: sub rsp, 16 要么 sub 16, rsp 但有时候,没有像上面这样的值可见 . 我所看到的只是如下调用: (gdb) disassemble Dump of assembler code for function main: 0x...
  • 1 votes
     answers
     views

    从x86中的寄存器加载值所花费的时间

    我目前正在从书 Art of Intel x86 Assembly 学习x86 . 在它讨论不同指令类和操作码如何工作的部分中,它表示一个字节操作码被编码为 iiirrmmm ,其中三个 i 表示指令类, rr 表示4个主寄存器, mmm 可以表示多个值可选的2字节内存操作数,形式为 AX , [AX] , [AX+XXXX] 等 . 例如, 101 对应 [XXXX+BX] , 100 对应 [...
  • 0 votes
     answers
     views

    指令寄存器Motorola 68k

    你好我想知道摩托罗拉68k的程序计数器是如何增加的,因为Mc68k指令是长度可变的 . 那么指令寄存器的长度是多少?指令寄存器如何保存长度可变指令?
  • 0 votes
     answers
     views

    x86寄存器:MBR / MDR和指令寄存器

    根据我的阅读,IA-32架构有10个32位和6个16位寄存器 . 32位寄存器如下: 数据寄存器 - EAX,EBX,ECX,EDX 指针寄存器 - EIP,ESP,EBP 索引寄存器 - ESI,EDI 控制寄存器 - EFLAG(EIP也被归类为控制寄存器) 16位寄存器如下: 代码段:它包含要执行的所有指令 . 数据段:它包含数据,常量和工作区域 . ...
  • 1 votes
     answers
     views

    C汇编代码编译干扰 - 执行发生变化

    我在汇编中编写了一些代码,并在linux-64bit下运行的c / g代码中使用它(gcc版本4.4.1 [gcc-4_4-branch revision 150839](SUSE Linux)) . 汇编代码运行完美无缺,但是周围的c代码提供了不同的结果(没有崩溃,只有4倍慢和略微不同的计算结果),这取决于汇编代码的实现/省略(即减少的代码片段) . 我删除了所有多余的东西,下面的代码片段就是现...
  • 7 votes
     answers
     views

    快速,初学的MASM注册问题 - DX:AX

    我目前正在学习x86组装的考试 . 我没有太多的运气谷歌搜索“:”,太常见的标点符号:/ IDIV - 有符号整数除法用法:IDIV src修改标志:(AF,CF,OF,PF,SF,ZF未定义)累加器的有符号二进制除法 . 如果source是字节值,则AX除以“src”,商存储在AL中,余数存储在AH中 . 如果source是一个字值,则DX:AX除以“src”,并且商存储在AL中,余数存储在...
  • 4 votes
     answers
     views

    增加CUDA中每个线程寄存器的使用

    通常建议降低每线程寄存器压力以增加经线占用率,从而通过经线级多线程(TLP)提供更大的隐藏延迟的机会 . 为了降低寄存器压力,可以使用更多的每线程本地存储器或每个线程块共享存储器 . CUDA nvcc编译器也可以强制每个线程使用更少的寄存器 . 该方法对于具有良好算术延迟的工作负载是有用的,即ALU操作与存储器r / w访问请求的比率高 . 但是,对于延迟关键的应用程序,如果计算量很少且内存访...
  • 0 votes
     answers
     views

    Verilog Reg / Wire混乱

    我在Verilog中创建了一个由Datapath和Control组成的多周期CPU . 控制(状态机)的输出是寄存器,但数据路径之间的连接是电线 . 如果应该有线信号(在伪代码中): wire = OR(wire coming from a mux, reg output from control) ,我该怎么做?你可以在Verilog中使用带有reg的电线吗?如果没有,是否有更好的方法来实现这一...
  • 19 votes
     answers
     views

    在MIPS中,HI和LO是什么

    我正在阅读MIPS中的分区,我发现了div 将$ s除以$ t并将商存储在$ LO中,余数存入$ HI http://www.mrc.uidaho.edu/mrc/people/jff/digital/MIPSir.html 维基百科说 HI和LO用于访问乘法器/除法器结果,由mfhi(从高位移动)和mflo命令访问 . http://en.wikipedia.org/wiki/MIPS_...
  • 2 votes
     answers
     views

    GCC生成的asm ::我在哪里分配给该寄存器? [重复]

    可能重复:当汇编代码使用%eax和%edx时,不确定为什么我们添加寄存器%rdx和%rax 所有 . 所以,这是我的最小程序: int main(int argc, char * argv[]){ volatile int a; volatile int b; volatile int c; a = 9; b = 15; c = a+b; ...
  • 150 votes
     answers
     views

    如何在GDB中打印寄存器值?

    如何打印 %eax 和 %ebp 的值? (gdb) p $eax $1 = void
  • 16 votes
     answers
     views

    为什么CPU注册快速访问?

    寄存器变量是一种众所周知的快速访问方式( register int i ) . 但为什么寄存器位于层次结构的顶层(寄存器,缓存,主存储器,辅助存储器)?访问寄存器如此之快的所有事情是什么?
  • 1 votes
     answers
     views

    错误:错误的寄存器名称'%rax'MinGW,Windows 7,x64 CPU,C

    在我上一个主题中:How to read registers: RAX, RBX, RCX, RDX, RSP. RBP, RSI, RDI in C or C++?我问过阅读这些寄存器 . 现在我写了一个代码来阅读(仅用于现在)RAX和RBX . 我使用Windows 7 64位操作系统,CodeBlocks与MinGW作为编译器,我正在使用x64 CPU . 当我尝试编译下面的代码时,我得到了...
  • 89 votes
     answers
     views

    为什么32位寄存器上的x86-64指令归零整个64位寄存器的上半部分?

    在x86-64 Tour of Intel Manuals中,我读到了 也许最令人惊讶的事实是,诸如MOV EAX,EBX之类的指令会自动将RAX寄存器的高32位归零 . 同一来源引用的英特尔文档(3.4.1.1 64位手动基本架构中的通用寄存器)告诉我们: 64位操作数在目标通用寄存器中生成64位结果 . 32位操作数生成32位结果,在目标通用寄存器中零扩展为64位结果 . 8位和16...
  • 7 votes
     answers
     views

    汇编寄存器初学者

    所以我最近一直在进行一些集会,我是初学者,所以我想知道是否有人可以澄清一些事情 . 我认为每个进程都有自己的寄存器集,每个线程都可以修改这些寄存器吗?那么多个线程如何使用相同的寄存器而不会引起冲突?或者每个线程都有自己的寄存器集?
  • 1 votes
     answers
     views

    汇编:使用两个32位寄存器中的值进行除法,就像它们是一个64位整数一样

    我有一个64位整数,我需要在汇编中打印,但我正在使用32位机器,所以我将64位整数存储在两个32位寄存器中 . 整数的高位部分存储在%edx中,低部分存储在%eax中 . 我知道如何打印32位整数没问题,只需连续除以10并打印余数 . 我也知道如何将我的64位数乘以32位 . 但是杀死我的是分裂: 从我收集的内容来看,我认为我必须将每个寄存器%edx和%eax除以10,并以某种方式将两个答案组合起...
  • 0 votes
     answers
     views

    使用寄存器作为DB的参数(MASM)

    我有一个整数存储在寄存器 edx 中,包含0到255(0x00到0xFF)的随机值,我想将其值用作 db 的参数 . db edx 但是,当我尝试这样做时,我得到错误A2138说"invalid data initializer" . 要明确一个命令就好 db 57 确实有效,而不是之前显示的那个 . 所以我想我问的问题是如何使用寄存器作为 db 命令的参数? 感谢您的时间...
  • 0 votes
     answers
     views

    管道处理器与单周期处理器

    我必须使用DLX管道和单周期处理器来比较以下代码的执行速度(见图) . 鉴于:单周期模型中的指令需要800 ps管道模型中的一个阶段需要200 ps(基于MA) 我的方法如下 . CPU时间= CPI * CC * IC单周期:CPU时间= 1 * 800 ps * 10 instr . = 8000 ps . 管道:CPI = 21个周期/ 10个内容 . =每条指令2.1个周期CPU时间...
  • 28 votes
     answers
     views

    AX,AH,AL如何映射到EAX?

    我对x86寄存器的理解表明,每个寄存器都可以被整个32位代码访问,并且可以分成多个可访问的寄存器 . 在这个例子中 EAX 是一个32位寄存器,如果我们调用 AX 它应该返回前16位,如果我们调用 AH 或 AL ,它应该返回16位后的下一个8位, AL 应该返回最后8位 . 所以我的问题,因为我不相信这是它的运作方式 . 如果我们存储32位值,也就是 EAX 存储: 0000 0100 0000...
  • 3 votes
     answers
     views

    如何确定近指针的隐式段寄存器?

    在Intel 64® and IA-32 Architectures Software Developer's Manual. Volume 1: Basic Architecture的第4.3节中,它说: 近指针是段内的32位偏移量 . 近指针用于平面存储器模型中的所有存储器引用,或用于分段模型中的引用,其中暗示了被访问的段的标识 . 这让我想知道:隐含的段寄存器是如何确定的? 我知道 (%...

热门问题