初出江湖的Ryan 发表于 2020-8-11 23:32

关于王爽老师汇编一书第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处也会发生改变的?

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

Peach_WYY 发表于 2020-8-12 00:08

同问!求指教

15048048021 发表于 2020-8-12 00:11

"段地址es的值 是0020h, 偏移地址bx的值是0 ,根据: 段地址*16+偏移地址,得出的地址应该是 0020:0 这个地址才对吧?".
得出的地址应为 0200h:0

没有细胞的人 发表于 2020-8-12 00:31

{:301_995:}{:301_995:}
你看看题目嘛
第二小问是,让你自己编程,只能用9条指令,不是让你把第三问的题目补上拿来做第二问
我说我怎么看了半天,感觉传不到0:200里面去。。。
{:301_971:}

初出江湖的Ryan 发表于 2020-8-12 00:35

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 两个地址,指的是同一个物理地址。二者任选其一都可以,结贴。

初出江湖的Ryan 发表于 2020-8-12 00:36

没有细胞的人 发表于 2020-8-12 00:31
你看看题目嘛
第二小问是,让你自己编程,只能用9条指令,不是让你把第三问的题 ...

不好意思,我表达得不好。是最后一道题,要复制指令的那道题。有两个填空的那道题,我已经得到答案了,在5楼。谢谢大佬热心回答!!!!

初出江湖的Ryan 发表于 2020-8-12 00:39

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

汇编真的难啊,大一开始学的时候真的一脸懵逼

初出江湖的Ryan 发表于 2020-8-12 12:35

Didor 发表于 2020-8-12 06:08
汇编真的难啊,大一开始学的时候真的一脸懵逼

可能接触的还不够深入,感觉还行,有点C语言基础,看王爽老师的书自学起来,感觉也还算可以。
页: [1]
查看完整版本: 关于王爽老师汇编一书第5章实验4第二小题的疑惑