本帖最后由 初出江湖的Ryan 于 2020-8-12 00:35 编辑
先上代码 [Asm] 纯文本查看 复制代码 assume cs:code
code segment
mov ax,cs
mov ds,ax
mov ax,0020h
mov es,ax ; 这里将es设置成0020h
mov bx,0 ; 这里将bx设置成0
mov cx,0017h
s:mov al,[bx] ; 到这里为止,bx的值还是0
mov es:[bx],al ; 这里的意思, 是不是段地址:偏移地址? 这里不明白
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
实验的目的是要将 “mov ax,4c00h” 之前的指令复制到内存 0:200处。 需要填空的两个地方都没什么问题。
问题是,循环中 “mov es:[bx], al” ,这条指令不明白,这样的写法应该是 段地址:偏移地址 吧? 那些,段地址es的值 是0020h, 偏移地址bx的值是0 ,根据: 段地址*16+偏移地址,得出的地址应该是 0020:0 这个地址才对吧?
程序 运行起来,0020:0 这个地址,也是会复制到指令过去的,但是为什么0:200处也会发生改变的?
菜鸟上路,请各位大神不吝赐教。 |