臭乞丐 发表于 2011-8-11 00:38:35

第六章的一个疑问 麻烦小甲鱼进来下

本帖最后由 weixianlang 于 2011-8-11 08:20 编辑

第六章的一个疑问 麻烦小甲鱼进来解答下  谢谢
assume cs:codesg
codesg segment
      dw 0123h,0456h,0789h,0abch,0defh,0fedh,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


课本为什么是   mov sp, 30而小甲鱼的是    mov sp, 32      我来探讨下 dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
这里是 16个字型数据
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h   这里是 8个字型数据进栈 出栈 都是 8个字型数据

16个字型数据+进栈8个字型数据+出栈8个字型数据=32   那么push执行的步骤一. sp-2  二 . ss:sp  

那么来看下 检测点6.1 第2题小甲鱼 答安
(2)
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
start:
    mov ax,cs   ;cs为所填第一空
    mov ss,ax
    mov sp,24h    ;此条指令为所填第二空
    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
end start



按照上面的分析dw 0,0,0,0,0,0,0,0,0,0这里是 10个字型数据
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h   这里是 8个字型数据进栈 出栈 都是 8个字型数据
10个字型数据+进栈8个字型数据+出栈8个字型数据=26
为什么小甲鱼这里不是 mov sp,26h   而是 mov sp,24h    ;此条指令为所填第二空  求解


weixianlang 发表于 2011-8-11 08:27:18

首先, 你的计算公式出错了原本的数据的占用8个字, 然后程序申请了10个字 , 一共占用18个字,就是36个字节,36个字节换算成16进制就是24h,所以SP是24h

parbbo 发表于 2011-8-11 09:31:51

楼上说的对!

Be_envious 发表于 2011-8-11 13:30:02

经鉴定 同意二楼

臭乞丐 发表于 2011-8-11 19:11:44

weixianlang 发表于 2011-8-11 08:27 static/image/common/back.gif
首先, 你的计算公式出错了原本的数据的占用8个字, 然后程序申请了10个字 , 一共占用18个字,就是36个字节,36 ...

原来是这样的公式      课本为什么是   mov sp, 30而小甲鱼的是    mov sp, 32   呢?难道课本那错了?

habou 发表于 2011-8-12 17:19:47

同意2楼的答案。不要将16进制与10进制搞混淆了。哥们
页: [1]
查看完整版本: 第六章的一个疑问 麻烦小甲鱼进来下