. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->包含多个段的程序
主题 : :  实验5 第6题求牛人解惑··········  [待解决] 回复[ 13次 ]   点击[ 1542次 ]  
yang5731
[帖 主] [ 发表时间:2010-08-03 19:05 ] 
荣誉值:0
信誉值:0
注册日期:2010-07-26 12:14
由于我把题目看错了 看成顺序排列了 这是我的顺序排列代码:
assume cs:code

a segment

        dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh

a ends

b segment

        dw 0,0,0,0,0,0,0,0

b ends

code segment

start:  mov ax,a
        mov ds,ax
        mov ax,b
        mov ss,ax
        mov sp,10h; SP设置成30h,执行到PUSH [BX]后,下一条指令怎么是ADC AL,00 ,是不是栈超界了
        mov bx,0eh
        mov cx,8
s:        push [bx]
        sub bx,2
        ;执行到LOOP时,用P命令可以编译,但是用T命令执行到CX=0003 BX=0004,SUB BX,+02H时
         ;弹出对话框CPU遇到无效命令,请选择关闭终止程序
        loop s


        mov ax,4c00h
        int 21h

code ends

end start
niutou008
[第7楼] [ 回复时间:2011-06-08 21:59 ] 
荣誉值:0
信誉值:0
注册日期:2011-05-30 17:38
mov ax,b  
        mov ss,ax  
        mov sp,10h; SP设置成30h,执行到PUSH [BX]后,下一条指令怎么是ADC AL,00 ,是不是栈超界了  
------------------ 
我也是刚学的,说说我的见解,SP应该肯定是要设置为10H,因为栈段开始地址是b,而不是cs 
个人看法,大家一起学习。 
------------------ 
回复:那栈段开始地址是B,而不是cs,那开始的B为什么一定要是10H了,不可以是0H开始的吗? 
题目只提到了把前8个DW定义的字单元逆向入栈,后面的就可以不用管了,8个字单元等于16个,因为起止是从0开始,15结束,栈顶指向下一个单元16,16=10H,不知道这么说对不对 
------------------ 
回复: 
哪如果这样说的话,请看课本P128,例题6.3,栈的定义从CS开始,那么SP应该为20h,课本为什么是30h
-------------------------------
p128 那点的栈定义的是16个字,那是32位该占2个段吧加上1个字段,所以sp是30h
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved