您的位置:首页 > 其它

[汇编学习笔记][第八章数据处理的两个基本问题]

2016-04-21 00:10 281 查看

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

本章对前面具有总结性。主要解决以下两个问题

处理的数据在什么地方

要处理的数据有多长

定义描述符号reg和sreg

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个寄存器可以用在
"[..]"
当中来进行内存单元的寻址。

4种寄存器可以单独出现,否则只能以这四种组合出现

bx和si

bx和di

bp和si

bp和di

重点:只要在
[..]
中使用bp,而指令中没有显性地给出地址,段地址默认为ss中

不太懂这三个规则的由来

8.2 机器指令处理的数据在什么地方

在机器指令这一层来说,不关心数据的值,关心指令执行前一刻,他将要处理的数据的位置。

CPU内部

内存

端口

8.3 汇编语言中数据位置的表达

立即数(idata)

执行前在CPU的指令缓冲器中

寄存器

在CPU内寄存器中

段地址(SA)和偏移地址(EA)

在内存或端口

8.4 寻址方式

8.4.1 直接寻址

形式
[idata]


含义 普通变量

8.4.2 寄存器间接寻址

形式
[bx]
,
[si]
,
[di]
,
[bp]


含义

数组

8.4.3 寄存器相对寻址

形式
[bx+idata]
….
idata[bx]
….
[bx].idata


含义

二维数组
[bx][idata]


一维数组
idata[bx]


结构体
[bx].idata


8.4.4**基址变址寻址**

形式
[bx+si]
,
[bx+di]
,
[bp+si]
,
[bp+di]


含义

二维数组
[bx][si]


8.4.5 相对基址变址

形式
[bx+si+idata]
,
[bx].idata[si]
,
idata[bx][si]


含义

普通数组
[bx+si+idata]


结构中的数组
[bx].idata[si]


二维数组
idata[bx][si]


8.5 指令要处理的数据有多长

8086CPU的指令,可以处理两种尺寸的数据,
byte
word
。在机器指令中要指明处理那种数据。

汇编语言有以下方法处理。

通过寄存器名指明要处理的数据的尺寸。

用操作符
X ptr
指明长度,X可以是
word
/
byte


其他方法,
push
只进行字操作

Tips:

注意
inc byte ptr
inc word prt
的区别

:在不进位的时候,两者没有区别,进位的时候,byte会抛弃进位

8.6 寻址方式的综合应用

mov si,0
mov byte ptr [bx].10h[si],'V'
inc si
mov byte ptr [bx].10h[si],'A'
inc si
mov byte ptr [bx].10h[si],'X'


8.7 div指令

除数:有8位,和16位两种。根据8.5判定。

被除数

8位:默认放在AX中

16位:默认放在DX和AX中,DX存高16位,AX存低16位

结果

8位:AL存储商,AH存储余数

16位:AX存储商,DX存储余数

格式如下

div reg
div byte/word ptr 内存单元


至于溢出的问题

会提示 divide error - overflow.

至于怎么解决,要看后面的分析


8.8 伪指令dd

dd
=Double worD,双字型数据,32位

data segment
db 1
dw 1
dd 1
data ends
实质:
db=01H
dw=0001H
dd=00000001H


8.9 dub

dub是一个操作符,伪指令用于进行数据的重复

语法

db/dw/dd 重复次数 (重复的db/dw/dd数据)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: