大妈学编程 发表于 2020-8-11 23:29:45

关于第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处也会发生改变的?

菜鸟上路,请各位大神不吝赐教。

Hello. 发表于 2020-8-12 00:15:23

我觉得地址是这个哦:0200h:0

大妈学编程 发表于 2020-8-12 00:33:27

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:24

可以设置一下最佳吗^_^

大妈学编程 发表于 2020-8-12 12:42:55

Hello. 发表于 2020-8-12 08:43
可以设置一下最佳吗^_^

第一,您没有说出解题过程,只是说了答案,没有帮忙解惑。
第二,您的答案“我觉得地址是这个哦:0200h:0”。据我的理解 ,您这个答案是不对的。
按您的答案,我理解 是,段地址为0200H,偏移地址为0,根据公式,段地址*16+偏移地址,得到物理地址02000H,跟实验的题目说的0:200地址,不是同一个地址。
所以我觉得您的答案也不对。
刚开始学汇编,基础不扎实,如有误解,还望赐教!

xieglt 发表于 2020-8-12 13:49:32

本帖最后由 xieglt 于 2020-8-12 13:58 编辑

大妈学编程 发表于 2020-8-12 12:42
第一,您没有说出解题过程,只是说了答案,没有帮忙解惑。
第二,您的答案“我觉得地址是这个哦:0200h: ...

物理地址 = 段地址*10H + 偏移地址
所以物理地址为 020*10H + BX = 0200H:BX
没毛病!
020H:0 = 0:200H

大妈学编程 发表于 2020-8-12 17:26:46

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所指向的物理地址不一样是不是?

xieglt 发表于 2020-8-12 17:34:59

大妈学编程 发表于 2020-8-12 17:26
大侠,您好!感觉您的回复!
020H:0 = 0:200H 这个我已经在3楼得到解答了。



习惯性地写错了
应该是020H:BX = 020H*10+BX=0200H+BX
它跟0:0200H+BX
指向的物理地址是一致的。
页: [1]
查看完整版本: 关于第5章实验4第二小题的一些困惑