中山大学-5
1.16进制数的最高位为字母,则应在其前加一个0.如:0A7F0H
2.8086/8088的寻址方式
计算机中的指令由操作码字段和操作数字段两部分组成。
汇编语言是一种符号语言,它用助记符来表示操作码,用符号或符号地址来
表示操作数或操作数地址。它与机器指令一一对应的。
Eg:ADD AX,BX AX为目的操作数,BX为源操作数
8086/8088有7种基本寻址方式:
(1)立即寻址方式
操作数就包含在指令中,它作为指令的一部分,跟在【操作码】后存放在【
代码段】,这种操作数称为立即数。可以为8位或16位的。
Eg:指令:MOV AL,5 执行指令后(AL)=05H
指令:MOV BX,3064H 执行指令后(BX)=3064H
寄存器必须对应操作数的位数(8位对8位,16位对16位)
(2)寄存器寻址方式
操作数在CPU内部的寄存器中,指令制定寄存器号。
对于16位操作数,寄存器可以是AX,BX,CX,DX,SI,DI,SP,BP等
对于8位操作数,寄存器可以是AL,AH,BL,BH,CL,CH,DL,DH
这种寻址方式由于操作数在寄存器中,不需要访问存储器来取得操作数,因
而可以缺的较高的运算速度。
Eg:指令 MOV AX,BX
如指令执行前(AX)=3064H(BX)=1234H,则指令执行后
(AX)=1234H,(BX)保持不变
注意:8位寄存器对应8位,16位寄存器对应16位。不能8位对16位,或者16位
对8位的错位指令
(3)直接寻址方式
操作数在寄存器中,指令直接包含有操作数的有效地址(偏移地址)。操作
数一般放在数据段中,所以操作数的地址由DS加上指令中直接给出的16位偏
移得到。特殊情况(采用段超越前缀),操作数也可包含在数据段外的其它
段中。
Eg:指令 MOV AX,[8054]
如(DS)=2000H,则执行结果为:(AX)=3050H
(28054H上的内容为50,28055H上的内容为30)
物理地址=20000+8054=28054H
在汇编语言指令中,可以用符号地址代替数值地址,如:MOV AX,VALUE
此时VALUE为存放操作数单元的符号地址。如写成:MOV AX,[VALUE]
两者是等效的。
如VALUE在附加段中,则应制定段超越前缀如下:
MOV AX,ES:VALUE 或者 MOV AX,ES:[VALUE]
因为是附加段(ES),所以段超越前缀为ES:
直接寻址方式常用于处理单个存储器变量的情况。它可实现在64K字节的段内
寻找操作数。直接寻址的操作数通常是程序使用的变量。
注意立即寻址和直接寻址书写表示方法上的不同,直接寻址的地址要放在[]
中,在源程序中,往往用变量名表示。
(4)寄存器间接寻址方式
操作数在存储器中,操作数有效地址在SI,DI,BX,BP这4个寄存器之一中。
在一般情况下:
如果有效地址在SI,DI和BX中,则以DS段寄存器之内容为段值。
如果有效地址在BP中,则以SS段寄存器之内容为段值。
Eg:MOV AX,[SI]如果(DS)=5000H,(SI)=1234H
则物理地址=50000+1234=51234H,则执行该指令后(AX)=6789H
指令中也可指定段超越前缀来取得其他段中的数据:
MOV AX,ES:[BX] 引用的段寄存器是ES
MOV [SI],AX 目的操作数寄存器间接寻址
MOV [BP],CX 引用的段寄存器是SS
MOV SI,AX 目的操作数寄存器寻址
(5)寄存器相对寻址方式
操作数在存储器中,操作的有效地址是一个基址寄存器(BX,BP)或变址寄
存器的(SI,DI)内容加上指令中给定的8位或16位位移量之和。
EA(有效地址)=(BX)或(BP)或(SI)或(DI)+8位位移量或者16位位移
量
在一般情况下:
如果有效地址在SI,DI和BX中,则以DS段寄存器之内容为段值。
如果有效地址在BP中,则以SS段寄存器之内容为段值。
物理地址=16d×(DS)+(BX)或(SI)或(DI)+8位位移量或者16位位移量
物理地址=16d×(SS)+(BP)+8位位移量或者16位位移量
在指令中给定的8位或16位位移量采用补码形式表示。在计算有效地址时,如
位移量是8位,则被带符号扩展成16位
Eg:MOV AX,[DI+1223H]
假如,(DS)=5000H, (DI)=3678H
则物理地址50000+3678+1223=5489BH
则(AX)=55AAH
5489BH上的内容是AA(对应AL),5489CH的内容是55(对应AH)
源操作数采用寄存器相对寻址,引用段寄存器是SS:MOV BX,[BP-4]
目的操作数采用寄存器相对寻址,引用段寄存器是ES:MOV ES:[BX+5],AL
指令:MOV AX,[SI+3]与MOV AX,3[SI]是等价的
================我是无敌分割线=========================
第5章都比第3,4张好搞啊。。感觉听起还是蛮有感觉的,虽然有些地方还是没有搞定,慢慢搞吧~~~顺便求高人解决几个问题:
1.直接寻址方式中,可以用符号地址代替数值地址。
在百度里面查了下符号地址,如是解释:符号地址是数值地址符号化后的地址,它相当于偏移地址;
符号化的意思是不是它会有正负,可以是向前偏移,也可以向后偏移????
这样的话是不是就可以表示成[4233H]或者[-4233H]呢??
2.目的操作数采用寄存器相对寻址,引用段寄存器是DS:MOV [BX+1000H],AL
这时的运算方式是不是和源操作数采用寄存器相对寻址时的一样呢???
比如(DS)=1000H,(BX)=1500H,(AL)=20H
物理地址=10000+1500+1000=12500H
BX+1000H=AL
这样对么?????
谢谢疯狂P崽的提醒哈,没有注意~~