x86-16相关内容
在VGA图形模式中,不会显示光标,但BIOS会跟踪其位置。对于每个可用的显示页面,BIOS将光标的列和行坐标(当然不是X和Y坐标)记录在光标保存区中,16字节从线性地址0450h开始。有趣的事实:BIOS还不必要地更新CRT控制器寄存器光标位置高和光标位置低。 从一开始,在图形屏幕上运行的应用程序就必须创建自己的光标,因此我完全意识到我也必须提供自己的光标。 但有一个小故障。显然,DO
..
我对在FreeDOS上用C编程感兴趣,同时在这个过程中学习了一些基本的ASM,使用FreeDOS会允许我的程序访问超过标准640K的内存吗? 其次,关于ASM,我知道在现代处理器上,由于CPU体系结构的复杂性,很难在汇编语言上编程,但使用FreeDOS是否会限制我使用可能更简单的16位指令集? 推荐答案 在没有任何扩展器的情况下,程序在DOS下最多可以使用640KB的低内存。但每
..
为什么当我尝试获取输出时,只能得到原始输入缓冲区的一半(甚至更少)? 一开始我输入随机符号,当我将它们转移到新缓冲区时,结果我得到了原来缓冲区的一半,我不知道为什么 以下是我的代码的一部分: 我的数据段: .data buff db 255,?,255 dup("$") result db 255,?,255 dup(" ") _result db "Resu
..
我有一个文本文件,其中包含一些内容,我必须将光标移到相对于BOF的位置,并使用INT 21小时/42小时在屏幕上显示其内容。 以下是我正在编写的代码。我在VM中使用的是Windows 98(16位DOS),这是我的系统编程任务的一部分,所以我不得不在Turbo c++和DOSBox中尝试使用它,但它有一些问题。 打印时缓冲区显示随机值 代码 #include
..
我需要使用ah,09H技术在屏幕上打印完整的句子。我现在不明白为什么它不显示在屏幕上。 message db 'game over, to play again press y$' PROC GAMEOVER push dx call cleanscreen mov dx, offset message mov ah,9h int 21h mov ah
..
我几天前开始学习汇编,我正试图编写一个程序来打印斐波那契系列最多5个字符,但我的代码打印出奇怪的字符 我以为这是因为ASCII转换系统的原因,但即使我将值48添加到数字上,它仍然不正确。 .model small .data lastFib DB 0 .code main PROC mov cx,5 mov dl,48 loopy: add dl
..
我正在构建一个简单的操作系统,并尝试从引导加载程序中获取屏幕上的一些文本。 每当我编译它(nasm -fbin bootloader.asm)时,都会出现以下错误: print.asm:23:错误:操作码和操作数的组合无效 我不明白出了什么问题,print.asm甚至没有那么多行,所以不清楚NASM不喜欢哪行。 这是bootloader.asm: [org 0x7c0
..
我正在尝试从Bootloader编写引导加载程序。编写的代码是 BITS 16 start: mov ax, 07C0h ; Set up 4K stack space after this bootloader add ax, 288 ; (4096 + 512) / 16 bytes per paragraph mov ss, ax
..
我在想如何用汇编语言打印用户输入的字符。(让我们假设我已经有了小写的值,并且我想用大写打印它。) lowercase DB "Input a letter: $" uppercase DB "The uppercase equivalent of letter is: $" 相反,如果它是用c++编
..
我正在从事一个嵌入式系统项目,并且遇到了编译器以编程方式嵌入到 Paradigm C++ IDE 中的问题.我希望能够自动构建. 处理器是 AMD186ES.我没有使用操作系统 - 只是裸机的东西.我需要从 C++ 生成实模式 16 位 8086 机器代码. 我的谷歌搜索表明 G++ 可以构建这样的代码. 我的问题是: 可以配置g++来构建这个机器码吗? 是否有其他
..
我正在尝试学习如何防止键盘将多个字符发送到屏幕和 DOS 下的 scanf.我正在使用带有内联汇编的 Turbo-C. 如果在键盘上输入的字符是: mmmmmmmmyyyyy nnnnnaaaaammmmmmeeee iiiiiisss HHHHaaaaiiiimmmm 在控制台上看到并由 scanf 处理的字符将是: 我叫海姆 基本输出来自 C 中的代码,我不允许触
..
去年 1 月,我将 x86 组装作为一种爱好,因此我可以制作可以在 PCj 和 Tandy 1000 等老式 8086 驱动计算机上运行的游戏,但我发现的书籍并没有确切地教授该特定主题的内容.虽然一些 dos 和 bios 中断可以完成这项工作,但它们远非完美. 我的主要问题是在不停止程序的情况下读取按键的键盘状态.我找到了一些方法,但它们非常有限.INT 21h, AH 0Ch 读取最后按
..
powerCommand:mov si, 关机调用打印字符串;在这里休眠命令移动斧头,0x1000mov ax, ss移动 sp, 0xf000移动斧头,0x5307移动 bx, 0x0001mov cx, 0x0003整数 0x15ret 我希望程序等待 1 秒钟,然后继续关机.目前它在关闭消息后立即关闭.我在我用 nasm 制作的自定义操作系统上运行它. 解决方案 假设你的程序是由
..
自从我开始使用 8086 汇编语言编程以来,我一直在思考这些段和段寄存器.我面临的问题是我无法直观地了解脑海中的片段,因此我不清楚这些概念. 谁能帮我理解将其与现实世界场景联系起来的概念?我还有以下问题: 问题 1: 据我了解,在启用 20 条地址线的 16 位实模式下,我们可以将物理内存分成 16 段,每段 64KiB.第一段从 0x00000 开始.下一段的起始地址是什么.会
..
正如问题所暗示的,我必须编写一个 MASM 程序来将整数转换为二进制.我尝试了许多不同的方法,但没有一个对我有帮助.我正在处理的最终代码如下.我在 Visual Studio 中调试代码时遇到访问内存冲突错误. 任何有关如何解决错误以及我是否走在正确轨道上的帮助将不胜感激.第一个代码是我的 C++ 代码,它将一个 char 数组传递给一个 .asm 文件以转换为二进制文件. #includ
..
我有一个 8086 CPU 模拟器.它仅模拟 8086 条指令.我现在正在寻找一个 C 编译器来定位这个模拟器.有没有可以做到这一点的C编译器? 另外,拥有一个可用的 libc 等对我来说并不重要.模拟器使用自定义(即非 PC)硬件,因此任何 libc 甚至 ctr0 可能都必须重写 解决方案 bcc - Bruce 的 C 编译器 来自 bcc(1) - Linux 手册页:
..
我很好奇在 x86 程序集中有多少种方法可以将寄存器设置为零.使用一条指令.有人告诉我,他设法找到了至少 10 种方法. 我能想到的有: xor ax,ax移动斧头,0和斧头,0 解决方案 IA32 下如何将 0 in 移动到 ax 有很多可能... lea eax, [0]mov eax, 0FFFF0000h//所有常量形成0..0FFFFh
..
我是学习操作系统开发的新手.从我读的书中,它说引导加载程序会将第一个 MBR 复制到 0x7c00 中,并从那里以实模式启动. 而且,示例以 16 位汇编代码开头.但是,当我查看今天的 linux 内核时,arch/x86/boot 有 'header.S' 和 'boot.h',但实际代码在 main.c 中实现. 这似乎对“不编写程序集"很有用.但是,这在 Linux 中具体是如何
..
我的问题是我编写了一个代码,应该将结果输出到一组连接到并行端口的 LED 中.当我运行代码时,它几乎什么也没做.我的导师告诉我,代码运行得太快了,我的眼睛没有看到发生了什么. 我发现有几种方法可以进行时间延迟,我尝试循环 NOP,但我认为我无法真正确定发生了什么.有没有更好的办法? 我在这里有一部分代码,我必须在其中添加时间延迟: org 100h移动斧头,0第 378 章出 dx,
..
去年 1 月,我将 x86 汇编作为一种爱好,这样我就可以制作可以在旧的 8086 计算机(如 PCj 和 Tandy 1000)上运行的游戏,但我找到的书籍并没有完全介绍这个特定主题.虽然一些 dos 和 bios 中断可以完成这项工作,但它们远非完美. 我的主要问题是在不停止程序的情况下读取按键的键盘状态.我找到了一些方法,但它们非常有限.INT 21h, AH 0Ch 读取最后按下的键
..