laoqian 发表于 2023-8-13 15:56:43

王爽汇编语言第二版实验3问题

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

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

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

为什么实验里指令中的“10”是10进制而不是16进制呢?

isdkz 发表于 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"。

学习编程中的Ben 发表于 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指令,以下是一个示例代码片段:

section .text
    global _start

_start:
    ; 假设这里有一些其他指令

    ; 执行 add sp,10
    add sp,10

    ; 假设这里有一些其他指令

    ; 退出程序
    mov eax, 1      ; syscall number for exit
    xor ebx, ebx      ; status: 0
    int 0x80          ; call kernel

section .bss
    ; 这里定义未初始化的数据段


请注意,上述代码中使用了十进制数值10来表示操作数。如果您想使用十六进制表示,可以将操作数写为add sp,0xA。这两种写法在执行时效果是一样的,只是表示方式不同。

陶远航 发表于 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"是等价的,只是采用了不同的进制来表示同一个值。
如果问题已经解决,请设置最佳答案

laoqian 发表于 2023-8-13 16:27:16

看了上面各位大佬的回答,还是没明白这个问题:在实验中add sp,10这条指令中的“10”为什么执行指令时是十进制数字,而在debug中用a命令写入的指令add sp,10,这个“10”就是16进制(从指令执行后ax的变化可以看出来这个“10”是16进制)。

laoqian 发表于 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进制来执行的。

lm68140318 发表于 2023-8-13 18:21:55

在 debug中    默认都是16进制   10=10h
在编辑器中 比如Nope++ ,区分 10进制 和 16进制,   10编辑后就A      ,10h编译后 就是10h


希望给个赞
页: [1]
查看完整版本: 王爽汇编语言第二版实验3问题