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]
posted on 2018-11-06 16:51  迷心迷  阅读(399)  评论(0编辑  收藏  举报