标签: intel

在基于Intel的系统上,C++使用的浮点数的二进制格式是什么?

我有兴趣了解C++在基于Intel的系统上使用的单一或双重类型的二进制格式.

在数据需要由另一个系统(即文件或网络)读取或写入的情况下,我避免使用浮点数.我确实意识到我可以使用定点数,而且这个定点更准确,但我有兴趣了解浮点格式.

c++ floating-point binary intel

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

Intel x86汇编代码行为问题

我有一个英特尔汇编x86(16位版本)汇编代码如下所示打印邮件很好.使用扁平汇编程序在Win-7 32位上进行汇编.

ORG 100h
USE16

        mov ah, 09
        mov dx, message
        jmp  Displayit  ;unconditional jump

        mov ah,01
        int 21h

        mov ah,4ch
        int 21h

Displayit:
        int 21h

message db 'Testing assembly jump instruction', 0Ah, '$'
Run Code Online (Sandbox Code Playgroud)
  1. 如果我移动消息的字符串定义(在下面的代码中),在开头,它不会打印该字符串?是什么原因?

  2. 此外,虽然我有mov ah, 01, int 21h保持输出命令提示符/控制台关闭的指令,但它不起作用.控制台刚关闭,然后才能看到打印的消息?

.

ORG 100h
USE16
message db 'Testing assembly jump instruction', 0Ah, '$'

mov ah, 09
mov dx, message
jmp  Displayit  ;unconditional jump

mov ah,01
int 21h
mov ah,4ch
int 21h

Displayit:
    int 21h
Run Code Online (Sandbox Code Playgroud)

assembly intel

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

这个汇编代码有什么问题,有条件的jmp

在下面的intel汇编代码中,我在条件跳转之前使用cmp(compare)指令,但对于下面的代码,它不应该跳转但是它会打印字符串.

出了什么问题.(Flat assembler,Win-7 x32).

ORG 100h
USE16


        mov ah, 09
        mov dx, message
        cmp ah, 10d
        je condjmp


condjmp:
        int 21h

        mov ah,01
        int 21h

        mov ah,4ch
        int 21h

 message db 'conditional jump', 0Ah, '$'
Run Code Online (Sandbox Code Playgroud)

assembly intel

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

如何在Assembly中的XOR语句中指定3字节存储的大小?

在我的IA-32处理器Linux程序集中,我有两个存储空间.

inbuf: resb 3
outbuf: resb 4
Run Code Online (Sandbox Code Playgroud)

inbuf真的只需要3个字节,我不想浪费任何内存.现在,假设我想用这样的零覆盖它们:

xor [inbuf], inbuf
xor [outbuf], outbuf
Run Code Online (Sandbox Code Playgroud)

nasm说我需要指定操作大小,这是可以理解的.现在outbuf这个没问题,因为我可以写

xor dword [outbuf], outbuf
Run Code Online (Sandbox Code Playgroud)

相反,但显然,任意大小的大小关键字都不是3字节.我该如何指定大小inbuf

我不是真的在寻找一个用零覆盖存储的解决方案,我猜其他的工作也一样,但这也解决了我的问题如何使用像

mov eax, inbuf
Run Code Online (Sandbox Code Playgroud)

没有得到"未指定大小"错误.

x86 assembly intel nasm

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

奔腾III CPU如何处理来自同一组的多个指令前缀?

英特尔x86规范规定,使用同一组中的多个指令前缀会导致未定义的行为.实际上,Pentium III Coppermine CPU在这种情况下是如何做出反应的?可悲的是,我没有芯片可以测试.

x86 assembly intel x86-emulation

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

英特尔SGX开发的老一代英特尔处理器

是否可以在老一代英特尔处理器上进行英特尔SGX开发,该处理器在某些仿真环境中没有SGX支持?

我尝试安装正确安装但无法安装SGX PSW的SGX SDK,因为支持英特尔SGX处理器是一项艰难的要求.

https://software.intel.com/en-us/documentation/sgx-sdk-installation/platform-software-installation

我想开发和学习简单的SGX应用程序.

c++ intel sgx

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

汇编testq和cmovg指令

以下是做什么的?

testq   %rdx, %rdx
cmovg   %rcx, %rax
Run Code Online (Sandbox Code Playgroud)

我知道testq是两个寄存器之间的按位,但它如何与标志一起工作?这将在c中转化为什么?例如,如果%rdx将持有价值0x01,那么我们就会有0x01&0x01= 0x01,这将设置

ZF = 0, SF = 0, OF = 0.
Run Code Online (Sandbox Code Playgroud)

而且,如果我能找到cmovg

˜(SF ˆ OF) & ˜ZF
Run Code Online (Sandbox Code Playgroud)

哪个会解决

˜(0 ˆ 0) & ˜0 = ˜(0) & ˜0 = 1 & 1 = 1.
Run Code Online (Sandbox Code Playgroud)

这是否意味着将执行cmovg并且相应的c代码将表现为d = %rdx,a = rax并且c = rcx:

 if(d > 0){
   a = c;
 }
Run Code Online (Sandbox Code Playgroud)

或者有人可以换句话说这个吗?

另外,我一直在尝试使用这个程序集将其转换为相应的c代码.目前我得到的结果最终像testq%rdx上的无限while循环,%rdx与jne .L4.随着上面的内容被封闭.谁知道正确的解决方案是什么?我目前的解决方案是:

p:
        movq    (%rdi), %rdx
        testq   %rdx, %rdx
        je …
Run Code Online (Sandbox Code Playgroud)

c x86 assembly x86-64 intel

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

linux中的汇编代码产生了多少延迟

在装配中经历了这个链接延迟,以增加装配延迟.我想通过添加不同的延迟值来执行一些实验.

生成延迟的有用代码

; start delay

mov bp, 43690
mov si, 43690
delay2:
dec bp
nop
jnz delay2
dec si
cmp si,0    
jnz delay2
; end delay
Run Code Online (Sandbox Code Playgroud)

我从代码中理解的是,延迟与执行nop指令所花费的时间成比例(43690x43690).所以在不同系统和不同版本的操作系统中,延迟会有所不同.我对吗?

任何人都可以向我解释如何计算nsec的延迟量,下面的汇编代码正在生成,以便我可以结束我在实验设置中添加的延迟的实验?

这是我用来生成延迟而不理解使用43690值的逻辑的代码(我在原始源代码中只对一个循环使用了一个循环).为了产生不同的延迟(不知道它的值),我只改变了数字43690到403690或其他值.

32位操作系统中的代码

movl  $43690, %esi   ; ---> if I vary this 4003690 then delay value ??
.delay2:
    dec %esi
    nop
    jnz .delay2
Run Code Online (Sandbox Code Playgroud)

这个汇编代码会产生多少延迟?

如果我想在microsec中生成100nsec或1000nsec或任何其他延迟,那么我需要在寄存器中加载什么初始值?

我使用的是ubuntu 16.04(32位和64位),Intel(R)Core(TM)i5-7200U CPU @ 2.50GHz和Core-i3 CPU 3470 @ 3.20GHz处理器.

先感谢您.

linux x86 assembly intel delay

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

使用rdtsc对intel进行汇编器基准测试给出了奇怪的答案,为什么?

前一段时间,我问了一个关于堆栈溢出的问题,并展示了如何在C++中执行rdtsc操作码.我最近使用rdtsc创建了一个基准函数,如下所示:

inline unsigned long long rdtsc() {
  unsigned int lo, hi;
  asm volatile (
     "cpuid \n"
     "rdtsc" 
   : "=a"(lo), "=d"(hi) /* outputs */
   : "a"(0)             /* inputs */
   : "%ebx", "%ecx");     /* clobbers*/
  return ((unsigned long long)lo) | (((unsigned long long)hi) << 32);
}

typedef uint64_t (*FuncOneInt)(uint32_t n);
/**
     time a function that takes an integer parameter and returns a 64 bit number
     Since this is capable of timing in clock cycles, we won't have to do it a
     huge …
Run Code Online (Sandbox Code Playgroud)

x86 assembly intel microbenchmark rdtsc

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

x86乘法3:3:IMUL vs SHL + ADD

我在x86-64汇编中开发了一个程序,该程序需要通过相同的操作进行多次迭代:

IMUL rdx, 3   # rdx is always different
Run Code Online (Sandbox Code Playgroud)

但是,我需要使运行时更快,因此我从上面想到了对该特定行的优化:

MOV rcx, rdx
SHL rdx, 1
ADD rdx, rcx
Run Code Online (Sandbox Code Playgroud)

现在我问你们:这种修改会改善程序的运行时间(减少时钟),还是我应该坚持使用该IMUL命令?

x86 assembly x86-64 intel micro-optimization

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