鱼C论坛

 找回密码
 立即注册
查看: 490|回复: 6

[已解决]王爽汇编语言第二版实验3问题

[复制链接]
发表于 2023-8-13 15:56:43 | 显示全部楼层 |阅读模式

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

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

x
王爽汇编语言第二版实验3,里面有条指令add sp,10。

在debug中查看时,显示指令为add sp,+0A。

但是如果在debug中用A命令输入指令add sp,10,用t指令执行的就是add sp,10而不是add sp,+0A。

为什么实验里指令中的“10”是10进制而不是16进制呢?
最佳答案
2023-8-13 18:21:55
在 debug中    默认都是16进制   10=10h
在编辑器中 比如Nope++ ,区分 10进制 和 16进制,   10编辑后就A      ,10h编译后 就是10h


希望给个赞
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-13 15:56:57 | 显示全部楼层
在汇编语言中,数字可以表示为十进制或十六进制。在实验中,指令中的"10"是十进制表示法。在debug中,指令的显示格式是十六进制,所以会显示为"+0A"。这只是一种显示格式,实际上指令的含义是相同的。

在debug中,使用"A"命令输入指令时,可以直接输入十六进制的数值,而不需要加上前缀"0x"。所以当你输入"add sp,10"时,debug会将其解释为十进制的10,而不是十六进制的10。而使用"t"命令执行指令时,debug会将其转换为十六进制表示法,所以执行的指令是"add sp,+0A"。

总结来说,实验中的指令中的"10"是十进制表示法,在debug中显示为十六进制的"+0A"。在debug中输入指令时,可以直接使用十六进制的数值,而不需要加上前缀"0x"。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-13 15:57:08 | 显示全部楼层
引导部分:
在王爽汇编语言第二版实验3中,涉及到指令add sp,10的问题,您注意到在debug中查看时,该指令显示为add sp,+0A,但在使用A命令输入指令add sp,10后,通过t指令执行却是add sp,10。您疑惑为什么实验中指令中的“10”是10进制而不是16进制。以下将对这个问题进行解答。

问题解答:
在汇编语言中,常数的表示方式是根据上下文环境决定的,通常使用十进制或十六进制表示。在王爽汇编语言第二版实验3中,add sp,10 这条指令中的“10”是使用十进制表示,而在debug中显示为add sp,+0A,其中“+0A”是十六进制表示。

这种情况下的解释如下:

- 当您在实验中看到add sp,10时,这是作者用来展示指令的书写格式,并且为了方便理解和记忆,直接使用了十进制数值10。
  
- 在debug工具中,指令显示为add sp,+0A,这是debug工具为了表达指令中的立即数(immediate value)而使用的十六进制表示方式。在汇编语言中,十六进制常常以前缀“0x”开始,如“0x0A”表示十进制的10。

- 当您使用A命令手动输入指令add sp,10后,由于您直接指定了十进制数值10,因此在执行时,计算机会按照您输入的十进制值来执行指令,而不会自动转换为十六进制。

综上所述,实验中指令的书写方式和debug工具中的显示方式有所不同,但它们在执行时都表示相同的操作。您可以根据实际需求,在不同的环境下使用十进制或十六进制表示数值。

完整代码示例:
假设您想在实验中执行add sp,10指令,以下是一个示例代码片段:
  1. section .text
  2.     global _start
  3. _start:
  4.     ; 假设这里有一些其他指令
  5.     ; 执行 add sp,10
  6.     add sp,10
  7.     ; 假设这里有一些其他指令
  8.     ; 退出程序
  9.     mov eax, 1        ; syscall number for exit
  10.     xor ebx, ebx      ; status: 0
  11.     int 0x80          ; call kernel
  12. section .bss
  13.     ; 这里定义未初始化的数据段
复制代码

请注意,上述代码中使用了十进制数值10来表示操作数。如果您想使用十六进制表示,可以将操作数写为add sp,0xA。这两种写法在执行时效果是一样的,只是表示方式不同。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2023-8-13 15:57:38 | 显示全部楼层
在王爽汇编语言第二版实验3中,指令中的数字是以十进制形式表示的。在debug工具中,为了方便输入和显示,用户可以使用A命令来输入指令。当你输入"A add sp,10"时,debug会将输入的十进制数转换为对应的十六进制表示,并将其作为指令来执行。所以在debug中显示的是"add sp,+0A"。

实际上,在汇编语言中,数字的表示方式是灵活的。你可以使用十进制、十六进制或其他进制来表示数字。在实际编写汇编代码时,你可以根据需要选择最适合的表示方式。

所以,指令中的"10"是以十进制表示,而不是固定的十六进制。在实验中,你也可以直接使用十六进制表示法来写指令,例如"add sp,0Ah"。这种表示方法与"add sp,10"是等价的,只是采用了不同的进制来表示同一个值。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-13 16:27:16 | 显示全部楼层
看了上面各位大佬的回答,还是没明白这个问题:在实验中add sp,10这条指令中的“10”为什么执行指令时是十进制数字,而在debug中用a命令写入的指令add sp,10,这个“10”就是16进制(从指令执行后ax的变化可以看出来这个“10”是16进制)。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-13 16:37:04 | 显示全部楼层
学习编程中的Ben 发表于 2023-8-13 15:57
引导部分:
在王爽汇编语言第二版实验3中,涉及到指令add sp,10的问题,您注意到在debug中查看时,该指令显 ...

您的回复中,当您使用A命令手动输入指令add sp,10后,由于您直接指定了十进制数值10,因此在执行时,计算机会按照您输入的十进制值来执行指令,而不会自动转换为十六进制。
但是使用A命令手动输入指令add sp,10后,在执行时指令时就是按照16进制来执行的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-13 18:21:55 | 显示全部楼层    本楼为最佳答案   
在 debug中    默认都是16进制   10=10h
在编辑器中 比如Nope++ ,区分 10进制 和 16进制,   10编辑后就A      ,10h编译后 就是10h


希望给个赞
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-1 01:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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