数据处理的两个基本问题(学习汇编)

1.为了描述上的简洁,在以后的课程中,将使用两个描述性的符号reg来表示一个寄存器,用sreg表示一个段寄存器。

reg的集合包括:ax,bx,cx,dx,ah,al,bh,bl,ch,cl,dh,dl,sp,bp,si,di;

sreg的集合包括:ds,ss,cs,es.

8086CPU处理数据的两个基本问题:处理的数据存放在哪个地方? 要处理的数据有多长?

2. bx, si, di, bp:这四个寄存器,都可以放在"[...]"来进行内存单元的寻址,其他寄存器都不可以,就是这么规定的,例如:

mov ax, [bx]; mov ax, [si]; mov ax, [di+bp]; mov ax, [bp]; 都是合法的;但是:

mov ax, [dx]; mov ax, [ax]; mov ax, [ds]; 等等都不是合法的操作;

第二点要注意的,上面这4个寄存器都可以单个出现,或者以组合形式出现的。但是,组合形式只能四种形式,分别是:

bx和si, bx和di, bp和si, bp和di;其他形式统统都不是合法的,例如:mov ax, [bx+bp] 是不合法的。

第三点要注意的,只要在[..]中使用寄存器bp,而指令中并没有给出明确的段地址,那么段地址就默认为ss。例如:

mov ax, [bp]  相当于 mov ax, ss:[bp]。

3.处理的数据放在什么地方:有三个地方存放:CPU内部、内存和端口;例如:

mov bx, [0]  ; 内存中,ds:[0]

mov bx, ax   ; CPU内部,寄存器ax

mov bx, 1   ; CPU内部,指令缓冲器

4. 数据位置的表达:分为三种:

1)立即数(idata):举例:mov ax, 1

2)段寄存器:举例:mov ax, bx

3)段地址加偏移地址:举例:mov ax, [0] ; mov ax, [bx+si]

5. 寻址方式:分为以下几种:

1) 直接寻址:[idata]  2)寄存器间接寻址:[bx]  3) 寄存器相对寻址:[bx+idata]

4) 基址变址寻址:[bx+si]  5)相对基址变址寻址:[bx+si+idata]

6. 指令要处理的数据长度:在8086CPU中,可以处理两种长度的数据:byte, word;所以要指明,指令进行的是字操作还是字节操作。实现这点可以通过以下几种方法:

1)通过寄存器指明:

mov ax, 1 ; mov bx, ds:[0]  ;ax, bx 寄存器占用16个字节,是字寄存器,所以传送的是字;

mov al, 1  ; mov bl,  ds:[0]  ; al, bl 寄存器占用8个字节,是字节寄存器,所以传送的是字节;

2)通过指明内存单元长度来实现:

mov word ptr ds:[0], 1  ; word ptr 就是指明是按照字大小来传送数据

mov byte ptr ds:[0], 1  ; byte ptr 就是指明是按照字节大小来传送数据

归根结底,就是通过:X ptr 的方式来指明是按照字还是字节大小来传送数据。

3)其他方法:例如,栈操作都是按照字大小来传递的:push [bx] 

7. div指令:div是除法指令,除法运算规则如下:

1)除数:8位或者16位,放在一个寄存器或者内存单元中;

2)被除数:默认放在AX或者DX和AX中。如果是16位,则放在AX中;如果是32位,则DX存放高16位,AX存放低16位;

3)结果:如果除数是8位,AL存放商,AH存放余数;如果是16位,AX存放商,DX存放余数;

按照上面的说法,除法指令格式为:

div reg / div 内存单元

举例:

div byte ptr ds:[0]

===> al = ax / (ds * 16 + 0) 的商 ; ah = ax / (ds * 16 + 0) 的余数

8. 伪指令DD: 跟db, dw一样道理,dd是定义double word,即双字型数据32位:

dd 1 ; 数值1是占了两个字宽度

9. dup:操作符,主要用来定义重复的数据,比如:

db 3 dup (0)  ;定义了3个字节的0

db 3 dup (1, 2, 3)  ; 定义了9个字节,1, 2, 3, 1, 2, 3, 1, 2, 3

可见,dup的格式为:

db/dw/dd 重复次数 dup (重复数据)

dup是一个非常有用的操作符,如果我们经常要定义大一点的数据,比如300个字节的0,简单一句:db 300 dup (0)

10.一般用[bx+idata+si]来访问结构体中的数据,用bx定位整个结构体,用idata定位结构体中的某一个数据项,用si定位数组项的每个元素。

数据处理的两个基本问题(学习汇编)

时间: 2024-10-10 08:50:56

数据处理的两个基本问题(学习汇编)的相关文章

汇编语言学习第八章-数据处理的两个基本问题

本博文系列参考自<<汇编语言>>第三版,作者:王爽 计算机CPU进行数据处理包括两个基本的问题:1.数据在何处?     2.数据有多大?  本章作为一个前面内容的总结性章节,主要来说明这两个问题.我们定义两个符号reg和sreg.其中reg为寄存器,sreg为段寄存器 reg包括:ax,bx,cx,dx,ah,al,bh,bl,ch,cl,dh,dl,sp,bp,si,di sreg包括:ds,ss,sp,es 8.1  bx. si. di和bp 1.在8086CPU只有bx,

王爽《汇编语言》第三版 第八章 数据处理的两个基本问题

引言 本章中,我们就要针对8086CPU对这两个基本问题进行讨论.虽然讨论是在8086CPU的基础上进行的,但是这两个基本问题却是普遍的,对任何一个处理器都存在. reg的集合包括:ax.bx.cx.dx.ah.al.bh.bl.ch.cl.dh.dl.sp.bp.si.di: sreg的集合包括:ds.ss.cs.es. 8.1 bx.si.di.bp 在8086CPU 中,只有这4个寄存器(bx.bp.si.di)可以用在"[-]" 中来进行内存单元的寻址. 在"[-]&

《汇编语言》总结05 —— 数据处理的两个基本问题

(一)前述 标题所说的两个基本的问题为: 处理的数据在什么地方? 要处理的数据有多长? 这两个问题,在机器指令中必须给以明确或隐含的说明,否则计算机无法工作. 我们定义的描述性符号:reg和sreg. reg表示一个寄存器,用sreg表示一个段寄存器. reg的集合包括:ax.bx.cx.dx.ah.al.bh.bl.ch.cl.dh.dl.sp.bp.si.di: sreg的集合包括:ds.ss.cs.es. (二)bx.si.di和bp 在8086CPU中,只有这4个寄存器可以用在"[...

第八章 数据处理的两个基本问题

一.bx.si.di和bp ①在8086CPU寄存器中,只有这四个寄存器可以用在"[....]"中来表示进行内存单元的寻址. ②在[....]中,这4个寄存器可以单个出现,或者只能以4种组合出现:bx和si.bx和di.bp和si.bp和di. ③使用bx, si, di表示偏移地址时,默认段地址在ds中可以加前缀es, cs,ss.只要在[....]中使用寄存器bp,而指令中没有显性地给出段地址,段地址就默认在ss中,可以加前缀ds,es,cs. 二.机器指令处理的数据在什么地方 机

数据处理的两个基本问题

计算机是进行数据处理,运算的机器,所以存在两个问题: 处理的数据的位置 处理的数据的长度 这两个问题,必须在机器指令中给出说明(有时候是明确的,有时候是隐式的),否者计算器就无法工作. 定义的描述性符号: reg(寄存器):ax,bx,cx,dx,ah,al···sp,bp,si,di sreg(段寄存器):ds,ss,cs,es bx,si,di和bp 总结: 在8086中,只有这四个寄存器可以用在[...]中进行内存寻址. 在[...]中,他们可以单个出现,或者以组合形式出现(组合中不能有其

汇编语言 第八章:数据处理的两个基本问题

1.处理的数据在哪? 2.数据有多长? 以下理由reg表示寄存器,sreg表示段寄存器 reg有:ax,bx,cx,dx,ah,al,bh,bl,ch,cl,dh,dl,sp,bp,si,di sreg有:cs,ds,es,ss 8.1 bx,si,di 和 bp 1) [..]中只能使用这4种寄存器,其他的不可以 2) 只能有下列使用组合,其他的不可以 [bx],[bp],[si],[di],[bx+si],[bx+di],[bp+si],[bp+di]    可以+idata 3) 只要[.

int指令(学习汇编)

int指令 格式:int n n为中断类型码,它的功能是引发中断过程. CPU执行int n指令,相当于引发一个n号中断的中断过程,执行过程如下: 1)取中断类型码n: 2)标志寄存器入栈,IF=0,TF=0: 3)CS.IP入栈 4)(IP)=(n*4),(CS)=(n*4+2) 从此处转去执行n号中断的中断处理程序. 可以在程序中使用int指令调用任何一个中断的中断处理程序. assume cs:code code segment start:    mov ax,0b800h move s

更灵活的定位内存地址的方法(学习汇编)

1.and指令:逻辑与指令,按位进行与运算.与1不变,与0变0,可将对象相应位设为0. 2.or指令:逻辑或指令,按为进行或运算.或1变1,或0变0,可将对象位设为1. 3.[BX+idata]的几种表现形式: mov ax,[200+bx] mov ax,200[bx] mov ax,[bx].200 4.SI和DI是8086CPU中和Bx功能相似的寄存器,只是不能分成两个8位的寄存器来用. 5.[BX+SI]进行内存地址定位的几种形式: mov ax,[bx][si] mov ax,[bx+

端口(学习汇编)

1.在访问端口的时候,CPU通过端口地址来定位端口.因为端口所在的芯片和CPU通过总线相连,所以,端口地址和内存地址一样,通过地址总线来传送. 2.在PC系统中,CPU最多可以定位64KB个不同的端口,则端口地址的范围为0~65535 3.对端口的读写不能用mov,push.pop等内存读写指令.端口的读写指令只有两条:in和out,分别用于从端口读写数据和往端口写入数据. 4.在in和out指令中,只能使用ax或al来存放从端口中读入的数据或要发送到端口中的数据. 5.访问8位端口时用al,访