. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->更灵活的定位内存地址的方法
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  《汇编语言》问题7.8||7.7将data段中的每个单词改为大写字母。  [待解决] 回复[ 7次 ]   点击[ 390次 ]  
guoshuang629
[帖 主]   [ 发表时间:2010-11-13 14:06 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-08-22 10:52
assume cs:code,ds:data,ss:stack
data segment
        db 'ibm             '
        db 'dec             '
        db 'dos             '
        db 'vax             '
data ends

stack segment
        dw 0,0,0,0,0,0,0,0
stack ends

code segment
        start:        mov ax,data
                mov ds,ax
                mov ax,stack
                mov ss,ax
                mov sp,4//////我把这里改成了4试验了一下系统崩溃了?16(书上就是16)和8都行?之所以改成4我是这么想的:定义的这个栈只存放一个比个位数4还小的数,那有一个字单位足够了,而且push进去马上就pop出来没有连续的push/pop,因此也没有栈顶超界啊。可是为什么debug执行几步以后系统就崩溃了呢?别的地方和书上都是一样的别的地方没问题啊,应该就是这个栈的问题。。请高手赐教一二 小弟拜谢!!~~~//////
                mov bx,0

                mov cx,4

        s2:     push cx
                mov si,0
                mov cx,3
        s1:     and byte ptr [bx+si],11011111b
                inc si
                loop s1
                add bx,10h
                pop cx
                loop s2
                mov ax,4c00h
                int 21h        
code ends
end start
masmaster
[第1楼]   [ 回复时间:2010-11-13 16:56 ]   [引用]   [回复]   [ top ] 
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19
栈段本身定义了16个字节, 你却把sp设为4, 当然会出错。
guoshuang629
[第2楼]   [ 回复时间:2010-11-13 17:01 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-08-22 10:52
我把sp设为4让栈顶指向第4个字节 意味着我只使用0到4字节 那后面的我不用 可是它也算是栈空间啊 为什么会出错呢?
masmaster
[第3楼]   [ 回复时间:2010-11-13 17:09 ]   [引用]   [回复]   [ top ] 
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19
栈太小, 最好你可以用debug一下, 当你把sp设为4的时候, 你看看栈里还是否有空闲?
sempron
[第4楼]   [ 回复时间:2010-11-13 17:13 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-10-29 09:56
那你把栈空间也设成4个字节,看看会不会出错
guoshuang629
[第5楼]   [ 回复时间:2010-11-16 14:44 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-08-22 10:52
已经解决了 是中断部分的知识 快学到了~~
8782711
[第6楼]   [ 回复时间:2010-12-19 10:40 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2010-12-12 20:21
中断机制,至少要设置sp为6以上
goodxiaowan
[第7楼]   [ 回复时间:2011-02-26 00:43 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-05-23 12:24
“可是为什么debug执行几步”
说明楼主用debug调试,进行单步执行。
我们通过debug可以看到寄存器的数据,表明debug也参入,而在dos是单任务!
我们知道从一个程序转向另一个程序,这个程序的ip、cs、bp等都得入栈!
把sp设为4能解决问题?
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved