关于王爽老师汇编一书第5章实验4第二小题的疑惑
本帖最后由 初出江湖的Ryan 于 2020-8-12 00:35 编辑先上代码 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处也会发生改变的?
菜鸟上路,请各位大神不吝赐教。 同问!求指教 "段地址es的值 是0020h, 偏移地址bx的值是0 ,根据: 段地址*16+偏移地址,得出的地址应该是 0020:0 这个地址才对吧?".
得出的地址应为 0200h:0 {:301_995:}{:301_995:}
你看看题目嘛
第二小问是,让你自己编程,只能用9条指令,不是让你把第三问的题目补上拿来做第二问
我说我怎么看了半天,感觉传不到0:200里面去。。。
{:301_971:} Peach_WYY 发表于 2020-8-12 00:08
同问!求指教
刚刚想起来了,第三版的书本,24页有说明的,不同的段地址和偏移地址,可以表示同一个物理地址的。
比如上题所示,复制到内存地址0:200处。
那么可以转换成物理地址 : 00200H ,
根据段地址*16 + 偏移地址 这个公式,物理地址00200H,可以用以下方式表示
0020:0 ,即段地址为0020,偏移地址为0,即为实验中所提到地址。
0000:200,即段地址为0,偏移地址为200,即为实验题目中所提到的地址
所以得出 0:200 跟 20:0 两个地址,指的是同一个物理地址。二者任选其一都可以,结贴。 没有细胞的人 发表于 2020-8-12 00:31
你看看题目嘛
第二小问是,让你自己编程,只能用9条指令,不是让你把第三问的题 ...
不好意思,我表达得不好。是最后一道题,要复制指令的那道题。有两个填空的那道题,我已经得到答案了,在5楼。谢谢大佬热心回答!!!! 15048048021 发表于 2020-8-12 00:11
"段地址es的值 是0020h, 偏移地址bx的值是0 ,根据: 段地址*16+偏移地址,得出的地址应该是 0020:0 这个 ...
你这不对吧,ax的值是0020h,mov到es的时候,es还是0020h。所以段地址是0020h才对吧?0020:0才对吧,要用段地址*16+偏移地址的形式表示 ,才是00200h吧?
另外,我已经知道答案了,在5楼。谢谢大佬热心回答!!!! 汇编真的难啊,大一开始学的时候真的一脸懵逼 Didor 发表于 2020-8-12 06:08
汇编真的难啊,大一开始学的时候真的一脸懵逼
可能接触的还不够深入,感觉还行,有点C语言基础,看王爽老师的书自学起来,感觉也还算可以。
页:
[1]