%include "asm_io.inc"
segment .data
outmsg1 db    "Input Integer: ", 0
outmsg2 db    "After Operation": ", 0

segment .bss

input1  resd 1
input2  resd 1

segment .text
    global  asm_main
asm_main:
    enter 0,0
    pusha

    mov eax, outmsg1
    call print_string
    call read_int
    call print_nl
    dump_regs 1

    rol eax, 8
    rol ax, 8
    ror eax,8
    mov ebx, 0
    mov ebx, eax
    dump_regs 2

    popa
    mov eax, 0
    leave
    ret


给定上述汇编程序,该程序将给定整数的最高字节与最低字节交换。即时通讯试图找出如何使其交换最高价值的BIT与最低价值的BIT。

我有点卡住了,也许你可以帮帮我

最佳答案

这个怎么样?输入在ecx或您喜欢的任何其他寄存器中。

                   // initial state: ECX = A...B
ror ecx            // ECX = BA..., CF = B
bt ecx, 30         // ECX = BA..., CF = A
rcl ecx, 2         // ECX = ...AB, CF = A
ror ecx            // ECX = B...A


正如彼得·科德斯(Peter Cordes)指出的那样,如果您正在优化性能,则可能需要更改如下代码:

ror ecx
bt ecx, 30
adc ecx, ecx
adc ecx, ecx
ror ecx


这是因为adc r,r在现代微体系结构上的性能优于rcl r,immrcl r

关于assembly - BITswap组装程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52036376/

10-11 16:42