Assembly FASM引导加载程序输入
我开始在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
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之间在难度方面是否存在差异?