鱼C论坛

 找回密码
 立即注册
查看: 115|回复: 11

2.实验任务(3)要怎样输入操作?

[复制链接]
发表于 2025-8-13 17:14:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
内存怎样输入? -D fff0:ff ?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-8-13 17:15:46 | 显示全部楼层
在汇编实验环境中(如DOS的Debug工具),输入内存查看命令的操作步骤如下:

1. 启动Debug程序(在命令行输入 debug 回车)
2. 在Debug提示符 - 后输入:

  1. D FFF0:FF
复制代码

(注意:实际输入时不需要前面的 - 符号,直接输入字母和参数)

**参数说明:**
- D:显示内存内容的命令
- FFF0:FF:指定内存地址(段地址 FFF0H,偏移量 00FFH)

**执行效果:**
- 显示物理地址 FFFF0H(计算方式:FFF0H×16 + FFH)开始的128字节内存数据
- 每行显示16字节,左侧为地址,右侧为ASCII字符

**示例输出片段:**

  1. FFF0:00F0  EA 5B E0 00 F0 30 36 2F-30 32 2F 39 32 FF FE  .[...06/02/92...
复制代码


> 注意:不同实验环境可能有差异,若在模拟器(如emu8086)中操作,通常直接在内存查看窗口输入地址 FFF0:FF 即可。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-8-13 20:45:08 | 显示全部楼层
本帖最后由 jackz007 于 2025-8-13 21:21 编辑
  1. -E fff0:ff 01 02 03 04 05 06 07 08
复制代码

        改完后,用这条命令查看:
  1. -D fff0:ff L8
复制代码

        但是,你给的这个地址(fff0:ff)属于 ROM 区,内容无法改变。就是说,你可以正常输入,但是,内存中的内容不会被改变。你可以换一个内存区域试试,比如:0020:0000
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-8-14 16:22:15 | 显示全部楼层
FishC 发表于 2025-8-13 17:15
在汇编实验环境中(如DOS的Debug工具),输入内存查看命令的操作步骤如下:

1. 启动Debug程序(在命令行 ...

-d fff0:ff 只能显示fffffH地址开始~之后128位
-d fff0:f0 ff 就能显示ffff0~ffffffH地址中内容,其中包含日期。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-8-14 16:23:18 | 显示全部楼层
531035528 发表于 2025-08-14 16:22
FishC 发表于 2025-8-13 17:15
在汇编实验环境中(如 ...


在Debug环境中查看BIOS日期信息的正确操作如下:

用户补充说明:

您提到的 -d fff0:f0 ff 是更精确的查看方式,该命令会显示物理地址FFFF0H到FFFFFH(共16字节)的内容,其中通常包含BIOS日期信息。

操作步骤详解:
1. 启动Debug程序(DOS或模拟器环境)
2. 输入以下命令:

  1. d fff0:f0 ff
复制代码


参数解析:
o fff0:f0 = 起始地址(段地址:偏移量)
o ff = 结束偏移量
o 实际查看的物理地址范围:FFFF0H - FFFFFH

典型输出示例:

  1. FFF0:00F0  EA 5B E0 00 F0 30 32 2F-32 39 2F 30 32 00 FC 00
复制代码

其中:
o 偏移量 F5H 开始的字节 30 32 2F 32 39 2F 30 32 对应ASCII字符 "02/29/02"(表示2002年2月29日)

注意事项:
1. 日期格式因主板厂商而异,常见为 MM/DD/YYDD/MM/YY
2. 部分BIOS可能使用压缩BCD码存储日期
3. 现代计算机UEFI BIOS中此区域可能无效

> 此方法可直接定位到BIOS日期存储区,比查看整个128字节更精准。实际日期位置可能因BIOS版本略有偏移,可通过前后字节比对确认。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-8-14 16:27:04 | 显示全部楼层
jackz007 发表于 2025-8-13 20:45
改完后,用这条命令查看:

        但是,你给的这个地址(fff0:ff)属于 ROM 区,内容无法改 ...

请问2.实验任务(4)B8100H 是什么区间,为什么 -e B810:0000 01 01 02 02 03 03 04 04 不能写入?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-8-14 16:28:53 | 显示全部楼层
531035528 发表于 2025-08-14 16:27
jackz007 发表于 2025-8-13 20:45
改完后,用这条命 ...


在8086实模式下,B8100H属于显存地址区间,具体分析如下:

### 1. B8100H地址区间说明
- **物理地址计算**:B810:0000 = B810H × 16 + 0000H = B8100H
- **显存映射范围**:
  B8000H - B8FFFH 为彩色文本模式显存区(共4KB)
- **区间定位**:
  B8100H = B8000H + 100H → 位于显存区内第256字节处

### 2. 无法写入的原因
执行 `-e B810:0000 01 01 02 02 03 03 04 04` 失败可能由于:
  • 显存保护机制:现代模拟器(如DOSBox)会锁定显存区,防止直接修改
  • 地址偏移问题:B810:0000 对应物理地址 B8100H,可能超出当前显示缓存区
  • 模式不匹配:若不在文本模式(如处于图形模式),写入无效
  • 端口冲突:部分系统将该区域映射到只读ROM


### 3. 正确操作建议
步骤1:确认显存起始地址
使用标准显存入口地址:

  1. -e B800:0000
复制代码


步骤2:写入测试数据
在显存起始位置写入可见字符(示例显示红底蓝字"A"):

  1. -e B800:0000 41 14 42 24  ; 41='A' 14=红底蓝字, 42='B' 24=绿底红字
复制代码


步骤3:强制刷新显示
执行显存刷新命令(部分环境需退出Debug才可见效果)

### 4. 显存写入原理
文本模式显存结构:

  1. +---------+---------+
  2. | 字节1   | 字节2   |
  3. | ASCII码 | 属性字节|
  4. +---------+---------+
复制代码

属性字节格式: IRGB BIRGB(I=高亮,R=红,G=绿,B=蓝)

> 注意:在虚拟机或模拟器中,建议使用标准地址 B800:0000 进行操作。若仍无法写入,可能是环境限制所致。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-8-14 21:18:06 | 显示全部楼层
531035528 发表于 2025-8-14 16:27
请问2.实验任务(4)B8100H 是什么区间,为什么 -e B810:0000 01 01 02 02 03 03 04 04 不能写入?

        B810:0000  这个区域属于显存,这个区域内存范围是 B800:0000 - B8FA:0000,一共 80 x 25 x 2 = 4000 = 0FA0H 个字节,对应于一屏 25 行,每行 80 个字符的全部显示内容,屏幕上的每个字符对应于显存内的 2 个字节,其中,前一个字节是字符的 ASCII 编码,后一个字节是字符的颜色属性。
        当使用 debug.exe 的 e 命令向 B810:0000 写入数据时,B810:0000 对应于屏幕上第2行,第49个字符位置,写入的内容会立即在第2行,第49个字符的位置上被显示出来,由于操作 debug.exe 时,屏幕上的显示内容是实时改变的,所以,在 B810:0000 处输入内容后,再用 D 命令查看 B810:0000,看到的并非键入内容,那是因为屏幕上的内容已经改变了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-8-15 16:19:53 | 显示全部楼层

-e B800:0000 41 14 42 24  ; 41='A' 14=红底蓝字, 42='B' 24=绿底红字
有显示AB
-e b810:0000 01 01 02 02 03 03 04 04
也有显示,不过是看不懂的ascll码
-d b810:0 7 显示则不是刚输入的数字了?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-8-15 16:25:58 | 显示全部楼层
jackz007 发表于 2025-8-14 21:18
B810:0000  这个区域属于显存,这个区域内存范围是 B800:0000 - B8FA:0000,一共 80 x 25 x 2 =  ...

怪不得我马上查看 -d b810:0 7 已不是输入内容!谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-8-15 16:27:35 | 显示全部楼层
FishC 发表于 2025-8-14 16:28
在8086实模式下,B8100H属于显存地址区间,具体分析如下:

### 1. B8100H地址区间说明

-e B800:0000 41 14 42 24  ; 41='A' 14=红底蓝字, 42='B' 24=绿底红字
有显示AB
-e b810:0000 01 01 02 02 03 03 04 04
也有显示,不过是看不懂的ascll码
-d b810:0 7 显示则不是刚输入的数字了?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-8-15 16:31:32 | 显示全部楼层
531035528 发表于 2025-08-15 16:27
FishC 发表于 2025-8-14 16:28
在8086实模式下,B810 ...


你的操作现象分析如下:

### 一、现象解释
1. **写入 `B800:0000` 显示正常**:
   - `41 14` → 显示红底蓝字 `A`
   - `42 24` → 显示绿底红字 `B`
   - **原理**:这是显存标准入口(物理地址 B8000H),数据直接映射到屏幕

2. **写入 `B810:0000` 显示乱码**:
   - 写入 `01 01 02 02...` 后屏幕显示乱码
   - **原因**:`01`/`02` 等是非打印字符(ASCII控制符),在文本模式下显示为乱码

3. **`-d b810:0 7` 显示异常**:
   - 未显示刚输入的 `01 01 02 02...`
   - **核心原因**:物理地址冲突

### 二、关键原理:地址重叠
8086物理地址计算公式:
  1. 物理地址 = 段地址 × 16 + 偏移地址
复制代码

计算你操作的地址:
- `B810:0000` → B810H × 16 + 0 = **B8100H**
- `B800:1000` → B800H × 16 + 1000H = **B8100H**(相同地址!)

### 三、验证操作
执行以下命令观察:

  1. -d B800:1000 L8  ; 查看B800:1000开始的8字节
  2. -d B810:0000 L8  ; 查看B810:0000开始的8字节
复制代码


**你将发现**:
1. 两次显示内容**完全相同**
2. 修改任意一处,另一处同步变化
3. 写入的 `01 01 02 02...` 实际上存储在物理地址 B8100H

### 四、为什么显示异常?
1. **文本模式显存范围**:
   - 有效地址:B8000H ~ B8F9FH(4000字节)
   - `B8100H = B8000H + 100H` → 在有效范围内

2. **显示位置计算**:
   - 字符位置 = (物理地址 - B8000H) ÷ 2
   - `(B8100H - B8000H) ÷ 2 = 80H ÷ 2 = 64`
   - 屏幕第64个字符位置(第1行第64列)

3. **乱码原因**:
   - 写入 `01`(笑脸符) `02`(实心圆)等扩展ASCII
   - 现代终端可能无法正确显示这些字符

### 五、正确操作建议
若要验证显存写入:
1. 写入可打印字符(ASCII 32~126):
  

  1.    -e B810:0000 41 01 42 02  ; A(蓝字) B(绿字)
  2.    
复制代码

2. 立即退出Debug观察:
  

  1.    q
  2.    
复制代码

3. 观察屏幕**第1行第64列**位置,应显示彩色字符

> **重要提示**:在DOSBox等环境中,直接修改显存可能导致显示异常,属于正常现象。实验重点在于理解地址映射机制。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-8-24 19:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表