鱼C论坛

 找回密码
 立即注册
查看: 7207|回复: 26

[已解决]汇编小白求助

[复制链接]
发表于 2021-10-3 23:19:28 | 显示全部楼层 |阅读模式

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

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

x
我学习到了小甲鱼的,汇编入门 零基础入门学习汇编语言 p30  遇到一个问题
assume cs:abc
abc  segment
                      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-8 00:15:25
摸你穷 发表于 2021-10-7 23:48
他是占用31个但是栈顶要选择下一位内存地址
你直接回答他们明明占用32个内存单元
debug显示20不就等于 ...

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

debug 显示的 20 不是占用 20 个, 是占用 20h 个
你在 debug 中看到的数字全部都是 十六进制的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-3 23:55:17 | 显示全部楼层
没有加 h,就是 10 进制
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-4 20:40:06 | 显示全部楼层
人造人 发表于 2021-10-3 23:55
没有加 h,就是 10 进制

那么这个32的十进制是怎么来的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-4 20:48:53 | 显示全部楼层
摸你穷 发表于 2021-10-4 20:40
那么这个32的十进制是怎么来的

随便给的一个数,够用就可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-4 21:57:58 | 显示全部楼层
人造人 发表于 2021-10-4 20:48
随便给的一个数,够用就可以了

ss和sp是栈底按道理应该是32h的为什么这里却是十进制我搞不懂,你如果会能不能说清楚一点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

你贴的这个代码中的那个 32 的确是随便指定的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-5 00:14:12 | 显示全部楼层
人造人 发表于 2021-10-4 22:21
你贴的这个代码中的那个 32 的确是随便指定的

这个是我在B站的鱼C_小甲鱼UP主的【汇编入门】《零基础入门学习汇编语言》P30包含多个段的程序02视频里的04:15
程序如下:
assume cs:codesg
abc  segment
                      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:[bx]
         add bx,2
         loop s
        
        mov bx,0
        mov cx,8
    s0:pop cs:[bx]
        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了是为什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

debug 中默认是 16 进制的
mov sp,,32
让栈顶指向第 2 个 dw 的后面,就是 start 的位置
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-5 09:35:10 | 显示全部楼层
1. 代码中有好多的错误,提问题就认真一点
2. mov sp,,32,是 mov sp,32
3. mov sp, 32,相当于 mov sp, start

2.png
1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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进制的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

没看懂你的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-6 23:08:27 | 显示全部楼层

那我问一下这里为什么要设定SP是32,还是说什么数字都行?
还有为什么我设定是32,debug却变成了20
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 进制的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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应不应该加
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

不应该加,debug 默认是 16 进制的
debug 中显示的 20 是十六进制的,换算成十进制就是 32
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

他们不是占用了31个内存单元吗
debug显示20不就等于他们占用了19个内存单元吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

不是 31 个,是 32 个,你再看一看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-7 23:48:44 | 显示全部楼层
人造人 发表于 2021-10-7 23:43
不是 31 个,是 32 个,你再看一看

他是占用31个但是栈顶要选择下一位内存地址
你直接回答他们明明占用32个内存单元
debug显示20不就等于他们占用20个内存单元吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-7 23:53:29 | 显示全部楼层
啊不要绕 不要绕了 你懂我的意思吧,求求你回答我的问题啊我就是这里不懂啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 中看到的数字全部都是 十六进制的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 06:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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