如何读取引导加载程序中的字符输入? (NASM)

时间:2018-03-19 12:17:37

标签: assembly x86 nasm bootloader

我希望我的代码读取字符输入,然后将其存储在ax。

我在功能' readInput':

中尝试了什么
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
mov ax, al
int 10h

我收到一条错误消息,指出它是行代码中的操作码和操作数的无效组合> mov ax,al'

所以我想首先将al存储在一个变量中。现在,通常当它不是.bss部分中的引导加载程序时,我会把num resb 1.但是引导程序中没有任何部分..?我在哪里声明这个变量,如果这是我需要做的工作呢?

我尝试使用变量进行以下操作:

mov ah, 0h
int 16h
mov ah, 0eh
int 10h
mov [num1], al
sub al, 48
int 0x10
mov ax, [num1]
int 0x10

我宣布了#num; res1 resb 1'在'完成'功能在最后,它已作为第一行返回。但是当我这样做的时候,我看到这种情况无穷无尽。

这是我的一个大小用户输入的代码,这就是为什么我试图使用ax寄存器:

call readInput
outer_loop:
mov bx, ax
inner_loop:
    call dot
    dec bx
    cmp bx, 0
    jg inner_loop
call newline
dec ax
cmp ax, 0
jne outer_loop
call newline 

感谢您的帮助。

@Jester

考虑到你说的话,我觉得我已经存储了我想要的数字,所以没有必要试着把它放在斧头上。然而,这个解决方案也不起作用:

call readInput  
outer_loop:
mov bx, ax
inner_loop:
    call dot
    dec bx
    cmp bx, 0
    jg inner_loop
call newline
dec ax
cmp ax, 0
jne outer_loop
call newline 

readInput:
mov ah, 0h
int 16h
mov ah, 0eh
int 10h
mov ah, 0
int 10h

1 个答案:

答案 0 :(得分:0)

答案是在方形循环中使用不同的寄存器并将键盘输入转换为整数。