阳光影子 发表于 2013-4-8 18:08:46

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

汇编语言第二版(王爽)这本书的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:
          add bx,2
          loop s

         mov bx,0
         mov cx,8
   s0:pop cs:
         add bx,2
         loop s0

      mov ax,4c00h
      int 21h

codesgends

endstart






还有一个问题就是检测点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:movax,____(答案是:cs)
      mov ss,ax
      mov sp,____(答案是:1ah)   疑问就是在这里,答案应该是35h才对呀   怎么是1ah?怎么回事?

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

      mov ax,4c00h
      int 21h

codesg ends

endstart

友来友网 发表于 2013-4-8 21:26:53

第一个问题没看懂,直接第二个问题

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




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

小甲鱼 发表于 2013-4-9 03:29:54

这两个问题都是王爽大大的书几个版本存在一些差异导致的。

小甲鱼 发表于 2013-4-9 03:34:23

第一个问题如你所述的话确实有点奇怪,不知道是不是我理解错意思了,麻烦提供下图片,因为年代已久。。。。

阳光影子 发表于 2013-4-9 12:45:51

小甲鱼 发表于 2013-4-9 03:34 static/image/common/back.gif
第一个问题如你所述的话确实有点奇怪,不知道是不是我理解错意思了,麻烦提供下图片,因为年代已久。。。。

甲鱼老师,你看看我截的你教程里说的那个程序图

阳光影子 发表于 2013-4-9 12:50:37

友来友网 发表于 2013-4-8 21:26 static/image/common/back.gif
第一个问题没看懂,直接第二个问题

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


这个我明白了,是书本的问题

阳光影子 发表于 2013-4-9 12:53:07

小甲鱼 发表于 2013-4-9 03:29 static/image/common/back.gif
这两个问题都是王爽大大的书几个版本存在一些差异导致的。

甲鱼老师,也不对呀,你教程里定义的是dw字型呀,sp应该是1ah   而你教程里的sp是32h

小甲鱼 发表于 2013-4-9 13:20:27

阳光影子 发表于 2013-4-9 12:53 static/image/common/back.gif
甲鱼老师,也不对呀,你教程里定义的是dw字型呀,sp应该是1ah   而你教程里的sp是32h

dw总共定义了16个字型数据嘛,16*2==32d,不是32h哦

阳光影子 发表于 2013-4-9 19:25:40

小甲鱼 发表于 2013-4-9 13:20 static/image/common/back.gif
dw总共定义了16个字型数据嘛,16*2==32d,不是32h哦

你不是说16个字节等于10H嘛?在加上8个字型空间,10+F等于15H然后又是栈,存放的时候应该存放到20H才对   不是1ah,也不是32h

阳光影子 发表于 2013-4-9 19:37:10

小甲鱼 发表于 2013-4-9 13:20 static/image/common/back.gif
dw总共定义了16个字型数据嘛,16*2==32d,不是32h哦

我明白了   原来32是十进制

小甲鱼 发表于 2013-4-9 21:23:38

阳光影子 发表于 2013-4-9 19:37 static/image/common/back.gif
我明白了   原来32是十进制

问题解决记得标记回已经解决的分类哦~

阳光影子 发表于 2013-4-9 21:32:32

小甲鱼 发表于 2013-4-9 21:23 static/image/common/back.gif
问题解决记得标记回已经解决的分类哦~

OK,明白的.

a76612906 发表于 2013-4-11 00:06:45

有点不懂,为什么第二版书上定义为16个字形数据[有16个0],加上0123~0987H这8个字型,16+8=24,
24*2=48,怎么书上写的是30H呀,很郁闷

chungxh 发表于 2013-4-11 21:04:17

30H不就是48嘛
页: [1]
查看完整版本: 【求解答】关于汇编语言的大疑问