8086汇编(3)
来源:互联网 发布:qt软件开发 编辑:程序博客网 时间:2024/05/22 13:16
寻址方式
立即寻址
操作数放在指令中,这种数叫立即数。可以是8位也可以是16位。
例如:MOV AX , 1234H
直接寻址
在直接寻址的方式下,操作数存放在存储单元中,该存储单元的16位段内偏移地址(即有效地址)紧跟在操作码之后,直接包含在指令中,存放在代码段内区域内。
操作数的物理地址 = 16D * [DS] + 有效地址
例如:MOV AL , DS : [1234H]
MOV AX , DS : [1234H]
MOV AX , ES : [2000H]
MOV AX , VALUE
MOV AX , [VALUE]
寄存器寻址
在寄存器间寻址,操作数存放在存储单元中。操作数的有效地址存放在寄存器BX,BP,SI和DI之中。
如果指令中未指定段跨越前缀,则寻址时,对于BX,SI,DI寄存器,默认操作数在数据段中。
操作数的物理地址=16D*[DS]+[BX]|[SI]|[DI]
对于BP寄存器,默认的段寄存器为SS,操作数地址为=16D*[SS] + [BP]
例如:MOV AX , [SI]
MOV AX , ES : [BX]
寄存器相对寻址(或称直接变址寻址)
操作数存放在存储单元中,其有效地址由一个基址或变址寄存器的内容加上指令中的指定一个8位或16位的偏移地址来得到。
即 [BX]
[BP]
有效地址 EA = [SI] + (8位或16位偏移量)
[DI]
如果指令中未指定段跨越前缀,则寻址时,对于BX , SI , DI寄存器,段寄存器使用DS,
操作数的物理地址位 = 16D*[DS] + [BX]|[SI]|[DI] + (8位或16位偏移量)
例如:MOV AX , COUNT[SI]
MOV AX ,[COUNT + SI]
MOV AH , ES : STR[DI]
基址加变址寻址
操作数存放在存储单元中,其有效地址为一个基址寄存器的内容加上一个变址寄存器的内容,这两个寄存器均有指令指定。
有效地址EA = [BX] + [SI]|[DI]或
EA = [BP] + [SI]|[DI]
如果无段跨越前缀,对于基址寄存器BX,则默认的段寄存器位DS
物理地址 = 16D * [DS] + [BX] + [SI]|[DI]
如果基址寄存器使用的BP,则默认寄存器为SS
物理地址 = 16D * [SS] + [BP] + [SI]|[DI]
例如:MOV AX , [BX][SI]
MOV AX , [BX+SI]
MOX AX , ES : [BX][SI]
相对的基址加变址寻址
操作数存放在存储单元中,其有效地址为一个基址寄存器的内容加上一个变址寄存器的内容,再加上一个8位或16位的偏移量。
有效地址 EA = [BX] + [SI]|[DI] + (8位或16位偏移量)或
EA = [BP] + [SI]|[DI] + (8位或16位偏移量)
对于基址寄存器BX,则默认的段寄存器位DS
物理地址 = 16D * [DS] + [BX] + [SI]|[DI] + (8位或16位偏移量)
如果基址寄存器使用的BP,则默认寄存器为SS
物理地址 = 16D * [SS] + [BP] + [SI]|[DI] + (8位或16位偏移量)
例如:MOV AX , COUNT[BX][SI]
MOV AX , [COUNT+BX+SI]
汇编的指令系统
指令语句
[标号:] 指令助记符 [操作数] [;注释]
A001: MOV AX , 1234H ; 将1234H传送给AX寄存器
伪指令语句
[名字] 伪指令命令 [操作数] [;注释]
NUM DW 1234H ; 定义一个字变量,其值为1234H
常用伪指令
段定义伪指令
8086/8088的存储器是分段得,因此使用段定义伪指令来组织程序和利用存储器。
8086/8088程序由一个或多个段组成,多数程序采用一个代码段,一个数据段,一个堆栈段。
段定义伪指令格式
段名 SEGMENT [对齐属性][组合属性]['类别']
。。。
段名 ENDS
例如
DATASG SEGMENT
V DB 10
DATASG ENDS
子程序定义伪指令
段名 SEGMENT [对齐属性][组合属性]['类别']
子程序名 PROC FAR
。。。
子程序名 ENDP
段名 ENDS
ASSUME伪指令
ASSUME伪指令讲程序中定义的各个段的目的告知汇编程序。
ASSUME伪指令的一般格式为:
ASSUME 段寄存器:段名,段寄存器:段名,。。。
CS只能与有指令的序列的段相对应,SS只能与堆栈的段相对应。
结束伪指令
结束伪指令表示汇编语言源程序到此结束,结束伪指令之后的语句不在进行汇编。
结束伪指令的一般格式为:
END [过程名或标号]
过程名或标号:指示程序第一条要执行的指令的地址。
变量的定义
变量定义伪指令可以用来为数据段分配内存空间,并且设置相应的内存单元的初始值
变量定义伪指令的一般格式:
[变量名] 变量定义符 表达式
变量定义符 DB 表示定义字节数据存储区 DW表示定义字数据存储区
例如:
COUNT DB 100H
ARRAYT DW -1,1234H,3456H
BIG DW ? ; ?表示无初值
STR DB 'HELLO'
ARRA DB 100 DUP(0) ; 定义一个数据ARRA,占100字节且初始化为0
ARRB DB 100 DUP(?) ; 定义一个数据ARRB,占100字节且未初始化
立即寻址
操作数放在指令中,这种数叫立即数。可以是8位也可以是16位。
例如:MOV AX , 1234H
直接寻址
在直接寻址的方式下,操作数存放在存储单元中,该存储单元的16位段内偏移地址(即有效地址)紧跟在操作码之后,直接包含在指令中,存放在代码段内区域内。
操作数的物理地址 = 16D * [DS] + 有效地址
例如:MOV AL , DS : [1234H]
MOV AX , DS : [1234H]
MOV AX , ES : [2000H]
MOV AX , VALUE
MOV AX , [VALUE]
寄存器寻址
在寄存器间寻址,操作数存放在存储单元中。操作数的有效地址存放在寄存器BX,BP,SI和DI之中。
如果指令中未指定段跨越前缀,则寻址时,对于BX,SI,DI寄存器,默认操作数在数据段中。
操作数的物理地址=16D*[DS]+[BX]|[SI]|[DI]
对于BP寄存器,默认的段寄存器为SS,操作数地址为=16D*[SS] + [BP]
例如:MOV AX , [SI]
MOV AX , ES : [BX]
寄存器相对寻址(或称直接变址寻址)
操作数存放在存储单元中,其有效地址由一个基址或变址寄存器的内容加上指令中的指定一个8位或16位的偏移地址来得到。
即 [BX]
[BP]
有效地址 EA = [SI] + (8位或16位偏移量)
[DI]
如果指令中未指定段跨越前缀,则寻址时,对于BX , SI , DI寄存器,段寄存器使用DS,
操作数的物理地址位 = 16D*[DS] + [BX]|[SI]|[DI] + (8位或16位偏移量)
例如:MOV AX , COUNT[SI]
MOV AX ,[COUNT + SI]
MOV AH , ES : STR[DI]
基址加变址寻址
操作数存放在存储单元中,其有效地址为一个基址寄存器的内容加上一个变址寄存器的内容,这两个寄存器均有指令指定。
有效地址EA = [BX] + [SI]|[DI]或
EA = [BP] + [SI]|[DI]
如果无段跨越前缀,对于基址寄存器BX,则默认的段寄存器位DS
物理地址 = 16D * [DS] + [BX] + [SI]|[DI]
如果基址寄存器使用的BP,则默认寄存器为SS
物理地址 = 16D * [SS] + [BP] + [SI]|[DI]
例如:MOV AX , [BX][SI]
MOV AX , [BX+SI]
MOX AX , ES : [BX][SI]
相对的基址加变址寻址
操作数存放在存储单元中,其有效地址为一个基址寄存器的内容加上一个变址寄存器的内容,再加上一个8位或16位的偏移量。
有效地址 EA = [BX] + [SI]|[DI] + (8位或16位偏移量)或
EA = [BP] + [SI]|[DI] + (8位或16位偏移量)
对于基址寄存器BX,则默认的段寄存器位DS
物理地址 = 16D * [DS] + [BX] + [SI]|[DI] + (8位或16位偏移量)
如果基址寄存器使用的BP,则默认寄存器为SS
物理地址 = 16D * [SS] + [BP] + [SI]|[DI] + (8位或16位偏移量)
例如:MOV AX , COUNT[BX][SI]
MOV AX , [COUNT+BX+SI]
汇编的指令系统
指令语句
[标号:] 指令助记符 [操作数] [;注释]
A001: MOV AX , 1234H ; 将1234H传送给AX寄存器
伪指令语句
[名字] 伪指令命令 [操作数] [;注释]
NUM DW 1234H ; 定义一个字变量,其值为1234H
常用伪指令
段定义伪指令
8086/8088的存储器是分段得,因此使用段定义伪指令来组织程序和利用存储器。
8086/8088程序由一个或多个段组成,多数程序采用一个代码段,一个数据段,一个堆栈段。
段定义伪指令格式
段名 SEGMENT [对齐属性][组合属性]['类别']
。。。
段名 ENDS
例如
DATASG SEGMENT
V DB 10
DATASG ENDS
子程序定义伪指令
段名 SEGMENT [对齐属性][组合属性]['类别']
子程序名 PROC FAR
。。。
子程序名 ENDP
段名 ENDS
ASSUME伪指令
ASSUME伪指令讲程序中定义的各个段的目的告知汇编程序。
ASSUME伪指令的一般格式为:
ASSUME 段寄存器:段名,段寄存器:段名,。。。
CS只能与有指令的序列的段相对应,SS只能与堆栈的段相对应。
结束伪指令
结束伪指令表示汇编语言源程序到此结束,结束伪指令之后的语句不在进行汇编。
结束伪指令的一般格式为:
END [过程名或标号]
过程名或标号:指示程序第一条要执行的指令的地址。
变量的定义
变量定义伪指令可以用来为数据段分配内存空间,并且设置相应的内存单元的初始值
变量定义伪指令的一般格式:
[变量名] 变量定义符 表达式
变量定义符 DB 表示定义字节数据存储区 DW表示定义字数据存储区
例如:
COUNT DB 100H
ARRAYT DW -1,1234H,3456H
BIG DW ? ; ?表示无初值
STR DB 'HELLO'
ARRA DB 100 DUP(0) ; 定义一个数据ARRA,占100字节且初始化为0
ARRB DB 100 DUP(?) ; 定义一个数据ARRB,占100字节且未初始化
- 8086汇编(3)
- 汇编学习(四)8086汇编拾遗 (3)
- 8086汇编(0)
- 8086汇编(1)
- 8086汇编(2)
- 8086汇编(4)
- 8086汇编(一)
- 汇编学习(3)
- 汇编学习(一)8086汇编拾遗(1)
- 汇编学习(一)8086汇编拾遗(2)
- 汇编学习(五)8086汇编拾遗 (4)
- 汇编学习(六)8086汇编拾遗 (5)
- 汇编学习(七)8086汇编拾遗 (6)
- 汇编学习(八)8086汇编拾遗 (7)
- 汇编学习(九)8086汇编拾遗 (8)
- 汇编学习(十)8086汇编拾遗 (9)
- 汇编学习(十二)8086汇编拾遗 (11)
- 汇编学习(十三)8086汇编拾遗 (12)
- 关于.net的web.sitemap的文件的问题
- UVa Problem Solution: 10137 - The Trip
- Expert one on one J2EE development without EJB 摘要(8)
- java学习中的迷茫……
- Expert one on one J2EE development without EJB 摘要(8)
- 8086汇编(3)
- 金融危机啥时结束
- SAP 调用外部程序
- oracle常见操作汇总(不断更新中....)
- WEB服务器个人版
- Tab Menu的研究
- junit4 新特性 单元测试里程碑
- C++Builder2007如何安装boost_1_36_0
- Weblogic9.0的破解方法(没有试过)