|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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。这段代码 似乎没改变过 数据
|
|