|
1鱼币
下面的程序实现依次用内存0:0-0:15单元中的内容改写程序中的数据,完成程序
assume cs:code
code 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
code ends
end start
这个是小甲鱼老师给出的标准答案,我有一个疑问。请老师解答.
根据题目的要求,实现依次内存0:0-0:15内存改写程序中的数据,最后填空哪里,如何得知CS是0000H和偏移地址也是0H?
如果这样写是否是将AX的值写入到了,程序当前CS的段地址+偏移地址0,这里的CS可以是很多数值。(比如我的电脑上CS就指向了0753:0, 而并非题目要求的0:0处)所以这个好像和题目要求不太一样。。。或者是我自己的理解有问题。是否在不给CS赋值的情况下,也就是不给出段地址的情况下,CS默认是0?而不是系统自动分配?
下面写出我自己对该程序的理解,望指点:
assume cs:code
code segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h ;IP00H-10H的内容。
start:mov ax,0 ;ax=0
mov ds,ax ;ds=0
mov bx,0 ;bx=0
mov cx,8 ;cx=8
s: mov ax,[bx] ;将当前CS段地址:0的内存单元的内容送入ax. 这里的内容应该是上面00-10H的数据段内容。
mov cs:[bx],ax ;然后又将刚才赋值的ax内容,又反过来送回到刚才那个位置去。这里很矛盾。
add bx,2 ;IP+2
loop s ;跳转循环
mov ax,4c00h
int 21h
code ends
end start
初学者,学到这里就已经开始犯迷糊了。望老师耐心解答,是否[BX]在默认情况下是DS:[BX]这种,而并非CS:[BX]?循环那句是否应该写成mov ax,ds:[bx]
mov cs:[bx],ax
望老师详细解答!
|
|