满地打滚求助 汇编基础知识
本帖最后由 loop 于 2011-5-9 00:37 编辑在DS已知情况下
问题1:
mov al, ;bx是16位寄存器而al是8位寄存器,请问这个怎么理解?
问题2:
mov al, ;这个怎么理解?是不是 ( a l) = ( [ ds: ( bx+si ) ] )的意思?如果是这个意思那么它又与问题1有什么不同呢?
问题3:
BX与 是不是可以类似像C/C++中的指针?
先谢谢各位!
PS:请各位参与讨论,回答优秀者,进行威望奖励~ 本帖最后由 小乌龟 于 2011-5-2 23:09 编辑
关于第一个问题:
代表的是段地址为DS,偏移地址为bx的内存单元,而我们知道一个内存单元是用字节为单位的,所以mov al,是正确的。这个可以参考电子书95页“第五章 和loop指令”。 本帖最后由 小乌龟 于 2011-5-2 23:00 编辑
关于问题2 呢,
mov al, ,应该是( a l) = ( ( ds*16+( bx+si ) )) ,这个在书中第97页“5.1 ”中,这个在甲鱼老师汇编视频第023集视频的第24:28分钟有讲解……
按我的理解,如果没有si的话,它和问题1中的mov al,是一样的意思…… 关于问题3,C学的不好,不好下判断,
我的感觉是更像c语言中的数组。 mov al,的意思就是把段地址为:DS 偏移地址为:BX+SI的内存单元中的内容传送给AL 偏移地址等于bx中的内容加上si中的内容
说错的地方请帮忙指点一下! 嗯其实是这样的在数据寄存器当中分为ax,bx,cx,dx 这4种寄存器呢全部是16位的寄存器 这个没有问题吧在这4 种寄存器里面的又分为高8位的寄存器和低8位的寄存器而问题1中的al就是ax里面的低8位寄存器 高8位的寄存器分别是ahbh chdh 低8位的寄存器是alblcldl 他们分别掌管这各自寄存器中的数据 特别声明之所以叫8位寄存器正是因为他们是8位的 一个低8位的数据+一个高8位的数据=一个16位的数据
比如 al+ah=ax 很明了的
问题2 嗯大体的含义是将DS:中的数据放al 中 替换原有数据并保存
bx和si全部都是一种间接的寻址方式 可以理解为偏移地址 至于为啥两个一起用
而且为什么跟上边的那个不一样这个我现在也迷糊了 希望有人能帮我们一起解答 疑惑
问题3呢 不好意思 我没学过c具体还是不清楚 1.你既然学过c, 那就相当于数组, bx相当于数组下标index. bx在这里是个变量,跟16位,8位没直接关系, 当然[ ]里面也可以是个常量idata..例如mov ax,
mov ax, 意思就是下标为bx的数组的值放到ax中, 这数组就是段地址为ds的那段内存
2. bx+si 可以这么理解,你要跑100米,bx =100, 但跑到100的时候没停下来,向前滑了1米,si =1, bx+si = 101..就是下标为101的数组的值.. 既然bx和bx+si可以表示同一个意思,为什么还要搞这么麻烦呢, 是有用处的 比如在结构体中有一个字符串
struct cc { char *str = "fishc";};ds相当于cc的起始地址,bx相当于字符串的起始地址,我们想得到fishc里的c的地址, 当然还需要一个下标,于是si 就诞生了U see ? 回贴是一种美德
高手解答,我是菜鸟的 在DS已知情况下
问题1:
mov al, ;bx是16位寄存器而al是8位寄存器,请问这个怎么理解?
答:把偏移地址中的数据的后8位 放在寄存器al
问题2:
mov al, ;这个怎么理解?是不是 ( a l) = ( [ ds: ( bx+si ) ] )的意思?如果是这个意思那么它又与问题1有什么不同呢?
答:这个跟第一题是一样的,这个寻址的方式更灵活。
问题3:
BX与 是不是可以类似像C/C++中的指针?
先谢谢各位!
答:没有学C/C++,不会了
页:
[1]