美文网首页汇编语言程序员
包含多个段的程序:在代码段中使用栈

包含多个段的程序:在代码段中使用栈

作者: 柠檬就是酸 | 来源:发表于2018-08-16 16:21 被阅读30次

    问题:

    利用栈,将程序中定义的数据逆序存放   
    
    assume cs:codeseg
    
    codeseg segment
    
        dw 0123H,0456H,0789H,0abcH,0defH,0fdeH,0cbaH,0987H
    
        ?
    
    code ends
    
    end
    

    代码:

    assume cs:codeseg
    
    codeseg segment
    
            dw 0123H,0456H,0789H,0abcH,0defH,0fdeH,0cbaH,0987H
            dw 0,0,0,0,0,0,0,0      ;用dw来定义8个字型数据,在程序加载后,
                                    ;将取得8个字的内存空间,存放这8个数据,在后面的
                                    ;程序中,将这段空间作为栈来使用
    start:  mov ax,cx
            mov ss,ax
            mov sp,32               ;设置栈顶指向cs:32
            mov bx,0
            mov cx,8
    s:      push cs:[bx]
            add bx,2
            loop s                  ;以上代码将0~15单元中的数据依次压栈
    
            mov bx,0
            mov cx,8
    s0:     pop cs:[bx]
            add bx,2
            loop s0                 ;以上代码将0~15单元中的数据依次出栈
    
    codeseg ends
    
    end start
    

    代码分析:

    • 首先从内存的角度看,本程序的首地址为cs,然后后面跟着16个字型数据,逻辑地址下,cs地址为0,之后的0~31共32个内存单元存放的是这些数据,根据栈的要求,栈顶指针指向cs:32。之后的程序都是在这32个内存单元中进行的。
    • 接下来的几行代码是循环使数据入栈,由于是字型数据,所以bx每次增加2。接下来是这些数据依次出栈,注意bx要重新设为0。因为出栈的第一个元素是原来内存中的最后一个。
    • 其余说明在代码注释中有。

    相关文章

      网友评论

      • 4d1d055cb464:微信小程序项目全国招商中

        1:可视化拖曳式后台操作简单
        2:傻瓜式制作,1分钟自动生成小程序
        3:多种营销插件,各种行业模版

        提供OEM支持,提供招代理权限。 私聊微信:dm645873

      本文标题:包含多个段的程序:在代码段中使用栈

      本文链接:https://www.haomeiwen.com/subject/ekjobftx.html