汇编语言程序设计(八)数据处理的两个基本问题
作者:互联网
目录
数据处理两个基本问题
- 处理的数据在什么地方
- 要处理的数据有多长
寄存器reg与段寄存器sreg
-
在8086CPU中,只有bx,bp,si,di这四个寄存器可以用在中括号中用于寻址,其它寄存器比如ax就不行。
-
bx,bp,si,di用于寻址时只能有4种组合
-
寄存器bp用于寻址时,即只要在[]中使用寄存器bp,而指令中没有显式给出段地址,则段地址默认在栈段寄存器ss中。
机器指令处理的数据所在位置
- 指令执行前,所要处理的数据可以在三个地方,即CPU(寄存器),内存、端口
汇编语言中用来表达数据位置的三个概念
- 立即数,即idata,立即数是直接在汇编指令中给出的数据,比如 mov ax, 1中的1,这个数不是存放在数据段的,而是在代码段,并且在执行前存放在CPU的指令缓冲器中。
- 寄存器,顾名思义,数据可以存放在cpu的寄存器中。
- 段地址SA和偏移地址EA,即指令要处理的数据在内存中,通过段地址和偏移地址来寻址,其中存放段地址的寄存器可以是默认的,也可以显式给出。
寻址方式
- 只有当数据在内存中的时候才需要寻址,用段地址和偏移地址定位内存单元的方法称为寻址方式。
指令要处理的数据有多长
- 8086CPU的机器指令可以处理两种尺寸的数据,byte和word,所以在指令中要知名进行的是字操作还是字节操作。
- 可以通过三种方法指明要处理的数据有多长
通过寄存器名指明要处理的数据的尺寸
用操作符X ptr指明内存单元的长度
- 在没有寄存器名存在的情况下(即可能只操作了内存单元,或者内存单元与立即数),用操作符X ptr指明内存单元的长度,X在汇编指令中可以为word或byte
其他方法
- 有些指令默认了访问的是字单元还是字节单元,比如push指令,只进行字操作,一次两个字节。
div除法指令
- 除数:8位或者16位,存放在寄存器或内存单元中
- 被除数:默认放在AX或 DX和AX中
- 当除数是8位时,被除数是16位,默认放在AX中。商在AL中,余数在AH中。
- 当除数是16位时,被除数是32位,默认放在DX+AX中。商在AX中,余数在DX中。
伪指令dd
- db和dw分别用来定义字节型数据和字型数据,dd则用来定义dword,即双字型数据。
dup操作符
- 与db、dw、dd一样,是由编译器识别处理的符号,dup是一个操作符,dup与前述三个指令一起用,用来进行数据的重复。如下例子,dup()括号中是重复元,前边的数字3是重复次数。
标签:寻址,汇编语言,处理,指令,内存,寄存器,数据处理,程序设计,数据 来源: https://www.cnblogs.com/chkplusplus/p/16309773.html