当前位置: 首页 > 汇编 > 正文

汇编学习(一)8086汇编拾遗(2)

寻址方式

立即寻址             mov ax,3069H

寄存器寻址         mov al,BH

直接寻址             mov ax,[2000H]

寄存器间接寻址    mov ax,[bx]

寄存器相对寻址   mov ax,cont[si]

基址变址寻址      mov ax,[bp][di]

相对基址变址寻址    mov ax,mask[bx][si]

dw 字型数据   16位等与2个节     db  字节型数据  8位等于1个字节

更加灵活的定位内存地址

7.1 and 和 or

and 和 or 就是我们常见的位运算

不同的寻址方式的灵活应用

[idata] 用一个常量来表示地址,可以直接定位一个内存单元
[bx] 用一个变量来表示内存地址,可用于间接定位一个内存单元
[bx + idata] 用一个变量和常量表示地址,可在一个起始地址的基础上用变量间接定位一个内存单元
[bx + si] 用两个变量表示地址
[bx + si +idata] 用两个变量和一个常量表示地址

8086处理器寄存器小结

一般寄存器:

ax,bx,cx,dx,ah,al,bh,bl,ch,cl,dh,dl,sp,bp,di,di

段寄存器,只能存储段地址的寄存器:

ds,ss,cs,es

数据段寄存器:

ds

栈段寄存器:

ss:sp

代码段寄存器:

cs:ip
使用相关寄存器寻址的一些需要注意的地方:

只有bx,si,di,bp 在 […] 中 使用寻址,例如 mov cx,[ax] 这就是非法的。
在使用寄存器寻址的时候有以下的一些默认设置。
使用[bx] 默认段地址在cs寄存器中
使用[bp] 默认段地址在ss寄存器中

机器指令处理的数据在什么地方

一个书上的表格

机器码 汇编指令 指令执行前数据的位置
8E1E0000 mov bx,[0] 内存,ds:0 单元
89C3 mov bx,ax CPU内部,ax寄存器
BB0100 mov bx,1 CPU内部,指令缓冲区

汇编语言中数据位置的表达

(1) 立即数 对于直接包含在机器指令中的数据(执行前在CPU的指令缓冲器中),在汇编语言中称为立即数
(2) 寄存器 指令要处理的数据在寄存器中,在汇编指令中给出相应的寄存器名
(3) 段地址:偏移地址 指令要处理的数据在内存中,在汇编指令中可以使用[x]的格式给出EA,SA在某个段寄存器中。

寻址方式:

个人觉得其实就两个方式,一个是使用寄存器bx ,bp ,si,di 的偏移量来寻址,这个主要应用变址寻址,对于二维数组的处理非常高效,还有一种通过idata立即数的方式来由我们指定偏移量。

指定处理数据长度

mov word ptr ds:[0],1 指明访问的是一个字单元
mov byte ptr ds:[0],1 指明访问的是一个字节型单元

 

 

本文固定链接: http://zmrlinux.com/2016/05/18/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%ef%bc%88%e4%b8%80%ef%bc%898086%e6%b1%87%e7%bc%96%e6%8b%be%e9%81%972/ | Kernel & Me

该日志由 root 于2016年05月18日发表在 汇编 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: 汇编学习(一)8086汇编拾遗(2) | Kernel & Me