2011-12-20 34 views
6

Giả sử tôi muốn đặt hai thanh ghi 32 bit EAX làm từ 32 bit thấp và EDX làm từ 32 bit cao vào RAX. Tôi có tìm thấy một cách:Cách di chuyển hai thanh ghi 32 bit vào một bit 64 bit?

shl rdx, 32 
    or rax, rdx 

Phương pháp này chỉ hoạt động nếu chúng tôi chắc chắn rằng bit 32-61 của RAX là 0. Nếu chúng ta không shure rằng, so với lần đầu tiên chúng ta phải rõ ràng từ 32 bit cao , như:

mov eax, eax  //This instruction should clear the high 32 bit word of RAX 

Đây có phải là cách ngắn nhất không?

Có lệnh asm x86-64 nào thực hiện thao tác này không?

+1

AFAIK không có gì ngắn hơn. Nếu thanh ghi đích là bộ kiểm tra xmm, bạn có thể sử dụng hai lệnh 'pinsd' và tránh lệnh xóa. – hirschhornsalz

+0

@drhirsch: Tôi đã kiểm tra hầu như tất cả tài liệu của Intel và tôi không tìm thấy bất kỳ điều gì hữu ích. :) –

+0

Vâng, bạn có thể tiết kiệm một chút không gian với một "xor eax, eax" để xóa nó, nhưng điều đó có vẻ ngắn gọn như nó có thể được. –

Trả lời

12

Có lẽ đây là một chút tốt hơn:

shl  rax,32 
shrd rax,rdx,32 

Không giả dwords mà cao là zero.

+1

Đó là sự kết hợp mà tôi đang tìm kiếm. Tôi biết nó phải là một 'shrd' hoặc' shld' – hirschhornsalz

Các vấn đề liên quan