文章目录[隐藏]
机器指令处理的数据在什么地方
绝大部分机器指令都是进行数据处理的指令,处理大致可分为3类:读取、写入、运算。在机器指令这一层来讲,并不关心数据的值是多少,而关心指令执行前一刻,它将要处理的数据所在的位置。指令在执行前,所要处理的数据可以在3个地方:CPU内部、内存、端口(端口将在后面的课程中进行讨沦),比如表8.1中所列的指令。
mov bx,[2] ;数据处于内存中ds:2单元 mov ax,bx ;数据处于cpu内部,bx寄存器中 mov ax,5 ;数据处于cpu内部,指令缓冲器中
汇编语言中数据位置的表达
在汇编语言中如何表达数据的位置?汇编语言中用3个概念来表达数据的位置。
(1)立即数(idata):包含在指令中的数据,执行前在cpu的指令缓冲器中。
对于直接包含在机器指令中的数据(执行前在CPU的指令缓冲器中),在汇编语言中称为:立即数((idata),在汇编指令中直接给出。
mov ax,1 add bx,2000h or bx,00010000b mov al,'a'
(2)寄存器
指令要处理的数据在寄存器中,在汇编指令中给出相应的寄存器名。
mov ax,bx mov ds,ax push bx mov ds:[0],bx push ds mov ss,ax mov sp,ax
(3)段地址(SA)和偏移地址(EA)
指令要处理的数据在内存中,在汇编指令中可用[x]的格式给出EA, SA在某个段寄存器中。
存放段地址的寄存器可以是默认的,比如
mov ax,[bp] mov ax,[bp+8] mov ax,[bp+si] mov ax,[bp+si+8]
等指令,段地址默认在ss中
mov axds:[bp] 含义:(ax)=((ds)*16+(bp)) mov ax es:[bx] 含义:(ax)=((es)*16+(bx)) mov ax,ss:[b又+si] 含义:(ax)=((ss)*16十(bx)+(si)) mov aX,cs:[fbx+si+8] 含义:(ax>=((cs) *16+(bx)+(si)+8)