- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在阅读这篇关于操作系统编程的精彩脚本
http://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev.pdf
第 12 页有一个简单的引导加载程序。
如果我理解正确的话,显示的代码就是您必须在 NASM 中编写才能让 BIOS 打印出字符的代码。
我不明白的是:
上面是这么说的
we need interrupt 0x10 and to set ah to 0x0e (to indicate tele-type mode)
and al to the ASCII code of the character we wish to print.
但第一条指令是:
mov ah , 0x0e ;int 10/ ah = 0eh -> scrolling teletype BIOS routine
我不明白该行的评论。为什么第一行代码不说:
mov ah, 0xeh
int 0x10
如果这就是你需要做的?
感谢您的帮助!
最佳答案
虽然 Chrono 给了你答案,但我不太确定它能回答你的问题。您似乎在问为什么注释说的是一回事,而代码似乎做了另一回事。
几十年前,许多引用资料和一些反汇编程序使用与您今天看到的略有不同的默认表示法来表示十进制、十六进制、八进制和二进制基数。他们将基数指定为值的最后一个字符(后缀)。常见的后缀有:
b = binary 10101010b (decimal 170) base 2
d = decimal 170d (decimal 170) \ both d and t mean base 10
t = decimal 170t (decimal 170) /
h = hex 0AAh (decimal 170) base 16
o = octal 252o (decimal 170) base 8
如果数字不包含字母字符,则假定该数字为以 10 为基数的十进制。所以这也适用:
no alphabetic character 170 decimal 170
大多数汇编器将接受大部分后缀,但它们也支持定义为前缀的基数。如果值不以字母字符结尾,而是以 0 开头,后跟字母,则该字母表示基数。常见的前缀库有:
b = binary 0b10101010 (decimal 170) base 2
d = decimal 0d170 (decimal 170) \ both d and t mean base 10
t = decimal 0t170 (decimal 170) /
h = hex 0xAA (decimal 170) base 16
o = octal 0o252 (decimal 170) base 8
大多数现代汇编器将支持指定为前缀或后缀的形式。某些汇编器可能不支持某些前缀和后缀,例如 t
。
如果您指定带有前缀基数的数字,则在整个文件中坚持使用前缀。如果您指定带有后缀基数的数字,则在整个文件中坚持使用后缀。您可以混合使用它们,但最好在文件中保持一致。
这是什么意思:
int 10/ ah = 0eh -> scrolling teletype BIOS routine
int 10
不包含字母,因此它是十进制 10
(或十六进制 a
)。 0eh
以字母结尾,并且不以 0 和字母开头,因此 h 是后缀。 h
表示十六进制。因此,0eh
是十六进制 0e
(或十进制 14
)。如果您将其放入 BIOS 的汇编代码中,它将看起来像(使用十六进制后缀):
mov ah, 0eh ; Decimal 14
int 0ah ; Decimal 10. The 0 in front makes sure the assembler knows we don't mean register ah!
使用前缀(本例中为十六进制):
mov ah, 0xe ; Decimal 14
int 0xa ; Decimal 10
或者如果您想使用十进制(无前缀或后缀):
mov ah, 14 ; Decimal 14
int 10 ; Decimal 10
但是您现在可能会说嘿等等!这是错误,因为BIOS视频中断是0x10
(或16
十进制)你是对的!我们刚刚了解到该评论是错误的或者充其量是非常含糊不清。评论应该说:
int 10h / ah = 0eh -> scrolling teletype BIOS routine
您可能希望联系评论/代码的作者,并让他们知道他们的评论不准确。他们编写的代码是正确的。
如果汇编器支持它们,我更喜欢使用 0x
、0b
、0o
等前缀,而不是后缀 h
, b
, o
因为某些后缀可能形成寄存器名称或其他标识符和符号。使用后缀时,如果您的值必须以字母开头(即:十六进制的 A 到 F),请在开头添加 0,让汇编器知道您正在表示一个值。例如,AAh
必须写为 0AAh
,Bh
必须写为 0Bh
。
关于nasm - 了解用于在电传打字机模式下输出字符的 nasm 汇编,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32923556/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及预
为什么在 C# 中添加两个 char 结果是 int 类型? 例如,当我这样做时: var pr = 'R' + 'G' + 'B' + 'Y' + 'P'; pr 变量变为 int 类型。我希望它是
下面的代码可以编译,但 char 类型的行为与 int 类型的行为不同。 特别是 cout ::ikIsX >() ::ikIsX >() ::ikIsX >() using names
我正在寻找一个正则表达式,它可以匹配长度为 1 个或多个字符但不匹配 500 的内容。这将在 Rails 路由文件中使用,特别是用于处理异常。 路线.rb match '/500', to: 'err
对于 C 编程作业,我正在尝试编写几个头文件来检查所谓的“X 编程语言”的语法。我最近才开始,正在编写第一个头文件。这是我编写的代码: #ifndef _DeclarationsChecker_h_
为什么扩展的 ascii 字符(â、é 等)被替换为 字符? 我附上了一张图片...但我正在使用 PHP 从 MySQL 中提取数据,其中一些位置有扩展字符...我使用的是 Arial 字体。 您可以
我有一个与 R 中的断线相关的简单问题。 我正在尝试粘贴,但在获取(字符/数字)之间的断线时遇到问题。请注意,这些值包含在向量中(V1=81,V2=55,V3=25)我已经尝试过这段代码: cat(p
如何将 ANSI 字符 (char) 转换为 Unicode 字符 (wchar_t),反之亦然? 是否有用于此目的的任何跨平台源代码? 最佳答案 是的,在 中你有mbstowcs()和 wcsto
函数 fromCharCode 不适用于国际 ANSI 字符。例如,对于 ID 为 192 到 223 的俄语 ANSI (cp-1251) 字符,它返回特殊字符。如何解决这个问题? 我认为,需要将A
如果不喜欢,我想隐藏 id,但不起作用 SELECT * FROM character, character_actor WHERE character.id NOT LIKE character_a
现在这个程序成功地反转了键盘输入的单词。但是我想在我反转它之前“保存”指针中的单词,所以我可以比较两者,反转的和“原始的”,并检查它们是否是回文。我还没有太多经验,可能会出现比我知道的更多的错误,但我
Memcpy 和 memcmp 函数可以接受指针变量吗? char *p; char* q; memcpy(p,q,10); //will this work? memcmp(p,q,10); //w
恐怕我对一个相当过饱和的主题的细节有疑问,我搜索了很多,但找不到一个明确的答案来解决这个特定的明显-imho-重要的问题: 使用UTF-8将byte[]转换为String时,每个字节(8bit)都变成
我有一个奇怪的问题。我需要从 stat 命令打印输出字符串。 我已经编写了获取一些信息的代码。 import glob import os for file in glob.glob('system1
我正在使用 Java 并具有其值如下所示的字符串, String data = "vale-cx"; data = data.replaceAll("\\-", "\\-\\"); 我正在替换其中的“
String urlParameters = "login=test&password=te&ff"; 我有一个String urlParams,& - 是密码的一部分,如何使其转义,从而不被识别为分
大家好,我只想从此字符串中提取第一个字母: String str = "使 徒 行 傳 16:31 ERV-ZH"; 我只想获取这些字符: 使 徒 行 傳 并且不包括 ERV-ZH 仅数
这个问题已经有答案了: Crash or "segmentation fault" when data is copied/scanned/read to an uninitialized point
所以, 我有一个字符**;它本质上是一个句子,带有指向该句子中每个单词的指针;即 'h''i''\0''w''o''r''l''d''\0''y''a''y''!''\0' 在这种情况下,我希望使用可
这个问题在这里已经有了答案: Using quotation marks inside quotation marks (12 个答案) 关闭 7 年前。 如何打印 " 字符? 我知道打印 % 符号
我是一名优秀的程序员,十分优秀!