%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,imm
或rcl r
。关于assembly - BITswap组装程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52036376/