Java教程

汇编语言程序设计(八)数据处理的两个基本问题

本文主要是介绍汇编语言程序设计(八)数据处理的两个基本问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录
  • 数据处理两个基本问题
  • 寄存器reg与段寄存器sreg
  • 机器指令处理的数据所在位置
  • 汇编语言中用来表达数据位置的三个概念
  • 寻址方式
  • 指令要处理的数据有多长
    • 通过寄存器名指明要处理的数据的尺寸
    • 用操作符X ptr指明内存单元的长度
    • 其他方法
  • div除法指令
  • 伪指令dd
  • dup操作符

数据处理两个基本问题

  • 处理的数据在什么地方
  • 要处理的数据有多长

寄存器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是重复次数。

这篇关于汇编语言程序设计(八)数据处理的两个基本问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!