鱼C论坛

 找回密码
 立即注册
查看: 1789|回复: 13

【求解答】关于汇编语言的大疑问

[复制链接]
发表于 2013-4-8 18:08:46 | 显示全部楼层 |阅读模式

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

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

x
汇编语言第二版(王爽)这本书的6.2 在代码段中使用栈这一节内容的第128页的程序6.3
assume cs:codesg

codesg segment

     dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h

     dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0       用dw定义16个字型数据,在程序加载后,将取得16个字的内存空间,存放这16个数据。在后面的程序中将这段空间当作栈来使用

start:mov ax,cs
          mov ss,ax
          mov sp,30h               将设置栈顶ss:sp指向cs:30          (在这里,我的疑问出来了,我在看小甲鱼汇编语言的这一课,小甲鱼定义的dw 0,0,0,0,0,0,0,0 是八个字型数据作为栈来使用的,而不是按照书本的讲,可能书本的问题。cs指向的偏移地址是32,就是栈顶就是ss:32h.   而我书本里的就定义16个字型数据,偏移地址居然指向30,栈顶就是ss:30h   怎么回事呀?  )


          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






还有一个问题就是检测点6.1
题目:下面的程序实现依次用内存0:0~0:15单元中的内存改写程序中的数据,数据的传送用栈来进行,栈空间设置在程序内存。完成程序:
assume cs:codesg

codesg segment

     dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h

     dw 0,0,0,0,0,0,0,0,0,0              10个字单元用作栈空间

start:mov  ax,____(答案是:cs)
        mov ss,ax
        mov sp,____(答案是:1ah)   疑问就是在这里,答案应该是35h才对呀   怎么是1ah?怎么回事?

        mov ax,0
        mov ds,ax
        mov bx,0
        mov cx,8
     s:push [bx]
________________(答案是:pop cs:[bx])
       add bx,2
       loop s

      mov ax,4c00h
      int 21h

codesg ends

end  start

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-8 21:26:53 | 显示全部楼层
第一个问题没看懂,直接第二个问题

其实是因为版本的不同, 估计你找的答案是网上找的,
而那个答案的书的版本与你不同,
NO picture say a JB
二话不说,直接上图


QQ截图20130408212056.png

看到没, 这个版本程序第四行只有5个 0,
   5+8 = 13,  就是26个字节,
那么,见证奇迹的时刻到了 26 尽然等于 1ah,  就是这么巧,解释完毕!

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-9 03:29:54 | 显示全部楼层
这两个问题都是王爽大大的书几个版本存在一些差异导致的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-9 03:34:23 | 显示全部楼层
第一个问题如你所述的话确实有点奇怪,不知道是不是我理解错意思了,麻烦提供下图片,因为年代已久。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2013-4-9 12:45:51 | 显示全部楼层

甲鱼老师,你看看我截的你教程里说的那个程序图
WU8(AM6)BFX28TP$V_07%.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2013-4-9 12:50:37 | 显示全部楼层
友来友网 发表于 2013-4-8 21:26
第一个问题没看懂,直接第二个问题

其实是因为版本的不同, 估计你找的答案是网上找的,

这个我明白了,是书本的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2013-4-9 12:53:07 | 显示全部楼层
小甲鱼 发表于 2013-4-9 03:29
这两个问题都是王爽大大的书几个版本存在一些差异导致的。

甲鱼老师,也不对呀,你教程里定义的是dw字型呀,sp应该是1ah   而你教程里的sp是32h
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-9 13:20:27 | 显示全部楼层
阳光影子 发表于 2013-4-9 12:53
甲鱼老师,也不对呀,你教程里定义的是dw字型呀,sp应该是1ah   而你教程里的sp是32h

dw总共定义了16个字型数据嘛,16*2==32d,不是32h哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2013-4-9 19:25:40 | 显示全部楼层
小甲鱼 发表于 2013-4-9 13:20
dw总共定义了16个字型数据嘛,16*2==32d,不是32h哦

你不是说16个字节等于10H嘛?在加上8个字型空间,10+F等于15H  然后又是栈,存放的时候应该存放到20H才对   不是1ah,也不是32h
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2013-4-9 19:37:10 | 显示全部楼层
小甲鱼 发表于 2013-4-9 13:20
dw总共定义了16个字型数据嘛,16*2==32d,不是32h哦

我明白了   原来32是十进制
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-9 21:23:38 | 显示全部楼层
阳光影子 发表于 2013-4-9 19:37
我明白了   原来32是十进制

问题解决记得标记回已经解决的分类哦~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2013-4-9 21:32:32 | 显示全部楼层
小甲鱼 发表于 2013-4-9 21:23
问题解决记得标记回已经解决的分类哦~

OK,明白的.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-11 00:06:45 | 显示全部楼层
有点不懂,为什么第二版书上定义为16个字形数据[有16个0],加上0123~0987H这8个字型,16+8=24,
24*2=48,怎么书上写的是30H呀,很郁闷
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-11 21:04:17 | 显示全部楼层
30H不就是48嘛
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-17 18:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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