我目前正在尝试编写一个简单的操作系统,但我无法获取并返回用户输入。基本上因为它独立于OS我不能使用int21。我现在使用的代码在这里:
inputChar:
mov ah, 00h
int 16h
mov al, ah
mov ah, 0Eh
int 10h
它获得了角色,但我无法成功显示它。我相信这是从某种形式的十六进制转换为字符输出的问题。输入字符时的输出基本上是一堆随机字符。
有人对如何解决这个问题有任何想法吗?
答案 0 :(得分:1)
假设您正在使用具有Intel语法的BIOS中断:
要打印单个字符:
mov al, 'G' ;Copy the char's value to al. Replace G with the char you want to print
mov ah, 0x0e ;Copy the function number, in this case 0Eh, to ah.
int 0x10 ;Call the BIOS video service
获取输入并打印它(使用echo读取char):
xor ax, ax ;Make ax zero (faster than mov)
int 0x16 ;Raise the interrupt. Returns character code in al
mov ah, 0x0e ;Start Writing. Set AH to 0xe.
int 0x10 ; Call BIOS video service. Prints char.
在第一个例子的第二行,我将函数号复制到啊,这样当BIOS检查寄存器的值时,它知道该怎么做。有关常见中断类和函数的列表,请查看here。
如果汇编代码没有在您的计算机上编译,您可能正在使用AT& T语法汇编,但根据您提供的示例,我不认为您。
答案 1 :(得分:0)
试试这个?看看你是否得到任何输出
push cs
pop ds
mov ax,B800 ;video
mov es,ax
mov di,42 ;part of way along monitor
mov cx,1F
mov ah,70 ;inverse video
.print
lodsb
stosw
loop print
签署 Atari amigabot
现在,如果您可以打印出一些随机垃圾,旧的键盘缓冲区曾经是DS周围的一些:SI 0000:041E
所以ES:DI将其打印到屏幕上 而DS:SI是缓冲区
答案 2 :(得分:-3)
操作系统是什么?
一些asm例程可以访问窗口
OSBGET,OSBPUT,OSRDCH,OSASCI,OSNEWL,OSWRCH,OSWORD,OSBYTE和OSCLI
另一种方法是将值移动到eax并在操作系统中删除它们