鱼C论坛

 找回密码
 立即注册
查看: 301|回复: 30

P11 寄存器(CPU工作原理)06 Debug问题

[复制链接]
发表于 2024-3-11 00:57:12 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 枫尘冉 于 2024-3-11 01:00 编辑

Win10进入不到Debug里面怎么办
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-3-11 00:57:24 | 显示全部楼层
哈哈,Win10进不到Debug模式可不能急,我们来一步步解决这个问题。

首先,确保你的电脑上已经安装了Visual Studio(VS)软件。如果没有安装的话,去官网(https://visualstudio.microsoft.com/)下载并安装一个合适的版本。

接下来,打开VS软件,点击菜单栏的“文件”->“新建”->“项目”。在弹出的对话框中选择“空项目”,然后点击“确定”。

项目创建完成后,你会看到一个空白的代码编辑器。在代码编辑器中输入以下代码:

  1. #include <iostream>

  2. int main() {
  3.     int a = 10;
  4.     std::cout << "The value of a is: " << a << std::endl;
  5.     return 0;
  6. }
复制代码


这是一个简单的C++程序,它定义了一个整型变量a并给它赋值为10,然后输出a的值到控制台。

接下来,点击菜单栏的“调试”->“开始调试”->“开始执行”。你还可以使用快捷键F5来启动调试。

此时,VS会自动编译你的代码,并启动一个调试会话。你会看到控制台窗口弹出,并显示出程序输出的内容:“The value of a is: 10”。

这样,你就成功进入了Debug模式。你可以在调试过程中观察程序的变量值、执行流程等,帮助你分析程序的行为。

希望这个解决方案对你有帮助,如果还有其他问题,尽管提问哦!{:5_137:}

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-11 01:15:46 | 显示全部楼层
FishC 发表于 2024-3-11 00:57
哈哈,Win10进不到Debug模式可不能急,我们来一步步解决这个问题。

首先,确保你的电脑上已经安装了Visu ...

不会下载怎么办,没有更简单的方法吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-11 01:15:57 | 显示全部楼层
枫尘冉 发表于 2024-03-11 01:15
不会下载怎么办,没有更简单的方法吗?


当然有更简单的方法啦!如果你只是想进行简单的调试,可以使用在线代码编辑器和调试器。下面我介绍一个比较常用的在线平台——Replit。

首先,打开浏览器并前往Replit网站(https://replit.com/)。在右上角点击“Sign Up”按钮,如果你没有账号的话就注册一个新账号。

注册完成后,点击页面上方的“+ New repl”按钮,选择“C++”作为编程语言。接着,给你的项目取一个名字,然后点击“Create repl”按钮。此时,一个新的C++项目就创建好了。

在左侧的文件列表中,你会看到一个名为“main.cpp”的文件。点击它,将打开一个在线的代码编辑器。在这里,你可以编写你的C++代码。

接下来,输入以下代码:
  1. #include <iostream>

  2. int main() {
  3.     int a = 10;
  4.     std::cout << "a的值为:" << a << std::endl;
  5.     return 0;
  6. }
复制代码


代码编写完成后,点击页面上方的绿色运行按钮。Replit会自动编译并运行你的代码,在右侧的控制台输出窗口中,你将看到程序输出的结果。

这样,你就可以在Replit平台上进行简单的调试了,而无需下载和安装额外的软件。当然,如果你要进行更复杂的调试或者学习更深入的CPU工作原理,还是推荐使用本地开发环境,如Visual Studio。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-11 01:25:41 | 显示全部楼层
FishC 发表于 2024-3-11 01:15
当然有更简单的方法啦!如果你只是想进行简单的调试,可以使用在线代码编辑器和调试器。下面我介绍一个 ...

创建不了账号呀,还有没有别的办法?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-11 01:25:53 | 显示全部楼层
枫尘冉 发表于 2024-03-11 01:25
创建不了账号呀,还有没有别的办法?


嗯,如果你在Replit上创建不了账号,也可以尝试使用其他在线代码编辑器和调试器。有一个叫做CodePen(https://codepen.io/)的平台非常适合这个需求。打开CodePen网站后,点击右上角的“Sign Up”按钮注册一个账号。注册完成后,点击页面左上角的“New Pen”按钮创建一个新的项目。此时会有一个空白的代码编辑器出现在页面上。在这里,你可以输入以下代码:
  1. #include <iostream>int main() {    int a = 10;    std::cout << "a的值是:" << a << std::endl;    return 0;}
复制代码
然后点击右上角的“Run”按钮,代码就会被编译和执行。你会在页面下方的输出窗口中看到程序输出的结果。

总之,这些在线编辑器和调试器不需要你下载任何软件,直接在浏览器中就可以使用,非常方便。希望这些方法对你有帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-11 23:47:07 | 显示全部楼层
装一个虚拟机,在虚拟机里面安装xp,用xp学习8086汇编语言
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-12 01:35:04 | 显示全部楼层
人造人 发表于 2024-3-11 23:47
装一个虚拟机,在虚拟机里面安装xp,用xp学习8086汇编语言

这也太麻烦了吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-12 01:51:35 | 显示全部楼层

学编程你还怕麻烦?
最简单的办法就是不学编程
对不对?
这肯定就不麻烦了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-12 01:56:36 | 显示全部楼层
人造人 发表于 2024-3-12 01:51
学编程你还怕麻烦?
最简单的办法就是不学编程
对不对?

麻烦是一回事,问题是我不会搞呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-12 01:58:41 | 显示全部楼层
本帖最后由 枫尘冉 于 2024-3-12 02:05 编辑
人造人 发表于 2024-3-12 01:51
学编程你还怕麻烦?
最简单的办法就是不学编程
对不对?


刚好问一下你
检测点3.1

(1)  在DEBUG中,用 "D 0:0 lf" 查看内存,结果如下:  

0000:0000 70 80 F0 30 EF 60 30 E2-00 80 80 12 66 20 22 60  

0000:0010 62 26 E6 D6 CC 2E 3C 3B-AB BA 00 00 26 06 66 88  

下面的程序执行前,AX=0,BX=0,写出每条汇编指令执行完后相关寄存器中的值

mov ax,1

mov ds,ax

mov ax,[0000]  ax= 2662H(答案)  

上面的ax为什么等于2662H
不应该等于8070的吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-12 02:14:55 | 显示全部楼层
枫尘冉 发表于 2024-3-12 01:58
刚好问一下你
检测点3.1

mov ax,[0000]    从ds:0的位置读取一个字到ax
ds的值是1
段寄存器的值左移4位(乘以16),然后再加偏移,就是要读取的那个字数据所在的地址
1 << 4 == 0x10
0x10 + 0 == 0x10

所以从0x10的地方读取

0000:0010
段从0开始,偏移是0x10
(0 << 4) + 0x10 == 0x10
所以就从0000:0010开始读取
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-12 11:32:38 | 显示全部楼层
8086通过 段地址:偏移地址 的形式访问内存
0000:0010 就是 (0 << 4) + 0x10 == 0x10,物理内存地址就是 0x10
0001:0000 就是 (1 << 4) + 0 == 0x10,也是物理内存地址 0x10

0000:0010和0001:0000指的都是同一个物理内存地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-12 23:53:36 | 显示全部楼层
人造人 发表于 2024-3-12 11:32
8086通过 段地址:偏移地址 的形式访问内存
0000:0010 就是 (0

谢谢,如果我没想错应该就是想对了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-13 01:09:13 | 显示全部楼层
人造人 发表于 2024-3-12 11:32
8086通过 段地址:偏移地址 的形式访问内存
0000:0010 就是 (0

这个mov ax,1
这个数字1是十进制的吧,没加大写H
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-13 12:40:45 | 显示全部楼层
枫尘冉 发表于 2024-3-13 01:09
这个mov ax,1
这个数字1是十进制的吧,没加大写H

debug中默认是16进制
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-14 00:22:08 | 显示全部楼层
人造人 发表于 2024-3-13 12:40
debug中默认是16进制

所以mov ax,1与mov ax,1H是一样的吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-14 00:24:56 | 显示全部楼层
人造人 发表于 2024-3-11 23:47
装一个虚拟机,在虚拟机里面安装xp,用xp学习8086汇编语言

我装了windows10自带的虚拟机,这个xp是什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-14 09:59:56 | 显示全部楼层
枫尘冉 发表于 2024-3-14 00:22
所以mov ax,1与mov ax,1H是一样的吧

首先,数字1还分多少进制吗?多少进制中的1不是1 ?
另外,debug中默认就是16进制,没有后缀h,有了反而不行
你可以在debug中试试么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-14 10:01:40 | 显示全部楼层
枫尘冉 发表于 2024-3-14 00:24
我装了windows10自带的虚拟机,这个xp是什么

百度,windows xp
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-2 23:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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