鱼C论坛

 找回密码
 立即注册
查看: 2231|回复: 7

关于第5章实验4第二小题的一些困惑

[复制链接]
发表于 2020-8-11 23:29:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 大妈学编程 于 2020-8-12 00:33 编辑

先上代码
  1. assume cs:code
  2. code segment

  3.    mov ax,cs
  4.    mov ds,ax

  5.    mov ax,0020h
  6.    mov es,ax                ;  这里将es设置成0020h
  7.    mov  bx,0                ;  这里将bx设置成0
  8.    mov  cx,0017h

  9.    s:mov al,[bx]          ; 到这里为止,bx的值还是0
  10.     mov es:[bx],al        ; 这里的意思, 是不是段地址:偏移地址? 这里不明白
  11.     inc bx
  12.     loop s

  13.     mov ax,4c00h
  14.     int 21h
  15. code ends
  16. end
复制代码


实验的目的是要将 “mov ax,4c00h” 之前的指令复制到内存 0:200处。 需要填空的两个地方都没什么问题。
问题是,循环中 “mov es:[bx], al” ,这条指令不明白,这样的写法应该是 段地址:偏移地址  吧?  那些,段地址es的值 是0020h, 偏移地址bx的值是0 ,根据 段地址*16+偏移地址,得出的地址应该是 0020:0 这个地址才对吧?
程序 运行起来,0020:0 这个地址,也是会复制到指令过去的,但是为什么0:200处也会发生改变的?

菜鸟上路,请各位大神不吝赐教。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-12 00:15:23 | 显示全部楼层
我觉得地址是这个哦:0200h:0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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 两个地址,指的是同一个物理地址。二者任选其一都可以,结贴。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-12 08:43:24 From FishC Mobile | 显示全部楼层
可以设置一下最佳吗^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-12 12:42:55 | 显示全部楼层
Hello. 发表于 2020-8-12 08:43
可以设置一下最佳吗^_^

第一,您没有说出解题过程,只是说了答案,没有帮忙解惑。
第二,您的答案“我觉得地址是这个哦:0200h:0”。据我的理解 ,您这个答案是不对的。
按您的答案,我理解 是,段地址为0200H,偏移地址为0,根据公式,段地址*16+偏移地址,得到物理地址02000H,跟实验的题目说的0:200地址,不是同一个地址。
所以我觉得您的答案也不对。
刚开始学汇编,基础不扎实,如有误解,还望赐教!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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所指向的物理地址不一样是不是?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
指向的物理地址是一致的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-23 17:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表