1、8086的寻址方式
- [idata]用一个常量来表示地址,可用于直接定位一个内存单元
- [bx]用一个变量来表示内存地址,可用于间接定位一个内存单元
- [bx+idata]用一个变量和常量表示地址,可在一个起始地址的基础上用变量间接定位一个内存单元
- [bx+si]用两个变量表示地址
- [bx+si+idata]用两个变量和一个常量表示地址。
编程,将datasg段中的每个单词改为大写字母。
assume cs:codesg,ds:datasg,ss:stacksg datasg segment db 'ibm ' db 'dec ' db 'dos ' db 'vax ' datasg ends stacksg segment stack dw 0,0,0,0,0,0,0,0 stacksg ends codesg segment start: mov ax,stacksg mov ss,ax mov sp,16 mov ax,datasg mov bx,0 mov cx,4 s0: push cx ;将外层循环的cx值压栈 mov si,0 mov cx,3 s: mov al,[bx+si] and al,11011111b mov [bx+si],al inc si loop s add bx, 16 pop cx loop s0 mov ax,4c00H int 21H codesg ends end start
2、寻址方式分类
- 直接寻址 [idata]
- 寄存器间接寻址 [bx]
- 寄存器相对寻址 用于结构体:[bx].idata, 用于数组idata[si],idata[di],用于二维数组[bx][idata]
- 基址变址寻址 用于二维数组:[bx][si]
- 相对基址变址寻址 用于表格(结构)中的数组项:[bx].idata[si] ,用于二维数组:idata[bx][si]