Assembly FASM引导加载程序输入

Assembly FASM引导加载程序输入,assembly,input,bootloader,fasm,Assembly,Input,Bootloader,Fasm,我开始在FASM中从头开始制作引导加载程序。我只是做了一个基本的输入。 但我不知道该怎么做 这是我的代码: start: mov ax, 07C0h add ax, 288 mov ss, ax mov sp, 4096 mov ax, 07C0h mov ds, ax mov si, text_string call print_string jmp read ; infinite loop of reading! text_string db '<HammerO

我开始在FASM中从头开始制作引导加载程序。我只是做了一个基本的输入。 但我不知道该怎么做

这是我的代码:

start:
mov ax, 07C0h 
add ax, 288     
mov ss, ax 
mov sp, 4096 
mov ax, 07C0h 
mov ds, ax 
mov si, text_string 
call print_string
jmp read  ; infinite loop of reading!
text_string db '<HammerOS> : Booted up!', 13, 10, 0

read:
mov ah,0h   ;get character from keyboard
int 16h     ;and store it in AL
mov ah,0eh  ;Display a character in AL
int 10h     ;aka, echo it

jmp read

have_read_txt:
mov si, AL
call print_string

print_string:     
mov ah, 0Eh 

.repeat: 
lodsb     
cmp al, 0 
je .done 
int 10h  
jmp .repeat 

.done: 
ret 


times 510-($-$$) db 0 
dw 0xAA55
开始:
mov ax,07C0h
加上ax,288
mov-ss,ax
莫夫sp,4096
mov ax,07C0h
mov-ds,ax
mov si,文本字符串
调用打印字符串
jmp-read;阅读的无限循环!
text_string db':已启动!',13, 10, 0
阅读:
mov-ah,0h;从键盘获取字符
int 16h;并将其储存在AL中
mov啊,0eh,;用AL显示字符
int 10h;阿卡,回音
jmp读取
已读取\u txt:
莫夫西,艾尔
调用打印字符串
打印字符串:
mov啊,0Eh
.重复:
洛兹
cmp-al,0
好的
int 10h
jmp,重复
.完成:
ret
乘以510-($-$$)db 0
dw 0xAA55
它所做的是在控制台上接受输入,但当我按下enter键时,我想检查输入的内容,并基于此我想做一些事情


另外,我希望光标转到下一行。现在,如果我按enter键,文本将在同一行上写入。

在获取字符的位置,然后在屏幕上写入字符,您还需要将字符存储在一些内存缓冲区中

当您通过比较AL和enter键代码(应该是13或10)来检测“enter”键时,您需要分析缓冲区并执行一些操作。 名单 ; 可能有用

如果要移动光标,请查看int 10h(您已经使用)说明:
.

如何制作内存缓冲区?是用db还是内存段?是的,文本字符串也是内存缓冲区。但试图用“mov”指令将值从8位寄存器(AL)移动到16位寄存器(SI)是错误的。使用“movzx”或16位AX寄存器代替。我尝试将其移动到缓冲区,但它将无需打印输入字符。我使用:mov[buffer],al@JoshuaBakker:我认为在开始编写操作系统之前,您应该先学习一些汇编程序教程。你错过了最基本的知识,我尝试在ASM中搜索缓冲区,但什么也找不到。FASM、NASM、MASM和EMU8086之间在难度方面是否存在差异?