提问人:Bimbowka 提问时间:11/13/2023 最后编辑:Bimbowka 更新时间:11/13/2023 访问量:46
如何使用 16h BIOS 显示符号
How to show symbol with 16h BIOS
问:
该程序必须获取并显示符号。但相反,我有这一系列奇怪的奇怪符号 组织 100h
org 100h
section .text
_start:
mov ah, 0
int 16h
mov [znak], al
mov ah, 9
mov dx, znak
int 21h
mov ah, 4Ch
int 21h
section .data
znak db 0
我试图更改语法,但它不起作用,或者我只是看不到
答:
3赞
Sep Roland
11/13/2023
#1
而不是使用 DOS。PrintString 函数 09h(要求字符串以 $ 字符结尾),请使用 DOS。PrintCharacter 函数 02h:
mov ah, 00h ; BIOS.GetKeystroke
int 16h ; -> AX
mov dl, al
mov ah, 02h ; DOS.PrintCharacter
int 21h ; -> (AL)
mov ax, 4C00h ; DOS.Terminate
int 21h
仍然想使用DOS。PrintString 函数 09h?
然后
- 确保设置 DS 段寄存器
- 以 $ 字符终止字符串
mov ax, @data
mov ds, ax
mov ah, 00h ; BIOS.GetKeystroke
int 16h ; -> AX
mov [znak], al
mov dx, znak
mov ah, 09h ; DOS.PrintString
int 21h ; -> (AL)
mov ax, 4C00h ; DOS.Terminate
int 21h
section .data
znak db 0, '$'
评论
2赞
dimich
11/13/2023
看起来 OP 编译成 .com 文件 ()。对于 .com 文件,段寄存器在启动时已初始化。.org 100h
2赞
Sep Roland
11/13/2023
@dimich 你是对的!我忽略了这一点.无论如何,如果他们使用的是 .COM,我宁愿他们根本不提及这些。org 100h
section .text
_start:
section .data
2赞
dimich
11/13/2023
是的。我对 nasm 语法不是很熟悉,但对于 tasm,我从未使用过代码/数据段分离来表示内存模型很小。刚刚使用 nasm 编译,有和没有部分定义 - 除了对齐之外没有区别。
评论
$