程序集:用于自定义操作系统键盘支持的引导加载程序

2024-01-25

我有一个工作简单的自定义操作系统(目前没有做太多事情:D)。现在我正在使用一个没有键盘支持的汇编文件(boot.s)。

汇编文件(boot.s):

# set magic number to 0x1BADB002 to identified by bootloader 
.set MAGIC,    0x1BADB002
# set flags to 0
.set FLAGS,    0
# set the checksum
.set CHECKSUM, -(MAGIC + FLAGS)
# set multiboot enabled
.section .multiboot
# define type to long for each data defined as above
.long MAGIC
.long FLAGS
.long CHECKSUM
# set the stack bottom 
stackBottom:
# define the maximum size of stack to 512 bytes
.skip 512
# set the stack top which grows from higher to lower
stackTop:
.section .text
.global _start
.type _start, @function

_start:
  # assign current stack pointer location to stackTop
    mov $stackTop, %esp
  # call the kernel main source
    call KERNEL_MAIN
    cli
# put system in infinite loop
hltLoop:
    hlt
    jmp hltLoop
.size _start, . - _start

我认为这是缺失的部分,但它采用英特尔语法,我无法使用它。

load_idt:
mov edx, [esp + 4]
lidt [edx]
sti
ret

read_port:
mov edx, [esp + 4]
in al, dx   
ret

write_port:
mov edx, [esp + 4]    
mov al, [esp + 4 + 4]  
out dx, al  
ret

keyboard_handler:                 
call keyboard_handler
iretd

我正在使用以下命令编译 boot.s:

as --32 boot.s -o boot.o

谁能帮我将键盘部分(Intel 语法)翻译为 AT&T? :)


有关如何将 NASM Intel 语法转换为 GAS 的 AT&T 语法的信息,请参阅此堆栈溢出答案 https://stackoverflow.com/questions/18833928/translation-from-nasm-to-gas,并且其中提供了很多有用的信息IBM 文章 https://www.ibm.com/developerworks/library/l-gas-nasm/index.html。您的代码尤其如下所示:

load_idt:
    mov 4(%esp), %edx
    lidt (%edx)
    sti
    ret

read_port:
    mov 4(%esp), %edx
    in %dx, %al
    ret

write_port:
    mov 4(%esp), %edx
    mov 8(%esp), %al
    out %al, %dx
    ret

keyboard_handler:                 
    call keyboard_handler
    iret

一般来说,最大的区别是:

  • 对于 AT&T 语法,源位于左侧,目标位于右侧,而 Intel 则相反。
  • 使用 AT&T 语法,寄存器名称前面带有一个%
  • 对于 AT&T 语法,立即值前面带有一个$
  • 内存操作数可能是最大的区别。 NASM用途[段:disp+base+index*scale]而不是 GAS 的语法段:disp(基数,索引,比例).

其他观察

我建议将堆栈从多重引导部分移至.bss部分。 BSS 部分通常不会占用输出可执行文件中的空间(假设使用正常或默认的链接描述文件)。堆栈可以在之后这样定义.text部分:

.section .bss
    .lcomm stackBottom 512
stackTop:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

程序集:用于自定义操作系统键盘支持的引导加载程序 的相关文章

随机推荐