关于第5章实验4第二小题的一些困惑
本帖最后由 大妈学编程 于 2020-8-12 00:33 编辑先上代码
assume cs:code
code segment
mov ax,cs
mov ds,ax
mov ax,0020h
mov es,ax ;这里将es设置成0020h
movbx,0 ;这里将bx设置成0
movcx,0017h
s:mov al, ; 到这里为止,bx的值还是0
mov es:,al ; 这里的意思, 是不是段地址:偏移地址? 这里不明白
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
实验的目的是要将 “mov ax,4c00h” 之前的指令复制到内存 0:200处。 需要填空的两个地方都没什么问题。
问题是,循环中 “mov es:, al” ,这条指令不明白,这样的写法应该是 段地址:偏移地址吧?那些,段地址es的值 是0020h, 偏移地址bx的值是0 ,根据 段地址*16+偏移地址,得出的地址应该是 0020:0 这个地址才对吧?
程序 运行起来,0020:0 这个地址,也是会复制到指令过去的,但是为什么0:200处也会发生改变的?
菜鸟上路,请各位大神不吝赐教。 我觉得地址是这个哦:0200h:0 Hello. 发表于 2020-8-12 00:15
我觉得地址是这个哦:0200h:0
刚刚想起来了,第三版的书本,24页有说明的,不同的段地址和偏移地址,可以表示同一个物理地址的。
比如上题所示,复制到内存地址0:200处。
那么可以转换成物理地址 : 00200H ,
根据段地址*16 + 偏移地址 这个公式,物理地址00200H,可以用以下方式表示
0020:0 ,即段地址为0020,偏移地址为0,即为实验中所提到地址。
0000:200,即段地址为0,偏移地址为200,即为实验题目中所提到的地址
所以得出 0:200 跟 20:0 两个地址,指的是同一个物理地址。二者任选其一都可以,结贴。 可以设置一下最佳吗^_^ Hello. 发表于 2020-8-12 08:43
可以设置一下最佳吗^_^
第一,您没有说出解题过程,只是说了答案,没有帮忙解惑。
第二,您的答案“我觉得地址是这个哦:0200h:0”。据我的理解 ,您这个答案是不对的。
按您的答案,我理解 是,段地址为0200H,偏移地址为0,根据公式,段地址*16+偏移地址,得到物理地址02000H,跟实验的题目说的0:200地址,不是同一个地址。
所以我觉得您的答案也不对。
刚开始学汇编,基础不扎实,如有误解,还望赐教! 本帖最后由 xieglt 于 2020-8-12 13:58 编辑
大妈学编程 发表于 2020-8-12 12:42
第一,您没有说出解题过程,只是说了答案,没有帮忙解惑。
第二,您的答案“我觉得地址是这个哦:0200h: ...
物理地址 = 段地址*10H + 偏移地址
所以物理地址为 020*10H + BX = 0200H:BX
没毛病!
020H:0 = 0:200H xieglt 发表于 2020-8-12 13:49
物理地址 = 段地址*10H + 偏移地址
所以物理地址为 020*10H + BX = 0200H:BX
没毛病!
大侠,您好!感觉您的回复!
020H:0 = 0:200H 这个我已经在3楼得到解答了。
“所以物理地址为 020*10H + BX = 0200H:BX”
其实我是不明白 这最后的结果 :“ 0200H:BX”。
假设BX等于0的情况下,020*10H + BX = 0200H ,物理地址是0200H应该是没问题的对吧?
但是我所学的知识,0200H:BX, 这个是表示段地址为0200H,偏移地址为BX吧?
那么跟020H:0 这么所在的段地址和偏移地址都不一样了。0200H:BX 跟 020H:0所指向的物理地址不一样是不是? 大妈学编程 发表于 2020-8-12 17:26
大侠,您好!感觉您的回复!
020H:0 = 0:200H 这个我已经在3楼得到解答了。
习惯性地写错了
应该是020H:BX = 020H*10+BX=0200H+BX
它跟0:0200H+BX
指向的物理地址是一致的。
页:
[1]