鱼C论坛

 找回密码
 立即注册
查看: 1826|回复: 2

Assembly language 6.1

[复制链接]
发表于 2013-7-24 17:28:56 | 显示全部楼层 |阅读模式
9鱼币
求解释代码~~~



检测点6.1
(2)下面的程序实现依次用内存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
start:  mov ax, codesg ;或mov ax, cs
        mov ss,ax
        mov sp, 24h    ;或mov sp, 36     ;(第一版填1ah或26)
        mov ax,0
        mov ds,ax
        mov bx,0
        mov cx,8
    s:  push [bx]
         pop cs:[bx]   ; pop ss:[bx]
        add bx,2  
        loop s
        mov ax,4c00h
        int 21h
codesg ends
end start

最佳答案

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-7-24 17:28:57 | 显示全部楼层
本帖最后由 Dardy 于 2013-7-24 20:30 编辑
assume cs:codesg  ;一个段,代码段codesg
codesg segment
                ;下面这行数据是需要内存中(0: 0~15)的数据替换的,是本程序的目的。
        dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
                ;下面这行,用作栈空间。当作中转站,内存中的数据先入栈,再出栈到上面那行,完成替换。
        dw 0,0,0,0,0,0,0,0,0,0
                
                ;下面三行完成栈空间的初始化
start:  mov ax, codesg ;CS寄存器的初始值即为代码段的基址,所以codesg可为CS
        mov ss,ax ;这么一整,寄存器SS和CS的值是一样的,即代码段和栈段的起始地址是一样的,那8个整数处于栈的前部分。
        mov sp, 24h ;sp指向了10个0之后的那个内存单元(显然也就是指向了satrt:那行代码中),要用那10个0的所占有的内存作为栈空间,初始时就需要SP指向那段内存的后一个内存单元。
                
                ;用于替换的数据在0:0~15,所以把所在的内存作为DS段,也表明了各种段(代码段数据段栈段)并非天然相隔离的内存块,面是人为设置以便于寻址
        mov ax,0 
        mov ds,ax ;设置DS段的基址为0,就有了DS:[0]~DS:[15]和0:0~15为同一段内存。
                
                ;循环8次压栈出栈
        mov bx,0
        mov cx,8
    s:  push [bx] ;DS:[bx]入栈,DS:[0]~DS:[15]和0:0~15为同一段内存
         pop cs:[bx] ;出栈到cs:[bx],本程序只定义了一个代码段codesg,地址CS:[0]的字存放的是0123h,也即本程序的第一个字中的数据为0123h 。亦可用pop ss:[bx],见mov ss,ax 那行注释。
        add bx,2  ;BX加2,开始下一个字的入栈出栈。
        loop s
                
        mov ax,4c00h
        int 21h
codesg ends
end start
;内存地址的表示方式:段基址:偏移地址  ,段是人为设置一个起始址,然后可以通过和这个起始地址的相对位置,来定位一个内存单元。
;

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +2 收起 理由
jianqiumy + 5 + 5 + 2 解释得很详细~谢谢

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-7-25 08:02:46 | 显示全部楼层
上面的解释得真仔细。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 02:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表