您的位置:首页 > 其它

汇编语言笔记08-数据处理的两个基本问题(阶段总结)

2012-10-21 00:46 417 查看
转载必须注明出处,违者必究。http://www.cnblogs.com/dennisOne

数据处理涉及到两个基本问题:

(1). 处理的数据在什么地方?(内存,寄存器,端口还是指令缓冲器)

(2).要处理的数据有多长?(byte, word, dword)

☞寄存器总结

寄存器 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

在[…]中,这4个寄存器可以单个 出现,或者只能以4中组合出现(bx/bp+si/di):bx和si、bx和di、bp和si、bp和di。
正确指令:



错误指令:



在[...]中使用bp,默认的段地址是ss中。



但是可以指定段寄存器:

mov ax, ds:[bp] ; (ax)=((ds)*16+(bp))

mov ax, es:[bx] ; (ax)=((es)*16+(bx))

☞第一个基本问题:处理的数据在什么地方?

绝大部分机器指令都是进行数据处理的指令,处理大致分为3类:读取、写入、运算。而所要处理的数据可以在3个地方:CPU内部、内存和端口。

数据的位置:

类型

位置

示例

立即数(idata)

直接包含在机器指令的数据(CPU的指令缓冲器)

mov ax,1

寄存器

寄存器中

mov ax, bx

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

内存中

mov ax, ds:[0]

☞总结:寻址方式(超全版本)



☞第二个基本问题:要处理的数据有多长?

8086CPU的处理能力
8086CPU的指令,可以处理两种尺寸数据:byte和word。所以可分为:字操作和字节操作。

指令如何指明是字操作还是字节操作?

方法

示例

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



X ptr指明内存单元的长度



指令的默认方式(push/pop默认字操作)

push [1000H]

pop [1000H]

☞C语言和汇编语言的寻址方式(对比)

问题描述:关于DEC公司的一条记录(1982年)如下:

公司名称:DEC

总裁姓名:Ken Olsen

排 名:137

收 入:40(40亿)

著名产品:PDP

任务:公司到了1988年,DEC公司的信息发生了如下变化:

(1) Ken OSen在富豪榜上的排名上升至38位;

(2) DEC的收入增加了70亿美元;

(3) 该公司的著名产品已变为VAX系列计算机

数据存放示意



C语言的处理方式



Assembly的处理方式



重点:Assembly和C的处理方式类比



类比:

8086CPU提供了[bx+si+idata]的寻址方式可以方便处理结构化数据。

bx定位整个结构体,idata定位结构体重的某一个数据项,用si定位数组项中的每一个元素。所以:[bx].idata和[bx].idata[si]更加优雅(和C语言很像)。

dec.cp[i]对应于bx.10h[si]。

☞div指令



示例:



☞伪指令 db dw dd

含义
date segment

db 1

dw 1

dd 1

date ends

第一个数据位01H,在data:0处,占1个字节。

第二个数据位0001H,在data:1处,占2个字节。

第三个数据位00000001H,在data:3处,占4个字节。

应用:用div计算data段中第一个数据除以第二个数据后的结构,商存在第三个数据的存储单元中。
assume ds:data, cs:code

data segment

dd 1000001

dw 100

dw 0

data ends

code segment

start: mov ax, data

mov dx, ax

mov ax, ds:[0]

mov dx, ds:[2]

div word ptr ds:[4]

mov ds:[6], ax

code ends

end start

☞操作符dup

操作符dup是由编译器识别处理的。它和db、dw、dd等数据定义伪指令配合使用。

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

示例

db 3 dup (0)

db 0 0 0

db 3 dup (0,1,2)

db 0,1,2,0,1,2,0,1,2

db 3 dup ('abc', 'ABC')

db 'abcABCabcABCabcABC'

如何定义200个字节的栈端
stack segment

db 200 dup (0)

stack end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: