在 C 中使用内联汇编:在数据段中分配标签
Using inline Assembly in C: Assigning labels in data segment
我正在阅读有关在 DOS 中为 VGA-256 颜色汇编打印字符的教程。我正在阅读的教程是用 Pascal 编写的,我对这种语言的经验很少,而且我所有的 VGA 程序都是用 C 编写的。
我的问题是关于用于访问每个字符的位图的标签。在 Pascal 中,他们有这个:
procedure chr6x7_dat; assembler;
asm
db [=10=],[=10=],[=10=],[=10=],[=10=],[=10=],[=10=],[=10=],,,,,[=10=],,[=10=],
db ,[=10=],[=10=],[=10=],[=10=],[=10=],,$f8,,,$f8,,[=10=],,$f8,$a0
db $f8,,$f8,[=10=],$c8,$d0,,,,,[=10=],,$a0,,$a8,
db ,[=10=],,,[=10=],[=10=],[=10=],[=10=],[=10=],,,,,,,[=10=]
db ,,,,,,[=10=],,,$f8,,,[=10=],[=10=],,
db $f8,,,[=10=],[=10=],[=10=],[=10=],[=10=],,,,[=10=],[=10=],[=10=],$f8,[=10=]
db [=10=],[=10=],[=10=],[=10=],[=10=],[=10=],[=10=],,,[=10=],[=10=],,,,,
db [=10=],,,,$a8,$c8,,[=10=],,,,,,,[=10=],
db ,,,,$f8,[=10=],$f8,,,,,,[=10=],,,
db ,$f8,,[=10=],$f8,,$f0,,,,[=10=],,,$f0,,
db ,[=10=],$f8,,,,,,[=10=],,,,,,,[=10=]
db ,,,,,,[=10=],,,[=10=],[=10=],,,[=10=],,
db [=10=],,,,[=10=],[=10=],,,,,,[=10=],[=10=],$f8,[=10=],$f8
db [=10=],[=10=],[=10=],[=10=],,,,,,[=10=],,,,,[=10=],
db [=10=],,,$a8,$b8,,,[=10=],,,,$f8,,,[=10=],$f0
db ,$f0,,,$f0,[=10=],,,,,,,[=10=],$e0,,
db ,,$e0,[=10=],$f8,,$f0,,,$f8,[=10=],$f8,,$f0,,
db ,[=10=],,,,,,,[=10=],,,$f8,,,,[=10=]
db ,,,,,,[=10=],,,,,,,[=10=],,$a0
db $c0,$a0,,,[=10=],,,,,,$f8,[=10=],,$d8,$a8,
db ,,[=10=],,$c8,$a8,,,,[=10=],,,,,,
db [=10=],$f0,,,$f0,,,[=10=],,,,$a8,,,[=10=],$f0
db ,,$f0,,,[=10=],,,,,,,[=10=],$f8,,
db ,,,[=10=],,,,,,,[=10=],,,,,
db ,[=10=],,,,$a8,$a8,,[=10=],,,,,,,[=10=]
db ,,,,,,[=10=],$f8,,,,,$f8,[=10=],,
db ,,,,[=10=],[=10=],,,,,,[=10=],,,,
db ,,[=10=],,,,[=10=],[=10=],[=10=],[=10=],[=10=],[=10=],[=10=],[=10=],[=10=],$f8
db [=10=],$f8,$f8,$f8,$f8,$f8,$f8
end;
我想在 C 中有一个类似的标签,这样我就可以在我的内联汇编命令中访问它,以根据 ASCII 值计算偏移量。但是我不知道如何声明我上面在 C 中发布的内容。
谁能帮帮我?
使用pascal $
char用于定义hexadecimals
如果您想在 c 中定义它,只需创建一个 uint8_t
的 array/matrix 并用帕斯卡值初始化它,用 $
替换 0x
$F5
将是 0xF5
我正在阅读有关在 DOS 中为 VGA-256 颜色汇编打印字符的教程。我正在阅读的教程是用 Pascal 编写的,我对这种语言的经验很少,而且我所有的 VGA 程序都是用 C 编写的。
我的问题是关于用于访问每个字符的位图的标签。在 Pascal 中,他们有这个:
procedure chr6x7_dat; assembler;
asm
db [=10=],[=10=],[=10=],[=10=],[=10=],[=10=],[=10=],[=10=],,,,,[=10=],,[=10=],
db ,[=10=],[=10=],[=10=],[=10=],[=10=],,$f8,,,$f8,,[=10=],,$f8,$a0
db $f8,,$f8,[=10=],$c8,$d0,,,,,[=10=],,$a0,,$a8,
db ,[=10=],,,[=10=],[=10=],[=10=],[=10=],[=10=],,,,,,,[=10=]
db ,,,,,,[=10=],,,$f8,,,[=10=],[=10=],,
db $f8,,,[=10=],[=10=],[=10=],[=10=],[=10=],,,,[=10=],[=10=],[=10=],$f8,[=10=]
db [=10=],[=10=],[=10=],[=10=],[=10=],[=10=],[=10=],,,[=10=],[=10=],,,,,
db [=10=],,,,$a8,$c8,,[=10=],,,,,,,[=10=],
db ,,,,$f8,[=10=],$f8,,,,,,[=10=],,,
db ,$f8,,[=10=],$f8,,$f0,,,,[=10=],,,$f0,,
db ,[=10=],$f8,,,,,,[=10=],,,,,,,[=10=]
db ,,,,,,[=10=],,,[=10=],[=10=],,,[=10=],,
db [=10=],,,,[=10=],[=10=],,,,,,[=10=],[=10=],$f8,[=10=],$f8
db [=10=],[=10=],[=10=],[=10=],,,,,,[=10=],,,,,[=10=],
db [=10=],,,$a8,$b8,,,[=10=],,,,$f8,,,[=10=],$f0
db ,$f0,,,$f0,[=10=],,,,,,,[=10=],$e0,,
db ,,$e0,[=10=],$f8,,$f0,,,$f8,[=10=],$f8,,$f0,,
db ,[=10=],,,,,,,[=10=],,,$f8,,,,[=10=]
db ,,,,,,[=10=],,,,,,,[=10=],,$a0
db $c0,$a0,,,[=10=],,,,,,$f8,[=10=],,$d8,$a8,
db ,,[=10=],,$c8,$a8,,,,[=10=],,,,,,
db [=10=],$f0,,,$f0,,,[=10=],,,,$a8,,,[=10=],$f0
db ,,$f0,,,[=10=],,,,,,,[=10=],$f8,,
db ,,,[=10=],,,,,,,[=10=],,,,,
db ,[=10=],,,,$a8,$a8,,[=10=],,,,,,,[=10=]
db ,,,,,,[=10=],$f8,,,,,$f8,[=10=],,
db ,,,,[=10=],[=10=],,,,,,[=10=],,,,
db ,,[=10=],,,,[=10=],[=10=],[=10=],[=10=],[=10=],[=10=],[=10=],[=10=],[=10=],$f8
db [=10=],$f8,$f8,$f8,$f8,$f8,$f8
end;
我想在 C 中有一个类似的标签,这样我就可以在我的内联汇编命令中访问它,以根据 ASCII 值计算偏移量。但是我不知道如何声明我上面在 C 中发布的内容。
谁能帮帮我?
使用pascal $
char用于定义hexadecimals
如果您想在 c 中定义它,只需创建一个 uint8_t
的 array/matrix 并用帕斯卡值初始化它,用 $
替换 0x
$F5
将是 0xF5