以下程序是0.11 Linux中的一段嵌入式汇编代码
#define __set_tssldt_desc(n, addr, type) \
__asm__ ("movw $104, %1\n\t" \
"movw %%ax, %2\n\t" \
"rorl $16, %%eax\n\t" \
"movb %%al, %3\n\t" \
"movb $"type ", %4\n\t" \
"movb $0x00, %5\n\t" \
"movb %%ah, %6\n\t" \
"rorl $16, %%eax" \
:
:"a"(addr), "m"(*(n)), "m"(*(n+2)), "m"(*(n+4)), \
"m"(*(n+5)), "m"(*(n+6)), "m"(*(n+7)) \
)
我在用bochs 2.1.1版本debug的过程中,看到这段代码对应的实际执行的机器码及其反汇编代码如下:
000072c4: ( ): mov dword ptr ss:[ebp+0xfffffffc], 0x1847c ; c745fc7c840100
000072cb: ( ): mov eax, dword ptr ss:[ebp+0xfffffffc] ; 8b45fc
000072ce: ( ): opsize mov word ptr [ds:0x5cd8],