鱼C论坛

 找回密码
 立即注册
查看: 2635|回复: 7

监测点 6.1 引发的 ‘血案’

[复制链接]
发表于 2011-10-7 17:11:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
检测点6.1(第119页)
-------------------
(1)
assume cs:codesg
codesg segment
    dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
start: mov ax,0
    mov ds,ax
    mov bx,0

    mov cx,8
s: mov ax,[bx]
    mov cs:[bx],ax    ;此条指令为所填指令
    add bx,2
    loop s

    mov ax,4c00h
    int 21h
codesg ends
end start

小甲鱼详细分析:我们把循环内的程序解释下,mov ax, [bx] 和 mov cs:[bx], ax 是将内存0:0到0:15单元的内容依次借通用寄存器ax之手改写程序中的数据。


我的疑问有以下几点:
血案1, 不知道题意是什么意思。把0:0~0:15 的内存单元中的内容改写程序中的数据?改写程序中的哪个数据啊?
     我就带着这个问题,看看 小甲鱼老师 给的答案。下面是我的理解

assume cs:codesg
codesg segment
    dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
start: mov ax,0
    mov ds,ax
    mov bx,0              ;设置 ds 为0

    mov cx,8              ;循环次数
s: mov ax,[bx]              ; 将(ds[bx])复制给ax 即 ax=(ds[0])==0123h
    mov cs:[bx],ax    ;将0123h 复制给 (cs:[bx]) 即 (cs:[0])==0123h 那还是没变啊,(cs:[0])本来就等于0123h  因为dw是在代码的开头   
    add bx,2
    loop s

    mov ax,4c00h
    int 21h
codesg ends
end start

因此,引发出第二个血案 ...  在一个月黑风高、阳光明媚的一个晚上...突然.......

血案2。这段代码 似乎没改变过 数据
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-7 19:55:08 | 显示全部楼层
应该写到DS段吧,取出来又放回去和没动一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-7 21:58:09 | 显示全部楼层
start: mov ax,0
    mov ds,ax
    mov bx,0              ;设置 ds 为0

    mov cx,8              ;循环次数
s: mov ax,[bx]     ;这里指向的是DS:[bx]即0:[bx]
dw 初始化的是CS中的数据而不是DS中的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-7 22:25:32 | 显示全部楼层
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
是CS中的数据,这个题目的意思是吧程序中dw初始化的数据放入内存中。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-10-11 00:29:13 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-19 11:17:19 | 显示全部楼层
Love 梦想 发表于 2011-10-11 00:29
那DS中的数据又是什么呢?

你通过在debug中输入-d ds:0 就可以查出 ds中原来的数据了 然后通过执行全部代码后会发现 cs中的数据被DS覆盖了。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-2-12 19:21:44 | 显示全部楼层
首先要明白dw定义的是什么段地址的数据,因为assume cs:code 所以dw的数据是在cs:[0],cs:[1]……里。
然后内存0:0~0:15又是什么段地址的数据呢?是ds的,数据段。
所以题目要求是用内存数据(ds)改写代码数据(cs)。
清楚没?不知道我说的你明白不。
不喜勿喷
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2013-2-13 12:06:25 | 显示全部楼层
chenlin7978580 发表于 2011-10-19 11:17
你通过在debug中输入-d ds:0 就可以查出 ds中原来的数据了 然后通过执行全部代码后会发现 cs中的数据被DS ...

该楼正解!~~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-10-8 00:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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