我正在学习汇编,我正在尝试使用BIOS调用从键盘/打印到键盘进行简单的读取.到目前为止,我有以下内容:
loop:
xor ah, ah
int 0x16 ; wait for a charater
mov ah, 0x0e
int 0x10 ; write character
jmp loop
Run Code Online (Sandbox Code Playgroud)
这个工作正常,直到有人按下回车键 - 似乎正在处理CR(\ r)而不是换行符(\n),因为光标移动到当前行的开头,而不是下一行的开头线.
有任何想法吗?
我使用的是戴尔XPS M1710.笔记本电脑的盖子上有灯,侧面扬声器和前置扬声器(可以单独调节的3组灯)和鼠标垫下的灯.在BIOS中,我可以改变这些灯的颜色,至少每组.此外,我可以在鼠标垫下打开/关闭灯光,我无法改变它的颜色,只要它点亮就可以交替.笔记本电脑附带了很多来自戴尔的软件,但我安装了Windows 7并丢失了所有应用程序,包括允许我更改这些浅色的应用程序.现在戴尔的应用程序已经不见了,我有兴趣制作我自己的C#应用程序来改变这三组灯的颜色(我不特别关心改变鼠标垫下的灯光,我喜欢它).我如何开发应用程序以检索和更改这些BIOS设置?
有没有办法在Java中获取BIOS日期和时间?
当您调用或时,Java是否使用BIOS(基本输入/输出系统)日期时间java.util.Calendar.getInstance()new java.util.Date()?
我知道Java以某种方式使用当前的日期和时间,使用1970年1月1日00:00:00 GMT作为基础.
但到底怎么样?
我的期望是它打印一个字符串,但没有打印出来.当我把字符串缩短时,它有时会起作用,当我再次使它们变长时,它有时会起作用.
我不知道为什么这不起作用.
有人能帮帮我吗?谢谢.
我正在使用的汇编代码是:
(Emacs 23,Ubuntu 10.10,nasm,VirtualBox OSE)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
org 0x7c00
bits 16
str:
db "Some say the world will end in fire",10,13
db "Some say in ice",10,13
db "From what I've tasted of desire",10,13
db "I hold with those who favor fire",10,13
db "But if I had to perish twice,",10,13
db "I think I know enough of hate",10,13
db "To say that for destruction ice",10,13
db "is also great and would suffice."
db "Robert Frost - Fire and Ice" …Run Code Online (Sandbox Code Playgroud) 您好我正在尝试使用此代码清除DOS视频模式下的屏幕.
但是当我运行它时,点仍然存在!
org 100h
mov ah, 0 ; set display mode function.
mov al, 13h ; mode 13h = 640x480 pixels, 256 colors.
int 10h ; set it!
mov cx, 10 ; column
mov dx, 10 ; row
mov al, 15 ; white
mov ah, 0ch ; put pixel
int 10h ; draw pixel
; ------- clear the screen ----------
; ------- doesn't work! dot is still there
mov ax,0B800h
mov es,ax
xor di,di
xor ax,ax
mov cx,2000d
cld
rep …Run Code Online (Sandbox Code Playgroud) 我已经读过,在启动时,CPU程序计数器寄存器填充了F000.
我以为:
PC registers contain the next instruction address.
This address is send to the address bus and value return to the data bus
Run Code Online (Sandbox Code Playgroud)
地址总线只处理RAM吗?显然BIOS没有存储在RAM中.
那么F000如何针对ROM启动BIOS执行呢?
我正在大学学习集会.我正在尝试编写个人格式例程,但我遇到了一些问题.例程在引导时启动,但在第一次中断(INT 13h/AH = 7)后进入错误流程.打印AH状态值表明错误是:
检测到0Eh控制数据地址标记(硬盘)
这是我的引导程序代码:
[BITS 16]
[ORG 0x7C00]
init:
call main
ret
main:
xor ax, ax
mov ds, ax
mov si, string0
call print
call delay
mov si, string1
call print
call delay
mov si, string2
call print
call delay
mov si, string3
call print
call delay
mov si, string4
call print
call delay
mov si, string5
call print
call delay
mov si, string6
call print
call delay
mov si, string7
call print …Run Code Online (Sandbox Code Playgroud) 我将引导加载程序从CHS更改为LBA,因此我将其替换int 13h 02h为int 13h 42h.它在QEMU中正常工作,但是,我在使用Bochs和笔记本电脑时遇到了麻烦.
我把bootloader写入了USB闪存盘dd if=main.bin of=/dev/sdb bs=512.笔记本电脑加载英特尔UNDI并给我以下错误:No bootable device - insert boot disk and press any key.
所以我尝试用Bochs调试它,并注意到Bochs将这个二进制文件识别为可引导的.但是,int 13h执行后没有加载任何内容.
然后我尝试从这个闪存驱动器加载我的旧PC,它的工作原理!它加载程序并正确执行它.QEMU给了我相同的结果.
这是引导加载程序代码:
org 0x7c00
bits 16
boot:
cli
; Overlap CS and DS
mov ax, cs
mov ds, ax
mov es, ax
; Setup 4K stack before this bootloader
mov ax, 0x07c0
mov ss, ax
mov sp, 4096
; Load next sectors
mov si, DAP
mov ah, 42h
; …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用NASM Assembler自己编写一个bootloader.我正在尝试打印两行文本,等待按键,如果按下的键是'r'则重新启动,如果按下的键是'b'则继续启动.但是,这不是我的问题的主题(我将在稍后实现这些函数,因此nop目前代码中的指令).相反,我想问一下为什么我的换行符0xA以如此奇怪的方式打印?我已经在我的TODO中完成了所有三个项目,但我认为这很重要,因为加载器一定不会看起来很糟糕.

这是我的代码:
BITS 16 ; tell nasm we're working in 16 bit real mode
start: ; entry symbol for the os
mov ax, 0x07C0 ; 4 kilobyte stack space set up
add ax, 288 ; (4096+512) / 16 bytes per paragraph
mov ss, ax
mov sp, 4096
mov ax, 0x07C0 ; set data segment to where we've loaded
mov ds, ax
mov si, text_string ; put our string position into SI
call write_string ; call …Run Code Online (Sandbox Code Playgroud) AFAIK,BIOS大小限制为段大小(0xFFFF)。但是,如今许多BIOS都超过了64KB,通常超过10MB。它怎么做呢?