内存寻址方式
一,处理字符问题
-
‘ ’方式指明数据字符形式,转换成ASCII码
-
大写 二进制 小写 二进制数 A 01000001 a 01100001 B 01000010 b 01100010 C 01000011 c 01100011 D 01000100 d 01100100 - 可以看出小写字母比大写字母ASCII码大20H
- 即 大写+20H->小写,小写-20H->大写
二,[bx+idata]含义:
表示一个内存单元,偏移地址为((bx)+idata)
-
(ax)=((ds)*16+200+(bx))
-
mov ax,[200+bx]<=>mov ax,200[bx]<=>mov ax,[bx]200
三,SI和DI常执行与地址有关的操作
SI和DI是8086CPU中和BX相近寄存器:
- BX,通用寄存器,在计算存储器地址时,常用为基址寄存器用
- SI,(source index),源变址寄存器
- DI,(destiantion index)目标变址寄存器
SI,DI不能分成8位寄存器使用
四,[bx+si]和[bx+di]方式寻址
1,[bx+si]表示一个内存单元地址为(bx)+(si)
2,mov ax,[bx+si]含义
- 将一个内存单元内容送入ax
- 这内存长度为2字节(字单元),存放一个字
- 偏移地址为bx中数值加上si中数值
- 段地址在ds
3,指令mov ax,[bx+si]数字化描述
- (ax)= ((ds)*16 +(bx)+(si))
mov ax,[bx+si]其他写法:
- mov ax,[bx][si]
五,[bx+si+idata]及[bx+di+idata]方式指定地址
1,[bx+si+idata]表示一个内存单元:
- 偏移地址为(bx)+(si)+idata,即bx中数值加上si中数值再加上idata
2,指令mov ax,[bx+si+idata]含义:
- 将一个内存单元内容送入ax
- 这个内存单元长度为2字节(字单元),存放一个字
- 偏移地址为bx中数值加上si数值再加上idata,段地址在ds中
3,数字化的描述:
- ax= ((ds)*16+(bx)+(si)+idata)
4,指令mov ax,[bx+si+idata]其他写法:
-
mov ax,[bx+200+si]
-
mov ax,[200+bx+si]
-
mov ax,200[bx] [si]
-
mov ax,[bx].200[si]
-
mov ax,[bx] [si].200
-
mov ax,[bx] [si] (默认idata为0)
六,用dup设置内存空间
1,功能:
dup和db,dw,dd等数据定义伪指令配合使用,用来数据的重复
2,示例:
指令 | 功能 | 相当于 |
---|---|---|
db 3 dup(0) | 定义了3个字节,它们值都是0 | db 0 ,0,0 |
db 3 dup(0,1,2) | 定义了9个字节,由0,1,2重复3次构成 | db 0,1,2,0,1,2,0,1,2 |
db 3 dup(‘abc’,‘ABC’) | 定义了18个字节,构成了’abc ABCabc ABCabcABC’ | db ‘abcABCabcABCabcABC’ |
3,dup的使用格式
- dup重复次数用dup(重复字节型数据)
- dw重复次数dup(重复的字型数据)
- dd重复的次数dup(重复双字数据)