8086汇编-数据处理的俩个基本方法(8)
引言
1.描述性符号
1 | 1.reg 来表示一个寄存器 |
1.bx,si,di,bp
1.对 bx si di 进行一下小小的总结
1 | 在8086CPU中,只有【bx,bp,si,di】可以用在[]中来进行内存单元的寻址 |
2.在[]中,这4个寄存器可以单个出现,或者只能有4种组合
1 | [bx+si];[bx+di] |
3.在[]内使用bp和bx的区别
1 | 如果是使用[bx]则默认段地址是ds |
2.机器指令处理的数据在什么地方
1.绝大部分的机器指令都是进行数据处理的指令,处理大致可分为
1 | 读取,写入,运算 |
2.在机器指令这一层来讲,并不关系数据的值是多少,而是关心指令执行前一刻,它将要处理的数据所在的位置
3.所要处理的数据可以在三个地方
1 | 1.CPU内部 |
1 | 汇编指令 命令执行前数据的位置 |
4.在汇编语言种有3个概率来表达数据的位置
1 | 1.立即数(idata) |
3.汇编语言中数据位置的表达
1.显性的给出段地址
1 | mov ax,ds:[sp] |
2.使用默认的段地址
1 | mov ax,[bx]默认就是ds:[bx] |
4.寻址方式
小总结
1 | CPU首先是读取: |
5.指令要处理的数据有多长?
1.有2中 byte 和 word 型的数据
1 | 1.通过寄存器名字来指明需要处理数据的尺寸 |
2.型方法
1 | mov word ptr ds:[0],1 |
3.在没有寄存器参与的内存单元访问指令中,用word ptr 或者byte ptr 来指明需要访问的内存单元
否则CPU很shabi
6.寻址方式的综合应用
这里有一个例子,自己去看书
1.我们可以看到,8086CPU提供了如[bx+si+idata]的寻址方式为结构化数据的处理提供了方便
2.使得我们可以在编程的时候,从结构化的角度去看待所要处理的数据
3.从上面我们就可以看到,一个结构化的数据包含了多个数据项,而数据项的类型又不相同,又的是字型数据,有的是字节型数据,有的和是数组【字符串】
4.所以,一般来说,我们可以用[bx + idata+si]的方式来访问结构体中的数据
1 | 用bx来定位整个结构体,用idata来定位结构体中的某一个数据项,用si定位数组项中的每个元素 |
5.所以在C语言中我们看到的 dec.cp[i];dec是一个变量名,指明了结构体变量的地址,cp是一个名称,指明了数据项cp的地址,而用i来定位cp中的每一个字符
在汇编语言中:bx.10H[si]
7.div指令
1.div指令就是÷
在使用div作为除法的时候
1 | 除数:8位或16位,在寄存器或者内存单元中 |
结果:
1 | 运算 8位 16位 |
格式:
1 | 1.div reg |
现在我们可以用多种方法来表示一个内存单元咯
示例:
1 | div byte ptr ds:[0] |
实现:计算100001/100
1 | ;首先100001是186a1H 大于FFFFH所以需要用dx和ax |
8.伪指令dd
1.前面我们学过db 和 dw 来定义字型数据和字型数据
dd是用来定义dword(double word双字节)
1 | CPU是64位,操作系统要64位,在操作系统的软件是64位 |
例子:
1 | data segment |
问题:8.1计算data段中第一个数据/第二个数据后的结果,商放在第三个数据存储单元中
1 | data segment |
9.dup
1.dup 是一个操作符号,在汇编语言中和db ,dw ,dd 等一样,都是由编译器识别处理的符号
2.它和db dw dd 等数据定义伪指令配合使用,用来进行数据的重复
3.实例:
1 | 1.db 3 dup(0) |
4.所以说dup
1 | db【数据定义的伪指令】 次数 dup(内容) |
10.实验七-寻址方式在结构化数据访问中的应用
自己去看
exp7.asm