531035528 发表于 2026-10-17 15:11:22

检测点3.1

在我的电脑
debug
d 0:0 1f
0000:0000 9e 0f c9 00 ff 13 ......
0000:001f 65 04 70 00 54 ff......
与书本不同,怎么办?

FishC 发表于 2026-10-17 15:11:38

这是正常现象,不用改。

d 0:0 1f 显示的是你当前机器 0000:0000~0000:001F 的内存内容。这段属于中断向量表,内容由 BIOS、硬件、DOSBox 配置等决定,不是固定值。书上的 9E 0F C9 00... 只是作者当时机器的内存快照。

所以:


[*]做检测点3.1时,如果题目已经给出书本内存数据,就按书本数据计算。
[*]如果题目要求观察你自己的机器,就按你屏幕上的数据计算。
[*]不要用 e 命令强行改成书上的值,尤其真实 DOS 下这段是中断向量表,乱改可能出问题。


你只要确认命令 d 0:0 1f 能正常显示即可。另外你贴的第二行地址若写成 0000:001f,一般第二行应从 0000:0010 开始,可能是抄写或截断问题。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

531035528 发表于 2026-10-17 15:14:28

FishC 发表于 2026-10-17 15:11
这是正常现象,不用改。

d 0:0 1f 显示的是你当前机器 0000:0000~0000:001F 的内存内容。这段属于中断向 ...

谢谢

FishC 发表于 2026-10-17 15:14:34

531035528 发表于 2026-10-17 15:14
FishC 发表于 2026-10-17 15:11
这是正常现象,不用 ...

不客气,继续加油!遇到不明白的汇编内存图,随时来问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

531035528 发表于 2026-10-17 15:55:31

FishC 发表于 2026-10-17 15:14
不客气,继续加油!遇到不明白的汇编内存图,随时来问。

以上回复来自 FishC AI 小助理,如未能正确 ...

我想问,执行了
jmp 0ff0:0100
后,cs:ip 变成了 0ff0:0100(即 cs=0ff0h ip=0100h )还是 变成了 cs =1000hip=0000h ?
因为在课本2.11节学过 jmp 段地址:偏移地址 指令改变的是 cs:ip 两个的内容,
虽然两个的物理地址一样的,可是 cs 和 ip的值 完全不一样的,答案上为什么会是 第二种?直接成了 cs=1000h ip=0000h

FishC 发表于 2026-10-17 15:55:40

531035528 发表于 2026-10-17 15:55
FishC 发表于 2026-10-17 15:14
不客气,继续加油! ...

结论:执行 jmp 0ff0:0100 后,寄存器值是:

CS = 0FF0H
IP = 0100H

不是 CS=1000H,IP=0000H。

原因:
jmp 段地址:偏移地址 是远跳转,CPU 会把冒号前的值装入 CS,冒号后的值装入 IP。它不会自动把 0FF0:0100 “约分”成 1000:0000。

它们只是物理地址相同:

0FF0H × 16 + 0100H = 10000H
1000H × 16 + 0000H = 10000H

所以:

如果题目问“执行后 CS 和 IP 的值”,答案是 0FF0:0100。
如果题目问“跳转到的物理地址是多少”,则是 10000H。
如果答案写成 1000:0000,那只是用另一种“段:偏移”表示同一个物理地址,并不是 CPU 真的把 CS 改成了 1000H。

因此,若答案直接说 CS=1000H、IP=0000H,严格来说是不对的;除非题目问的是“等价的逻辑地址表示”或题目上下文另有说明。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 检测点3.1