鱼C论坛

 找回密码
 立即注册
查看: 4065|回复: 10

[争议讨论] 满地打滚求助 汇编基础知识

[复制链接]
发表于 2011-5-2 22:11:02 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 loop 于 2011-5-9 00:37 编辑

在DS已知情况下
问题1:
mov al,[bx] ;bx是16位寄存器而al是8位寄存器,请问这个怎么理解?
问题2:
mov al,[bx+si] ;这个怎么理解?是不是 ( a l) = ( [ ds: ( bx+si ) ] )  的意思?如果是这个意思那么它又与问题1有什么不同呢?
问题3:
BX与 [BX]  是不是可以类似像C/C++中的指针?
      先谢谢各位!


PS:请各位参与讨论,回答优秀者,进行威望奖励~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-2 22:47:14 | 显示全部楼层
本帖最后由 小乌龟 于 2011-5-2 23:09 编辑

关于第一个问题:
[bx]代表的是段地址为DS,偏移地址为bx的内存单元,而我们知道一个内存单元是用字节为单位的,所以mov al,[bx]是正确的。这个可以参考电子书95页“第五章 [bx]和loop指令”。

评分

参与人数 1荣誉 +1 收起 理由
loop + 1 我很赞同~

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-2 22:58:07 | 显示全部楼层
本帖最后由 小乌龟 于 2011-5-2 23:00 编辑

关于问题2 呢,
mov al,[bx+si] ,应该是( a l) = ( ( ds*16+( bx+si ) )) ,这个在书中第97页“5.1 [bx]”中,这个在甲鱼老师汇编视频第023集视频的第24:28分钟有讲解……
按我的理解,如果没有si的话,它和问题1中的mov al,[bx]是一样的意思……

评分

参与人数 1荣誉 +1 收起 理由
loop + 1 我很赞同~

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-2 23:08:50 | 显示全部楼层
关于问题3,C学的不好,不好下判断,
我的感觉是[bx]更像c语言中的数组。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-2 23:11:07 | 显示全部楼层
mov al,[bx+si]的意思就是把段地址为:DS 偏移地址为:BX+SI的内存单元中的内容传送给AL 偏移地址等于bx中的内容加上si中的内容
说错的地方请帮忙指点一下!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-3 10:14:40 | 显示全部楼层
嗯  其实是这样的  在数据寄存器当中分为ax,bx,cx,dx     这4种寄存器呢全部是16位的寄存器    这个没有问题吧  在这4 种寄存器里面的又分为高8位的寄存器和低8位的寄存器  而问题1中的al  就是ax里面的低8位寄存器      高8位的寄存器分别是ah  bh   ch  dh     低8位的寄存器是  al  bl  cl  dl    他们分别掌管这各自寄存器中的数据   特别声明  之所以叫8位寄存器  正是因为他们是8位的   一个低8位的数据+一个高8位的数据=一个16位的数据
    比如   al+ah=ax   很明了的  
问题2 嗯  大体的含义是将DS:[bx+si]中的数据放al 中   替换原有数据并保存
     bx和si全部都是一种间接的寻址方式   可以理解为偏移地址   至于为啥两个一起用
而且为什么跟上边的那个不一样  这个我现在也迷糊了   希望有人能帮我们一起解答 疑惑

问题3呢   不好意思 我没学过c  具体还是不清楚     

评分

参与人数 1荣誉 +1 收起 理由
loop + 1 有问题继续讨论~

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-3 10:36:42 | 显示全部楼层
1.你既然学过c, 那[bx]就相当于数组, bx相当于数组下标index. bx在这里是个变量,跟16位,8位没直接关系, 当然[ ]里面也可以是个常量idata..例如mov ax,[0]
mov ax,[bx] 意思就是下标为bx的数组的值放到ax中, 这数组就是段地址为ds的那段内存
2. bx+si 可以这么理解,你要跑100米,bx =100, 但跑到100的时候没停下来,向前滑了1米,si =1, bx+si = 101..  [bx+si]就是下标为101的数组的值.. 既然bx和bx+si可以表示同一个意思,为什么还要搞这么麻烦呢, 是有用处的 比如在结构体中有一个字符串
struct cc { char *str = "fishc";};  ds相当于cc的起始地址,bx相当于字符串的起始地址,我们想得到fishc里的c的地址, 当然还需要一个下标,于是si 就诞生了  U see ?

评分

参与人数 1荣誉 +2 收起 理由
loop + 2 我很赞同~

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-5 23:58:39 | 显示全部楼层
回贴是一种美德
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-8 13:47:12 | 显示全部楼层
高手解答,我是菜鸟的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
头像被屏蔽
发表于 2011-5-9 19:02:18 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-9 21:50:06 | 显示全部楼层
在DS已知情况下
问题1:
mov al,[bx] ;bx是16位寄存器而al是8位寄存器,请问这个怎么理解?
答:把偏移地址[bx]中的数据的后8位 放在寄存器al
问题2:
mov al,[bx+si] ;这个怎么理解?是不是 ( a l) = ( [ ds: ( bx+si ) ] )  的意思?如果是这个意思那么它又与问题1有什么不同呢?
答:这个跟第一题是一样的,这个寻址的方式更灵活。
问题3:
BX与 [BX]  是不是可以类似像C/C++中的指针?
      先谢谢各位!
答:没有学C/C++,不会了


评分

参与人数 1荣誉 +1 收起 理由
loop + 1 感谢你的参与,鱼C有你更精彩~

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-3-29 05:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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