无法在 16 位实模式汇编中清除整个屏幕

2023-11-22

我正在尝试在简单的 16 位实模式操作系统中清除屏幕。下面是代码:

clearScreen:
    pusha

    mov ah, 0x7
    mov al, 0
    int 0x10

    popa
    ret

我读了那个设置al为 0 并调用滚动屏幕中断会清理屏幕,但它似乎只会将第一行的颜色更改为灰色。

感谢任何可以解释为什么这不起作用的人。


问题是int 0x10功能0x07需要的参数比你给出的多。具体来说,

  • AH = 07 = 向下滚动窗口
  • AL = 要滚动的行数(或全部为 0)
  • BH = 写入空行的属性
  • CH、CL=窗口左上角的行、列
  • DH、DL=窗口右下角的行、列

除非您设置它们,否则它们只会包含之前的说明中出现的任何内容,这不太可能是您想要的!

因此,假设您使用标准 80x25 字符屏幕,您的代码应如下编写:

clearScreen:
    pusha

    mov ax, 0x0700  ; function 07, AL=0 means scroll whole window
    mov bh, 0x07    ; character attribute = white on black
    mov cx, 0x0000  ; row = 0, col = 0
    mov dx, 0x184f  ; row = 24 (0x18), col = 79 (0x4f)
    int 0x10        ; call BIOS video interrupt

    popa
    ret

看看著名的拉尔夫·布朗的这个版本中断列表更多细节。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法在 16 位实模式汇编中清除整个屏幕 的相关文章

  • 内存映射图形输出

    我正在探索使用内存映射图形绘制像素和线条 我在 Windows 的 Textpad 中使用 TASM 当我单击 运行 时 整个屏幕变成蓝色 就是这样 没有绘制像素 model small stack data saveMode db xVa
  • 如何查看网站浏览者的操作系统?

    我运行的是 Ubuntu 8 04 最近在访问网站时收到以下错误 请使用运行 Windows 98 2000 Me NT 或 XP 的计算机返回 www site com 网站如何知道我正在运行哪个操作系统 是仅通过 javascript
  • 汇编程序中的过程调用如何工作?

    我刚刚开始摆弄 ASM 我不确定我对过程调用的理解是否正确 假设代码中的某个时刻有一个过程调用 call dword ptr 123 该过程仅包含一个命令 ret ret 0004 该过程调用的效果是什么 返回值将存储在哪里 我在某处读到
  • 从 64 位 nasm 代码接收 32 位寄存器

    我正在学习 64 位 nasm 我通过执行以下操作来汇编 nasm 文件 该文件仅包含 64 位寄存器 nasm f elf64 HelloWorld nasm o HelloWorld o 并链接它执行以下操作 ld HelloWorld
  • 如何创建可获取数字的小矮人计算机 (LMC) 代码。奇数时显示1,偶数时显示0

    我的研究需要帮助 如果数字是偶数 它可以显示 1 如果数字是奇数 它可以显示 0 例如 如果输入是 99 它将显示输出 1 这意味着奇数 如果我显示 10 它将显示输出 0 这意味着偶数 我没有任何代码 因为我不知道如何开始 请帮忙 我对这
  • 在 OllyDbg 和 Assembler 中,EBP+8 是什么意思?

    我正在学习 OllyDbg 中的汇编和调试技巧 以便学习如何使用未记录的函数 现在我遇到以下问题 我有以下代码部分 来自 OllyDbg MOV EDI EDI PUSH EBP MOV EBP ESP MOV EAX DWORD PTR
  • 使用C#,如何获取我的机器是64位还是32位?

    我想使用 C 创建一个方法来返回我的机器是 64 位还是 32 位 有谁知道该怎么做吗 系统 环境 Is64BitOperatingSystem http msdn microsoft com en us library system en
  • Nasm 点状标签

    我对 TASM 很熟悉 但对 NASM 不太了解 我读过 NASM 允许使用本地标签 这些标签在名称前用点表示 例如 代码 loop some code jmp loop 定义一个名为 loop的局部标号 引用的地址在后面的jmp指令中使用
  • x86-64 AMD 上 CALL 指令的操作数生成

    以下是示例程序 objdump 的输出 080483b4
  • 计算PE文件中入口点的文件偏移量

    In http en redinskala com finding the ep http en redinskala com finding the ep 有关于如何查找 exe 文件中入口点的文件偏移量的信息 在这里我可以读到 EP 文
  • 原始 SQL 是用汇编语言还是 C 语言编写的? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • JE/JNE 和 JZ/JNZ 之间的区别

    在 x86 汇编代码中 有JE and JNE完全一样JZ and JNZ JE and JZ只是完全相同的事物的不同名称 条件跳转时ZF 零 标志 等于 1 相似地 JNE and JNZ只是条件跳转的不同名称 什么时候ZF等于 0 Yo
  • 编译器在这里做了什么,允许通过很少的实际比较来完成许多值的比较?

    我的问题是编译器在这种情况下正在做什么 它对代码的优化程度超出了我的想象 鉴于此枚举 enum MyEnum Entry1 Entry2 Entry3 27 are the same omitted for size Entry28 Ent
  • 管道上的持久 execvp?

    我正在为我的操作系统课程 Posix C 做作业 构建一个迷你 shell 但我不知道如何解决以下问题 例如 我的迷你 shell 必须接受两个命令ls grep a 为此 我创建了一个尺寸为 2 的管道和一个子管道 子进程关闭所有它必须关
  • 从 GP regs 加载 xmm

    假设您的价值观是rax and rdx你想加载到xmm登记 一种方法是 movq xmm0 rax pinsrq xmm0 rdx 1 虽然速度相当慢 有没有更好的办法 在最近的 Intel 或 AMD 上 你不会在延迟或 uop 计数方面
  • 如何在 Linux 64 位上用 C 编写简单的内联 asm 指令?

    我正在编写一个简单的 C 程序 我的要求是从程序的某些函数中打印 RIP 指令指针 我不想使用 ptrace 我用内联汇编尝试的一件事是 asm movl rip 0 r val 这应该将我的 rip 寄存器值复制到变量 val 但我收到编
  • .so 文件的 objdump?需要帮助来理解消息

    我正在开发一个与流相关的本机应用程序 我在我的 c 模块中遇到了一些问题 我收到的是来自 Logcat 的一些消息 这是 Logcat 消息 INFO DEBUG 28 Build fingerprint generic sdk gener
  • 32 位 x86 汇编中堆栈对齐的职责

    我试图清楚地了解谁 调用者或被调用者 负责堆栈对齐 64 位汇编的情况相当清楚 它是由caller 请参阅系统 V AMD64 ABI 第 3 2 2 节栈帧 输入参数区域的末尾应按 16 对齐 32 如果 m256 在堆栈 字节边界上传递
  • emu8086中如何使用字符串

    我需要 emu8086 中字符串的帮助 我已经初始化了一个字符串 str1 db 0neWord 我有一个空字符串 str2 db 现在我需要检查所有信件str1并复制到str2 但如果字母在str1是 0 我需要将其替换为 O 如果不是
  • ESP 和 EBP 寄存器是什么?

    我发现ESP寄存器是当前堆栈指针 EBP是当前堆栈帧的基指针 但是 我不理解这些定义 我刚刚开始学习如何在汇编程序中编码 What I understand is that ESP points towards the stack itse

随机推荐

  • 配置 Tomcat 以利用浏览器缓存?

    我运行谷歌的页面速度在我们的网络应用程序上分析和优化您的网站 下面的众多项目之一网络性能最佳实践如页面速度中列出的那样 为了在所有浏览器中充分利用缓存的一致优势 我们建议您将 Web 服务器配置为显式设置缓存标头并将其应用于所有可缓存静态资
  • PHP JSON 响应包含 HTML 标头

    我遇到了一个奇怪的问题 我正在尝试编写一个 PHP 页面 该页面将一些 JSON 返回到 Jquery AJAX 调用 问题是 尽管将内容类型设置为 application json 但响应似乎始终包含 HTML 标头 这是 PHP 代码
  • X f() 是什么意思?

    我看到这段代码 但不明白它的意思 我知道我们如何使用默认构造函数 但这不是默认构造函数 这是什么 class X int main X f 它声明了一个函数f它不带任何参数并返回一个类型X 这也称为最令人烦恼的解析在C 中 它是 C 标准定
  • Android - Activity 与 FragmentActivity? [复制]

    这个问题在这里已经有答案了 我是安卓新手 我想构建一个具有选项卡格式的应用程序 我找到了很多文档Activity已经用过 也在很多情况下使用过FragmentActivity 我不确定哪个会更好开始 请建议我应该使用Activity or
  • 如何修复“必须为自定义运行时设置 --custom_entrypoint 标志”?

    当我运行时 我在 appengine 上收到此错误gcloud preview app run app yaml The custom entrypoint flag must be set for custom runtimes My a
  • Jupyter 命令仅适用于破折号(例如 jupyter-kernelspec 而不是 jupyter kernelspec)

    我将 Jupyter 与 Anaconda3 一起使用 My Anaconda3 and Anaconda3 Scripts 文件夹已添加到 PATH 多变的 尽管jupyter exe在里面Scripts上面的文件夹中 Jupyter 相
  • 是否可以将结构变量作为函数参数传递而不预先定义它?

    我有两个这样定义的结构 在color h typedef struct rgb uint8 t r g b rgb typedef struct hsv float h s v hsv hsv rgb2hsv rgb color rgb h
  • jQuery 屏蔽输入插件。当文本框获得焦点时选择所有内容

    这是这个问题的后续问题 当文本框获得焦点时选择文本框的所有内容 Javascript 或 jQuery 基本上我将文本框与jQuery 屏蔽输入插件 编辑 链接可能不再指向相关版本 当屏蔽的输入文本框接收焦点时 我想选择该文本框的所有内容
  • 如何以编程方式禁用 Windows 10 平板电脑屏幕的边缘滑动手势?

    尝试以编程方式和手动方式在immersiveShell的EdgeUI下将DisableCharmsHint和DisableTLcorner的注册表修改为1 以禁用触摸屏滑动边缘 重新启动后没有任何反应 只是想禁用从边缘滑动以防止用户访问其他
  • 检测 Windows 关闭或应用程序是否尝试从系统菜单关闭 (WM_CLOSE)

    我正在使用托盘应用程序 Onj FormCloseQuery 我检查程序是否应该转到托盘 而不是关闭它 而是将其放入托盘中 CanClose False 但是 如果 Windows 由于 Windows 关闭而尝试关闭我的应用程序 我不想将
  • HTML - 选择文件名后显示图像[重复]

    这个问题在这里已经有答案了 我有一个表格可以让我
  • 神秘的借用范围扩展

    为什么编译器拒绝这段代码 struct S lt a gt i i32 r a i32 fn main let mut s S i 0 r 0 let m1 mut s m1 r m1 i let m2 mut s 错误是 无法借用s一次多
  • 序列化期间没有有效的构造函数

    在将扩展加载到程序中时 我遇到了一个主要问题 我收到一个异常 因为没有有效的构造函数 问题出在这一行 ekstensja ArrayList
  • 如何读取文件并将其写入我的缓存?

    我想为我的应用程序保存一些缓存数据 我曾经通过将数据保存在外部存储中来做到这一点 效果很好 但我希望我的设备在应用程序设置中显示我的缓存大小 但它没有 我想这是因为我将数据保存在外部存储中 我想要的是关闭应用程序甚至关闭设备后我的数据仍然存
  • 为什么`nil`的类型不是`id`而是`void *`

    在这段代码中 id block void void return nil 我有这个错误 使用 void void 类型的表达式初始化 id strong void 时不兼容的块指针类型 所以我必须明确地投射nil to id type id
  • 数组中 K 个元素的总和等于 N

    给定一个数组 假设 nums 1 2 5 3 6 1 2 10 11 12 使用最大元素数 假设 maxNums 3 找到总和 假设总和 10 K 的元素 所以如果要使用的 maxNums 3 查找总和 10 答案是 1 3 6 1 1 1
  • 如何在顶层使用 async/await?

    我已经过去了async await在阅读了几篇文章后 我决定自己测试一下 然而 我似乎无法理解为什么这不起作用 async function main var value await Promise resolve Hey there co
  • Rails 3 根据操作验证规则

    这似乎是一个简单的问题 但除了编写自定义验证器之外 我似乎找不到答案 我有这个验证器 validates password presence gt true confirmation gt true length gt minimum gt
  • 如何在纯 C# 和 .Net 框架中编写字谜生成器 [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我想生成给定字符串的字谜输出 而不需要任何外部库 例如 Google 字谜算法助手 的帮
  • 无法在 16 位实模式汇编中清除整个屏幕

    我正在尝试在简单的 16 位实模式操作系统中清除屏幕 下面是代码 clearScreen pusha mov ah 0x7 mov al 0 int 0x10 popa ret 我读了那个设置al为 0 并调用滚动屏幕中断会清理屏幕 但它似