能力值:
( LV2,RANK:10 )
|
-
-
26 楼
哦,这样的哦,谢谢哈。
还有麻烦帮我看下,我后面自己举的2个例子正确不?
|
能力值:
( LV2,RANK:10 )
|
-
-
27 楼
额,我2个都有拉。。我觉得视频比较直观一点,所以我就先学习视频,再看书~
|
能力值:
( LV2,RANK:10 )
|
-
-
28 楼
中山大学-6
8086/8088有7种基本寻址方式:
(6)基址加变址寻址方式
操作数在存储器中,操作数的有效地址由:基址寄存器之一的内容与变址寄
存器之一的内容相加
即:EA=BX或BP+SI或DI
在一般情况下,如果BP之内容作为有效地址的一部分,则以SS之内容为段值
,否则以DS之内容为段值
Eg:mov ax,[bx][di]
如果ds=2100H,bx=0158H,di=10A5H
则EA=0158+10A5=11FD
物理地址=21000+11FD=221FDH
所以AX=1234H
221FD上的内容是34,221FE上的内容是12
目的操作数采用基址加变址寻址,引用的段寄存器是DS:
mov ds:[bp+si],al
源操作数采用基址加变址寻址,引用的段寄存器是ES:
mov ax,es:[bx+si]
这种寻址方式适用于数组或表格处理。一般基址寄存器存放数组首地址,变
址寄存器定位数组各个元素
mov ax,[bx+di]
mov ax,[bx][di]
这2种表现方式是等价的。
(7)相对基址加变址寻址方式
操作数在存储器中,操作数的有效地址由基址寄存器之一的内容与变址寄存
器之一的内容及指令中给定的8位或16位位移量相加得到
即:EA=BX或BP+SI或DI+8位位移量或16位位移量
在一般情况下,如果BP之内容作为有效地址的一部分,则以SS之内容为段值
,否则以DS之内容为段值
在计算有效地址时,如果位移量是8位,那么被带符号扩展成16位。(补码表
示)
当所得有效地址超过FFFFH时,就取其64K的模
Eg:mov ax,[bx+di-2]
假如,ds=5000H,bx=1223H,di=54H (51275)=54H (51276)=76H
物理地址=50000+1223+0054+FFFE(-2)=51275H
执行之后(AX)=7654H
mov ax,[bx+di+1234H]
mov ax,1234H[bx][di]
mov ax,1234H[bx+di]
mov ax,1234H[di][bx]
这4个表示方式相同
================我是无敌分割线=========================
汇编语言的7种寻址方式总算学完了,虽然寄存器,存储器之类的3,4章仍然没有搞太懂。
但是这些寻址方式还是听着挺轻松的。从这些内容反过去看那些东西,貌似能够理解一点了~~
慢慢来吧,总有一天。我会搞定它的!!!!
另外。。一直有个疑问:
1.目的操作数采用了寻址方式后,物理地址怎么算?EA=bx+di,物理地址=ds+EA?
2.执行指令之后,是寻址表达式等于源操作数还是怎么样?[bx][di]=al?
mov [bx][di],al 比如bx=1000H,di=0500H,ds=2000H,al=1CH
麻烦知道的大大给个详细的过程,在此小弟谢谢了~~
|
能力值:
( LV2,RANK:10 )
|
-
-
29 楼
引用段寄存器是DS:MOV [BX+1000H],AL
--------------------------------------------------
目的操作数加:[] 和源操作数加[]都是一样的效果
加了[]就说明这个不是物理地址,而没加[]就是物理地址
不是物理地址我们就得求出物理地址,不然没法取这物理地址中的内容
物理地址=段地址(逻辑地址) + 偏移([]里的)
其实:
物理地址就是一个门,而我们要得是门里面的东西
|
能力值:
( LV2,RANK:10 )
|
-
-
30 楼
我 也在看这部视频。。学习中。讲的很好!!尤其是分段存储和物理地址计算。还附带画图说明的。经典!!!
|
能力值:
( LV2,RANK:10 )
|
-
-
31 楼
谢谢楼主!谢谢分享好东西!
|
能力值:
( LV2,RANK:10 )
|
-
-
32 楼
[QUOTE=只是玩玩;947526]引用段寄存器是DS:MOV [BX+1000H],AL
--------------------------------------------------
目的操作数加:[] 和源操作数加[]都是一样的效果
加了[]就说明这个不是物理地址,而没加[]就是物理地址
不是物理地址我们就得求出物理...[/QUOTE]
哦,这样的咯~知道了,物理地址仍然是DS+BX+1000H,是吧?
先谢谢细心讲解哈~
|
能力值:
( LV2,RANK:10 )
|
-
-
33 楼
好东西算不上啦,就是看视频学习的一些笔记,互相交流,互相学习嘛。。
|
能力值:
( LV2,RANK:10 )
|
-
-
34 楼
我们虽然看的不是同一部教程,不过,我在这里也头大,到目前都记不太清楚,后面应该是要学寻址方式了,这个可能你跟我一样,会觉得更晕,悲剧。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
35 楼
今天休息下,复习复习,做点练习题~~
|
能力值:
( LV2,RANK:10 )
|
-
-
36 楼
比效指令 CMP(CoMPare)
格式: CMP OPRD1,OPRD2
----
功能: 对两数进行相减,进行比较.
----
以CMP DX,CX为例,对标志位的影响如下:
(1) (DX)=(CX)时,则ZF=1;
(2) 两相无符号数比较:
若(DX)>=(CX)时,则CF=0,即无借位.
若(DX)<(CX)时,则CF=1.
(3) 两个带符号数比较:
对带符号数判断大小可通过溢出标志OF及符号标志SF共同判断.
当 OF=0,即无溢出时,若SF=0,则(DX)>(CX)
若SF=1,则(DX)<(CX)
当 OF=1,即有溢出时,若SF=1,则(DX)>(CX)
若SF=0,则(DX)<(CX)
=========================================
中山这里没有详细说明
楼主也多多学习。
我在手机上都是看你的笔记的,不过进度有点慢
|
能力值:
( LV2,RANK:10 )
|
-
-
37 楼
总算是找到了文字的东西了,非常感谢分享,大家一起进步!
|
能力值:
( LV2,RANK:10 )
|
-
-
38 楼
谢谢你的补充哈。。有时候的确有点疑问~~毕竟自学的嘛,没老师教就是麻烦,都没人来解决下问题的~所以就要靠大家互相帮助,互相补充咯~
至于进度慢的话。。主要是我每天白天都有课啊,所以我都是尽量拿晚上空余时间来学习的。
而且如果遇到视频中比较难的地方,我都会反复看好几遍再加上要做笔记归纳~一个40多分钟的课程,我一般都要看个2,3个小时啊~所以进度比较慢~~
不过我觉得这样还是蛮好的,至少都比较详细的学习嘛,自学毕竟不等于老师教,有些地方还是不能彻底搞懂哈~~
|
能力值:
( LV2,RANK:10 )
|
-
-
39 楼
要细细的看 学习不仅仅是一次俩次 要天天看看
|
能力值:
( LV2,RANK:10 )
|
-
-
40 楼
中山大学-7
1.8086/8088指令系统
1.数据传送 2.算术运算 3.逻辑运算 4.串操作 5.程序控制 6.处理器
控制
指令语句格式
[标号:]指令助记符 [操作数1],[操作数2] [;注释]
指令是否有操作数,完全取决于指令本身,标号的使用取决于程序的需要,
标号只被汇编程序识别,它与指令本身无关
2.数据传送指令
【1】.传送指令
格式:mov dst(目的操作数),src(源操作数)
源操作数可以是累加器,寄存器,存储单元以及立即数
目的操作数除了立即数,上面的其他3中都可以。
传送不改变源操作数。
1-CPU内部寄存器之间的数据传送:
mov ah,al
mov dl,dh
mov bp,sp
mov ax,cs
注意:源和目的操作数不能同时是段寄存器(各种S);代码段寄存器CS不能
作为目的操作数,指令指针IP既不能作为源,也不能作为目的。
2-立即数送至通用寄存器或存储单元(各种存储器寻址方式):
mov varb,-1 varb是变量名,代表一个存储单元
mov varw,3456H varw是一个字变量
mov [si],6543H
注意:立即数不能直接传送到段寄存器,立即数永远不能作为目的操作数。
3-寄存器与存储器间的数据传送:
mov ax,[varw] varw是一个字变量,存储器操作为直接寻址
mov bh,[di] 存储操作数为寄存器间接寻址
mov di,es:[si+3] 存储器操作数为相对变址寻址,使用段超越前缀
mov varb,dl varb是一个字节变量
mov ds:[bp],dl 使用段超越前缀
mov varw,ds varw是一个字变量
注意源操作数和目的操作数类型要一致(8位对8位,16位是16位)
即同时为字节或字,不能一个字节,一个字。
除了串操作指令外,源操作数和目的操作数不能同时是存储器操作数.
(两个操作数必须有一个寄存器(除了立即寻))
利用通用寄存器过渡方法,也适用于段寄存器间的数据传送。
Eg:mov ax,varw1
mov varw2,ax
mov ax,cs 把cs的内容送到ds
mov ds,ax
mov al,'D' 立即数(D的ASC码)送给AL寄存器
mov bx,offset table
把table的偏移地址(不是内容)送到bx寄存器,其中offset为属性操作数
没有offset就是把table的内容送给bx!!
【2】.交换指令
利用交换指令可方便的实现通用寄存器与通用寄存器或存储单元间的数据交
换
格式:xchg oprd1,oprd2
这个指令交换oprd1和oprd2的内容,操作数同时是字节或字
Eg:xchg al,ah
xchg si,bx
oprd1和oprd2可以1.是通用寄存器和存储单元。2.但不包括段寄存器,3.也
不能同时是存储单元,4.还不能有立即数,可采用各种存储器寻址方式来指
定存储单元
2和3必须通过通用寄存器来进行交换
Eg:xchg bx,[bp+si]
(bx)=6f30h,(bp)=0200h,(si)=0046h,(ss)=2f00h,(2f246)
=4154h
物理地址=2f000+0200+0046=2f246h
执行后:bx=4154h (2f246h)=6f30h
【3】.地址传送指令
1-指令LEA 称为传送有效地址指令,格式为:
LEA REG,OPRD
该指令把操作数OPRD的有效地址传送到操作数REG
操作数OPRD必须是一个存储器操作数,
操作数REG必须是一个16位的通用寄存器。
Eg:LEA BX,[BX+SI+0F62H]
执行前:(BX)=0400H,(SI)=003CH
执行后:(BX)=0400+003C+0F62=139EH
传送的只是偏移地址,并不是物理地址,也不是物理地址下的内容
2-指令LDS 段值和段内偏移构成32位的地址指针,该指令传送32位地址指
针,格式:
LDS REG,OPRD
执行操作:(REG)<---(SRC),(DS)<---(SRC+2)
该指令把操作数OPRD中所含的一个32位地址指针的段值部分送给数据段寄存
器DS,再把偏移部分送到指令给出的通用寄存器REG,REG可以是一个16位的
通用寄存器,但实际使用的往往是变址寄存器或指针寄存器。
32位地址指针的偏移部分存储在双字变量的低地址字中,段值部分存储在高
地址字中。
Eg:LDS SI,[10H]
执行前:(DS)=C000H,(C0010H)=0180,(C0012H)=2000H
物理地址:C0000+10=C0010H
执行后:(SI)=0180H,(DS)=2000H
3-指令LES LES也传送32位地址指针,格式:
LES REG,OPRD
执行操作:(REG)<---(SRC),(ES)<---(SRC+2)
该指令把操作数OPRD中所含的32位地址指针的段值部分送到附加段寄存器ES
,把偏移部分送到指令给出的通用寄存器REG
Eg:LES DI,[BX]
执行前:(DS)=B000H,(BX)=080AH,(0B080AH)=05AEH,(0B080CH)
=4000H
物理地址=B0000+080A=0B080AH
执行后:(DI)=05AEH,(ES)=4000H
=====================我是无敌分割线======================
终于见反汇编得出的代码了,原来是这些意思啊,这些玩意貌似和C语言的不太一样,赋值,传值,交换值之类的。
不过还好有点C语言的基础,所以这些还不是十分费力。
但是我发现一个严重的问题,这最近的2堂课,关于存储器,寄存器,和存储单元的内容实在是太多了。本来就是模模糊糊的理解这3个东西,现在更糊了!~
求高人解释一下这3个的关系好么。。。形象点,详细点,最好了。谢谢了~~
|
能力值:
( LV2,RANK:10 )
|
-
-
41 楼
[QUOTE=Heytear;948355]中山大学-7
1.8086/8088指令系统
1.数据传送 2.算术运算 3.逻辑运算 4.串操作 5.程序控制 6.处理器
控制
指令语句格式
[标号:]指令助记符 [操作数1],[操作数2] [;注释]
指令是否有操作数,完全取决于指令本身,标号的使用取决于程序...[/QUOTE]
找本微机原理的书看看,里面有讲存储器的内容。存储器是各个存储单元组成的,一般指的就是内存,而寄存器是CPU内部的高速存储器。
|
能力值:
( LV2,RANK:10 )
|
-
-
42 楼
哦,这样的嗦。那成,有空去看看哈~
谢谢咯~
|
能力值:
( LV2,RANK:10 )
|
-
-
43 楼
感觉你明显搞错学习的顺序了
建议先看王爽的汇编书籍,寄存器就明白了。
|
能力值:
( LV2,RANK:10 )
|
-
-
44 楼
看样子楼主是放弃了吧?!
哎。。难才有学头,不难那都没意思
只有别人不会,自己会才是最有意思的
-------------------------------------------
现在我在中山 14~15 集 有点乱
只能说指令太多了,脑袋有点记不住了,关键是 那就个 FLAG 有点乱
还有就是没练习题,前面的指令老忘了
-------------------------------------------------
你有C语言的基础学这个应该很好学的
我可是 0基础来的,这些指令都是背的
希望你也一起来加油
一共就51课,现在才学到 15课 不会就这样放弃了吧
加油加油
|
能力值:
( LV2,RANK:10 )
|
-
-
45 楼
能否问下 视频地址在哪儿、。?谢谢了·
|
能力值:
( LV2,RANK:10 )
|
-
-
46 楼
也在学习中啊
|
能力值:
( LV2,RANK:10 )
|
-
-
47 楼
不是在这个板块就在问题求助板块,我就是从那下的
手机上就不提你早了
|
能力值:
( LV2,RANK:10 )
|
-
-
48 楼
额,我可不是一个轻易放弃的人哦,这2天有点事情~家里面要买房,所以从学校回到了家里面,都没时间上网的,不过放心,这2天我都有在看书。刚刚下午才到学校里面呢,放心,我会和你一起进步的~~~
|
能力值:
( LV2,RANK:10 )
|
-
-
49 楼
http://bbs.pediy.com/showthread.php?t=124346
我在最前面有提到哦~~
你去看看,那上面很多资料的~一起加油吧!!
|
能力值:
( LV2,RANK:10 )
|
-
-
50 楼
啊呀呀,今天可能更新不鸟了。时间不够了呀,宿舍要断电了呢~~~
明天我来更新笔记哈,希望对大家有用,大家一起进步~~
还好过2天有运动会,可以好好的学2天了~~
|
|
|