- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了简单的代码来从硬盘驱动器加载第二个扇区,然后写入到整个屏幕,并带有红色背景的空格。问题在于,我总是得到@符号而不是空格。这是代码:
org 0x7C00
bits 16
xor ax,ax
mov ds,ax
mov es,ax
mov bx,0x8000
cli
mov ss,bx
mov sp,ax
sti
cld
clc
xor ah,ah
int 0x13
mov bx,0x07E0
mov es,bx
xor bx,bx
mov ah,0x2 ;function
mov al,0x5 ;sectors to read
mov ch,0x0 ;track
mov cl,0x2 ;sector
mov dh,0x0 ;head
int 0x13
;jc error
;mov ah, [0x7E00]
;cmp ah,0x0
;je error
jmp error
cli
hlt
jmp 0x07E0:0x0000
error:
xor bx,bx
mov ax,0xb800
mov es,ax
mov al,0x40 ;colour
mov ah,' ' ;character
.red:
cmp bx,0x0FA0
je .end
mov WORD [es:bx], ax
inc bx
jmp .red
.end:
cli
hlt
times 0x1FE - ($ - $$) db 0x0
db 0x55
db 0xAA
最佳答案
写入视频内存(从0xb8000开始)时,屏幕上的每个单元都有2个字节。要显示的字符在第一个字节中,而属性在第二个字节中。要将红色(颜色代码0x40)空格(0x20)字符打印到屏幕上的第一个单元格,需要将字节放置在内存中,如下所示:
0xb800:0x0000 : 0x20 ; ASCII char for 0x20 is ' '
0xb800:0x0001 : 0x40 ; Red background, black foreground
mov al,0x40 ;colour
mov ah,' ' ;character
.red:
cmp bx,0x0FA0
je .end
mov WORD [es:bx], ax
inc bx
jmp .red
mov WORD [es:bx], ax
的整个WORD移动到了视频内存。例如,它将把这些字节写入第一个单元格:
0xb800:0x0000 : 0x40 ; ASCII char for 0x40 is `@'
0xb800:0x0001 : 0x20 ; Green background, black foreground
@
,但是由于第二个错误,我会提到它可能显示为红色。要解决此问题,您需要反转字符和属性在AX寄存器中的位置(交换AH和AL中的值)。代码如下所示:
mov ah,0x40 ;colour is now in AH, not AL
mov al,' ' ;character is now in AL, not AH
.red:
cmp bx,0x0FA0
je .end
mov WORD [es:bx], ax
inc bx
jmp .red
mov WORD [es:bx], ax
inc bx ; Only increments 1 byte where it should be 2
jmp .red
mov WORD [es:bx], ax
add bx,2 ; Increment 2 since each cell is char/attribute pair
jmp .red
error:
mov ax,0xb800
mov es,ax ;Set video segment to 0xb800
mov ax,0x4020 ;colour + space character(0x20)
mov cx,2000 ;Number of cells to update 80*25=2000
xor di,di ;Video offset starts at 0 (upper left of screen)
rep stosw ;Store AX to CX # of words starting at ES:[DI]
关于assembly - 如何从实模式下写入视频存储地址为0xb8000的屏幕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33681795/
我对Python很陌生,在这段代码中,我试图编写一个代码来读取包含城市列表及其各自的经度和纬度的文本文件,然后将它们作为包含城市列表的字典返回。城市,包括其经度和纬度。 文本文件如下所示: Name:
澄清一下,我想匹配: ab aabb aaabbb ... 这在 Perl 中有效: if ($exp =~ /^(a(?1)?b)$/) 要理解这一点,请看一下字符串,就好像它是从外向内生长的,而不
澄清一下,我想知道如何使用正则表达式来匹配: ab aabb aaabbb ... 我刚刚发现这在 Perl 中有效: if ($exp =~ /^(a(?1)?b)$/) 要理解这一点,请看一下字符
我已将 Individual.XML 放置在目录中:Files\InputApps - - **A123** 只是想打印出“A123”,但我收到此错误: Exception in thread "
我正在尝试将一些 matlab 代码转换为 C++ 我正在使用 Eigen这是一个很棒的库(如果你不知道就试试吧) 但我正在尝试转换这一行: x = B/A 与 B = rand(7,20); A =
我正在尝试使用 R 中的 plm 包为面板数据开发固定效应回归模型。我想获得固定效应和回归变量之间的相关性。 Stata 输出中的 corr(u_i, Xb) 之类的东西。如何在 R 中获取它?我尝试
如何在字符串中替换这些字符:r'\xb0' 为 r'\260',我已经尝试过: test = u'\xb0C' test = test.encode('latin1') test = test.rep
我对 python 很陌生,对做高斯回归很感兴趣。我在 py3.6 和 SKlearn 0.19 下。 我有简单的代码,但我得到了一个关于预测调用的 cdist 中向量维度的错误。我知道我的输入有问题
好吧,我必须编写一个程序来计算一个骑士(在棋盘上)从 (xb, yb) 到 (xe, ye) 可以走的路线数。我不确定我哪里出错了。好吧,我知道计数不会添加任何东西,并且会在我的代码中保持为 0,但我
看下面的片段: >>> import unicodedata >>> from unicodedata import normalize, name >>> normalize('NFKD', u'\
我用 Java 创建了一个独立的 Web 服务客户端。我能够正确生成 WSDL,但是当我执行我的 run.bat 文件时,我得到上面的异常,下面是异常。我用谷歌搜索了标题中显示的异常,并找到了一个包含
我是一名优秀的程序员,十分优秀!