汇编
关于定位内存地址的方法以及数据处理的相关问题。
and
- 逻辑与,按位进行与运算
or
- 逻辑或,按位进行或运算
ASCII码
- 编码方案,就是一套规则,约定了用什么样的信息来表示现实对象
字符形式数据
- 汇编程序中,用
'...'
的方式指明数据是字符的形式 - 编译器将会将之转换成相对应的ASCII码
[bx+idata]
- [bx]的方式指明内存单元
- [bx+idata]也可以指明内存单元,偏移地址为bx+idata
[bx+si]和[bx+di]
- 内存单元,偏移地址为bx+si或bx+di
[bx+si+idata]和[bx+di+idata]
- 内存单元,偏移地址为bx+si+idata或bx+di+idata
SI和DI
- SI和DI是8086CPU中,与bx功能相近的寄存器
- SI和DI不能分成两个8位寄存器来使用
不同的寻址方式
- [idata]
- 用一个常量表示内存地址,用于之间定位一个内存单元
- [bx]
- 用一个变量表示内存地址,用于间接定位一个内存单元
- [bx+idata]
- 用一个变量和常量表示内存地址,可在一个起始地址的基础上用变量间接定位一个内存单元
- [bx+si]
- 用两个变量表示地址
- [bx+si+idata]
- 用两个变量和一个常量表示地址
寄存器
- ax,bx,cx,dx
- ah,al,bh,bl,ch,cl,dh,dl
- sp,bp,si,di
段寄存器
- ds,ss,cs,es
bx si di bp
- 8086CPU中,只有这4个寄存器可以用在[...]中来表示内存单元的地址
- 在[...]中,可以单个出现
- 或者以4中组合出现:[bx+si],[bx+di],[bp+si],[bp+di]
- 只要在[...]中使用寄存器bp,但指令中没有显性给出段地址,段地址就默认在ss中
处理的数据在哪里
- 绝大部分机器指令都是进行数据处理的指令
- 处理大致可以分为3类:读取、写入、运算
- 对机器指令来说,并不需要关系数据的值是多少,而是关心,在指令执行前一刻,它将要处理的数据的位置在哪里
- 指令执行前,所要处理的数据可以在3个地方
- CPU内部
- 内存
- 端口
- 对于数据位置的表述
- 立即数:直接包含在机器指令中的数据
- 寄存器:要处理的数据在寄存器中
- 段地址SA和偏移地址EA:指令要处理的数据在内存中
寻址方式
直接寻址
- [idata]
- ea=idata,sa=(ds)
寄存器间接寻址
- [bx]
- ea=(bx),sa=(ds)
- [si]
- ea=(si),sa=(ds)
- [di]
- ea=(di),sa=(ds)
- [bp]
- ea=(bp),sa=(ds)
寄存器相对寻址
- [bx+idata]
- ea=(bx)+idata,sa=(ds)
- [si+idata]
- ea=(si)+idata,sa=(ds)
- [di+idata]
- ea=(di)+idata,sa=(ds)
- [bp+idata]
- ea=(bp)+idata,sa=(ss)
- 用于
- 结构体
- 数组
- 二维数组
基址变址寻址
- [bx+si]
- ea=(bx)+(si),sa=(ds)
- [bx+di]
- ea=(bx)+(di),sa=(ds)
- [bp+si]
- ea=(bp)+(si),sa=(ss)
- [bp+di]
- ea=(bp)+(di),sa=(ss)
- 用于二维数组
相对基址变址寻址
- [bx+si+idata]
- ea=(bx)+(si)+idata,sa=(ds)
- [bx+di+idata]
- ea=(bx)+(di)+idata,sa=(ds)
- [bp+si+idata]
- ea=(bp)+(si)+idata,sa=(ss)
- [bp+di+idata]
- ea=(bp)+(di)+idata,sa=(ss)
处理的数据有多长
- 8086CPU可以处理两种尺寸的数据
- byte
- word
- 通过寄存器名字指明进行的是字操作还是字节操作
mov ax,1
字操作mov al,1
字节操作
- 在没有寄存器名存在的情况下,用操作符
X ptr
指明内存单元的长度- X在汇编指令中可以是word或byte
mov word ptr ds:[0],1
mov byte ptr ds:[0],1
- 有的指令默认了访问的是字节还是字
- push只进行字操作
div
- 除法指令
- 除数:有8位和16位两种,在一个寄存器中或内存单元中
- 被除数:默认放在ax或dx和ax中
- 除数8位被除数16位:默认在ax中存放
- 除数16位被除数32位:dx存放高16位,ax存放低16位
- 所得结果
- 除数为8位,al存除法的商,ah存除法的余数
- 除数为16位,ax存除法的商,dx存除法的余数
dd
- db和dw可以定义字节型数据和字型数据
- dd用来定义dword型数据(双字)
dup
- 一个操作符
- 配合db,dw,dd来使用
db 3 dup (0)
- 定义了3个字节,它们的值为0
db 3 dup (0,1,2)
- 定义了9个字节,值为0,1,2,0,1,2,0,1,2
db 3 dup ('abc','ABC')
- 定义了18个字节,值为'abcABCabcABCabcABC'
本文为原创文章,版权归Aet所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ X86_64汇编学习记述三08/08
- ♥ x86_64汇编学习记述二08/07
- ♥ 相关指令05/06
- ♥ 基础知识03/22
- ♥ x86_64汇编学习记述一08/06
- ♥ 标志寄存器05/13