寻址模式

-处理器提供多种寻址模式,以有效地访问指令执行中使用的数据。

§寄存器模式(Register Addressing Mode) 和 立即数模式(Immediate mode)

-当有一个操作数是寄存器的时候就是寄存器寻址,
-当有一个操作数是立即数的时候就是立即数寻址例如:

MOV	  AX,BX 	; 寄存器模式
ADD	  BYT,BL	; 寄存器模式
MOV	  DX,0	; 立即数模式, DX里存储常数0

§直接模式(Direct Addressing Mode)和 间接模式(Indirect Addressing Mode)

-直接模式在操作数是内存变量时使用

-间接模式是寄存器具有内存变量地址的模式,用于数组地址的索引增加或减少

-间接模式以[寄存器]的形式呈现,只有BX、SI、DI和BP可用 例如:

MOV	WRD,BX	; 直接寻址

MOV	AX,[BX]	; (DS:BX)的内存存储到 AX里(间接寻址)
MOV	[SI],BX	; BX的存储到 (DS:SI)里(间接寻址)




例:编写汇编代码,使100个字节数组ArrayW中的每个元素都为零;间接寻址模式


		MOV	CX,100	;循环次数100次
		LEA	BX,ArrayW	;取ArrayW的偏移地址存储到BX里
@TOP:
		MOV	[BX],0	;数组元素ArrayW[i]里存储0
		INC	BX	;地址寄存器BX加1
		LOOP	@TOP	;循环




§基址寻址(Base Pointer Addressing Mode)和 变址寻址(Indexed Addressing Mode) 

-操作数的偏移地址是通过在寄存器中的内容加上位移获得的。
-位移包括变量的偏移地址、常数、(变量的偏移地址±常数)

基址寻址模式(使用BX和BP寄存器)

  • [寄存器+位移]: MOV AX,[BX+ArrayW]
  • [位移+寄存器]: MOV AX,[ArrayW+BX]
  • [寄存器]+位移: MOV AX,[BX]+ArrayW
  • 位移[寄存器]: MOVAX,ArrayW[BX]

变址寻址模式(使用SI,DI寄存器)

  • [寄存器+位移]: MOVAX,[SI+ArrayW]
  • [位移+寄存器]: MOV AX,[ArrayW+SI]
  • [寄存器]+位移:MOV AX,[SI]+ArrayW
  • 位移+[寄存器]: MOVAX,ArrayW+[SI]
  • 位移[寄存器]:MOV AX,ArrayW[SI]




例:使用基址寻址模式编写代码,使100个字数组ArrayW中的每个元素都为零。

		MOV	CX,100
		XOR	BX,BX
@TOP: 	
		MOV	ArrayW[BX],0
		ADD	BX,2
		LOOP	@TOP




:分别使用 寄存器间接模式 和 变址寻址模式 编写;将50个字数组ArrayW中的每个元素复制到数组ArrayP

寄存器间接寻址模式基址寻址模式/变址寻址模式
ArrayW地址值位移
(1)初始化存储数组ArrayW的基地址
(2)数组个数1个 : 方便使用
多个 : 每个数组都需要地址寄存器
具有相同元素大小的数组使用相同的地址寄存器
示例[BX], [SI]ArrayW[SI], ArrayP[SI]
(1)(2)对应图片




例:使用INDECM程序;用寄存器间接模式;输入5个字元素,存到数组ArrayA,并生成输出数组的总和的程序。

.MODEL SMALL
.STACK 100H
.DATA
ArrayA	DW 	5 DUP (?)	;未初始化5个元素的ArrayA
.CODE
MAIN 	PROC
	MOV	AX,@DATA	;取DATA地址
	MOV	DS,AX	;再传到DS里

	MOV	AH,2
	MOV	DL,'?'
	INT	21H	;输出问号 

	MOV	CX,5	;CX存5用于循环
	XOR	BX,BX	;BX初始化0
	LEA	SI,ArrayA	;取ArrayA的地址到SI
@IN_SUM: 
	CALL	INDECM	;调用程序INDECM

	MOV	[SI],AX	;把输入的存储到ArrayA[i]里
	ADD	BX,AX	;BX用于存储总和,把AX的值到BX里
	ADD	SI,2	;因为是DW类型所以地址寄存器增加2
	LOOP	@IN_SUM	;循环IN_SUM,CX减1

	MOV	AH,2
	MOV	DL,0DH
	INT	21H
	MOV	DL,0AH
	INT	21H	;输出回车

 	MOV	AX,BX	;把存储总和的BX存到AX里

	CALL	OUTDECM	;调用OUTDECM
	MOV 	AH,4CH 	
	INT 	21H	
MAIN	ENDP
INCLUDE	INDECM.ASM
INCLUDE	OUTDECM.ASM
	END MAIN

最后修改:2022 年 03 月 08 日
如果觉得我的文章对你有用,请随意赞赏