摸你穷 发表于 2021-10-3 23:19:28

汇编小白求助

我学习到了小甲鱼的,汇编入门 零基础入门学习汇编语言 p30遇到一个问题
assume cs:abc
abcsegment
                      dw 0123H,0456,0789,0abcH,0defH,ofedH,0cbaH,0987H                        这里都是16进制的
                      dw 0,0,0,0,0,0,0,0                                                                              这里不知道是16进制还是十进制当然都无所谓以为他都是0
start:mov ax,cs
      mov ss,ax
      mov sp,32                就这里这个32我不知道是16进制还是十进制,小甲鱼没有说,但是什么第一个dw是16进制的他占用了0-15,下面那个占用了16-31的那他们都是16进制才对吧可为什么不标H还是说什么(主要是收到弹幕影响)

人造人 发表于 2021-10-3 23:55:17

没有加 h,就是 10 进制

摸你穷 发表于 2021-10-4 20:40:06

人造人 发表于 2021-10-3 23:55
没有加 h,就是 10 进制

那么这个32的十进制是怎么来的

人造人 发表于 2021-10-4 20:48:53

摸你穷 发表于 2021-10-4 20:40
那么这个32的十进制是怎么来的

随便给的一个数,够用就可以了

摸你穷 发表于 2021-10-4 21:57:58

人造人 发表于 2021-10-4 20:48
随便给的一个数,够用就可以了

ss和sp是栈底按道理应该是32h的为什么这里却是十进制我搞不懂,你如果会能不能说清楚一点

人造人 发表于 2021-10-4 22:21:42

摸你穷 发表于 2021-10-4 21:57
ss和sp是栈底按道理应该是32h的为什么这里却是十进制我搞不懂,你如果会能不能说清楚一点

你贴的这个代码中的那个 32 的确是随便指定的

摸你穷 发表于 2021-10-5 00:14:12

人造人 发表于 2021-10-4 22:21
你贴的这个代码中的那个 32 的确是随便指定的

这个是我在B站的鱼C_小甲鱼UP主的【汇编入门】《零基础入门学习汇编语言》P30包含多个段的程序02视频里的04:15
程序如下:
assume cs:codesg
abcsegment
                      dw 0123H,0456,0789,0abcH,0defH,ofedH,0cbaH,0987H                        
                      dw 0,0,0,0,0,0,0,0                                                                              
start:mov ax,cs
      mov ss,,ax
      mov sp,32
      mov bx,0
      mov cx,8
      s:push cs:
         add bx,2
         loop s
      
      mov bx,0
      mov cx,8
    s0:pop cs:
      add bx,2
      loop s0
       mov ax,4c00h
       int 21h
codesg ends
end start

将程序写入Visual Studio Code中保存为asm格式在用win7.32位的命令提示符用Masm.exe和Link.exe运行asm得到exe文件用debug运行exe文件运行到写指令时mov sp,,32可是debug是20

我的问题是栈底的偏移地址应该是32但是在debug中却是20了是为什么

人造人 发表于 2021-10-5 09:21:39

摸你穷 发表于 2021-10-5 00:14
这个是我在B站的鱼C_小甲鱼UP主的【汇编入门】《零基础入门学习汇编语言》P30包含多个段的程序02视频里的 ...

debug 中默认是 16 进制的
mov sp,,32
让栈顶指向第 2 个 dw 的后面,就是 start 的位置

人造人 发表于 2021-10-5 09:35:10

1. 代码中有好多的错误,提问题就认真一点
2. mov sp,,32,是 mov sp,32
3. mov sp, 32,相当于 mov sp, start



摸你穷 发表于 2021-10-6 00:09:34

人造人 发表于 2021-10-5 09:35
1. 代码中有好多的错误,提问题就认真一点
2. mov sp,,32,是 mov sp,32
3. mov sp, 32,相当于 mov sp,...

抱歉我写回复的时候已经是晚上了没注意,可是你看到了你的debug上sp变成20了就是32的十进制变成了16进制20了。我的意思是我因不应该写代码的时候在32的后面加H让他写出来是16进制的

人造人 发表于 2021-10-6 00:11:14

摸你穷 发表于 2021-10-6 00:09
抱歉我写回复的时候已经是晚上了没注意,可是你看到了你的debug上sp变成20了就是32的十进制变成了16进制2 ...

没看懂你的问题

摸你穷 发表于 2021-10-6 23:08:27

人造人 发表于 2021-10-6 00:11
没看懂你的问题

那我问一下这里为什么要设定SP是32,还是说什么数字都行?
还有为什么我设定是32,debug却变成了20

人造人 发表于 2021-10-6 23:34:28

摸你穷 发表于 2021-10-6 23:08
那我问一下这里为什么要设定SP是32,还是说什么数字都行?
还有为什么我设定是32,debug却变成了20

mov sp, 32,相当于 mov sp, start
让栈顶指向第 2 个 dw 的后面,就是 start 的位置
debug 中默认是 16 进制的

摸你穷 发表于 2021-10-6 23:56:29

本帖最后由 摸你穷 于 2021-10-7 00:00 编辑

人造人 发表于 2021-10-6 23:34
mov sp, 32,相当于 mov sp, start
让栈顶指向第 2 个 dw 的后面,就是 start 的位置
debug 中默认是 1 ...

代码中第1个dw和第2个dw一共占用了31个内存单元而栈顶应该指向31的下一个内存单元也就是32
但编译器默认是10进制如果不在32后面加H(mov sp,32H)的话在debug中sp就会变成20
我的问题就是这个H应不应该加

人造人 发表于 2021-10-7 00:01:30

摸你穷 发表于 2021-10-6 23:56
代码中第1个dw和第2个dw一共占用了31个内存单元而栈顶应该指向31的下一个内存单元也就是32
但编译器默认 ...

不应该加,debug 默认是 16 进制的
debug 中显示的 20 是十六进制的,换算成十进制就是 32

摸你穷 发表于 2021-10-7 23:12:19

人造人 发表于 2021-10-7 00:01
不应该加,debug 默认是 16 进制的
debug 中显示的 20 是十六进制的,换算成十进制就是 32

他们不是占用了31个内存单元吗
debug显示20不就等于他们占用了19个内存单元吗

人造人 发表于 2021-10-7 23:43:01

摸你穷 发表于 2021-10-7 23:12
他们不是占用了31个内存单元吗
debug显示20不就等于他们占用了19个内存单元吗

不是 31 个,是 32 个,你再看一看

摸你穷 发表于 2021-10-7 23:48:44

人造人 发表于 2021-10-7 23:43
不是 31 个,是 32 个,你再看一看

他是占用31个但是栈顶要选择下一位内存地址
你直接回答他们明明占用32个内存单元
debug显示20不就等于他们占用20个内存单元吗

摸你穷 发表于 2021-10-7 23:53:29

啊不要绕 不要绕了 你懂我的意思吧,求求你回答我的问题啊我就是这里不懂啊

人造人 发表于 2021-10-8 00:15:25

摸你穷 发表于 2021-10-7 23:48
他是占用31个但是栈顶要选择下一位内存地址
你直接回答他们明明占用32个内存单元
debug显示20不就等于 ...

是 32 个,一个 dw 是 2 个,一共 16 个 dw

debug 显示的 20 不是占用 20 个, 是占用 20h 个
你在 debug 中看到的数字全部都是 十六进制的
页: [1] 2
查看完整版本: 汇编小白求助