当前位置: 技术问答>linux和unix
请教高人:AT&T汇编语言中把.byte .word .long的问题?
来源: 互联网 发布时间:2016-08-03
本文导语: AT&T汇编语言中把.byte .word .long放到程序当中,例如linux启动代码部分: GLOBAL(protected_mode_jump) movl %edx, %esi # Pointer to boot_params table xorl %ebx, %ebx movw %cs, %bx shll $4, %ebx addl %ebx, 2f jmp 1f # Short jump to serialize ...
AT&T汇编语言中把.byte .word .long放到程序当中,例如linux启动代码部分:
GLOBAL(protected_mode_jump)
movl %edx, %esi # Pointer to boot_params table
xorl %ebx, %ebx
movw %cs, %bx
shll $4, %ebx
addl %ebx, 2f
jmp 1f # Short jump to serialize on 386/486
1:
movw $__BOOT_DS, %cx
movw $__BOOT_TSS, %di
movl %cr0, %edx
orb $X86_CR0_PE, %dl # Protected mode
movl %edx, %cr0
# Transition to 32-bit mode
.byte 0x66, 0xea # ljmpl opcode
2: .long in_pm32 # offset
.word __BOOT_CS # segment
ENDPROC(protected_mode_jump)
问题1:.byte 0x66, 0xea # ljmpl opcode
2: .long in_pm32 # offset
.word __BOOT_CS # segment
这段代码是放到那个区当中?
问题2:按照注释.byte 0x66, 0xea是跳转指令,但是汇编器是如何区分指令和数据的?
GLOBAL(protected_mode_jump)
movl %edx, %esi # Pointer to boot_params table
xorl %ebx, %ebx
movw %cs, %bx
shll $4, %ebx
addl %ebx, 2f
jmp 1f # Short jump to serialize on 386/486
1:
movw $__BOOT_DS, %cx
movw $__BOOT_TSS, %di
movl %cr0, %edx
orb $X86_CR0_PE, %dl # Protected mode
movl %edx, %cr0
# Transition to 32-bit mode
.byte 0x66, 0xea # ljmpl opcode
2: .long in_pm32 # offset
.word __BOOT_CS # segment
ENDPROC(protected_mode_jump)
问题1:.byte 0x66, 0xea # ljmpl opcode
2: .long in_pm32 # offset
.word __BOOT_CS # segment
这段代码是放到那个区当中?
问题2:按照注释.byte 0x66, 0xea是跳转指令,但是汇编器是如何区分指令和数据的?
|
1)
.byte .word .long这些定义的数据放在.data section中
AT&T的汇编,主要有三个section,分别是.data, .bss和.text
2)所有的指令和数据在内存中都是以0101这样的形式存储的,区分指令和数据依靠的是它们所在的各个
段的属性设置,而每条指令在特定的系统下,又都会有对应的一种或几种数字表示,比如下面的:
c7 04 24 64 99 04 08 movl $0x8049964,(%esp)
如果在.text section中,它就代表后面的那条指令,如果在.data section中,那代表的可能就是一串数字了
.byte .word .long这些定义的数据放在.data section中
AT&T的汇编,主要有三个section,分别是.data, .bss和.text
2)所有的指令和数据在内存中都是以0101这样的形式存储的,区分指令和数据依靠的是它们所在的各个
段的属性设置,而每条指令在特定的系统下,又都会有对应的一种或几种数字表示,比如下面的:
c7 04 24 64 99 04 08 movl $0x8049964,(%esp)
如果在.text section中,它就代表后面的那条指令,如果在.data section中,那代表的可能就是一串数字了