相关疑难解决方法(0)

Haswell/Skylake的部分寄存器究竟如何表现?写AL似乎对RAX有假依赖,而AH是不一致的

此循环在英特尔Conroe/Merom上每3个周期运行一次,imul按预期方式在吞吐量方面存在瓶颈.但是在Haswell/Skylake上,它每11个循环运行一次,显然是因为setnz al它依赖于最后一个循环imul.

; synthetic micro-benchmark to test partial-register renaming
    mov     ecx, 1000000000
.loop:                 ; do{
    imul    eax, eax     ; a dep chain with high latency but also high throughput
    imul    eax, eax
    imul    eax, eax

    dec     ecx          ; set ZF, independent of old ZF.  (Use sub ecx,1 on Silvermont/KNL or P4)
    setnz   al           ; ****** Does this depend on RAX as well as ZF?
    movzx   eax, al
    jnz  .loop         ; }while(ecx);
Run Code Online (Sandbox Code Playgroud)

如果setnz al …

x86 assembly intel cpu-architecture micro-optimization

30
推荐指数
2
解决办法
1537
查看次数

如何在x86汇编中将8位地址移入16位寄存器?

在这里,我试图将变量X(这是一个8位变量)移动到寄存器bx(这是一个16位寄存器).在这种情况下,如何将X的值移动到寄存器bx中?

.686p
.model flat,stdcall
.stack 2048

.data
X byte 5
ExitProcess proto, exitcode:dword
.code

start:
invoke  ExitProcess, 0

mov bx, X; 1>p4.asm(13): error A2022: instruction operands must be the same size

end start ;what does the end statement do?
Run Code Online (Sandbox Code Playgroud)

x86 assembly

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

汇编将 al 寄存器值移入 ax

我对程序集完全陌生,在搜索之后我仍然对寄存器有一些疑问。目前我正在尝试通过执行以下操作一遍又一遍地划分值:

1.将 ax 与 bl 相除(似乎余数去 ah,商去 al)

2.move al(quotient) to ax

3. 如果 ax 小于或等于 0,则跳转到 5

4.跳到1

5.结束

问题出现在指令 2 上,因为我试图将 8 位值移动到 16 位值。有人知道如何解决问题吗?

我使用的是 emu8086,所以寄存器只有 x、h 和 l。

assembly x86-16 emu8086

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