汇编第八节-数据处理的两个基本问题

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

描述性符号:reg和sreg
reg(寄存器):ax,bx,cx,dx,ah,al,bh,bl,ch,cl,dh,dl,sp,bp,si,di;
sreg(段寄存器):ds,ss,cs,es

1.bx,si,di和bp:

8086cpu中只有这4个寄存器或者组合可以用[…]中来进行内存单元的寻址

mov ax,[bx/si/di/bp]
mov ax,[bx/bp+si/di+idata] (斜杠表示或的意思)

以下指令是错误的:

mov ax,[bx+bp]
mov ax,[si+di]

只要在[…]中使用寄存器bp,而指令中没有显式地给出段地址,段地址默认在ss中

mov ax,[bp]             含义:(ax)=((ss)*16+(bp))
mov ax,[bp+si+idata]    含义:(ax)=((ss)*16+(bp)+(si)+idata)

2.机器指令处理的数据在什么地方:

绝大部分机器指令都是进行数据处理的指令,处理可以分为三类:读取,写入,运算;
机器指令这一层不关心数据值多少,关心指令执行前一刻,它将要处理数据的位置:cpu内部,内存,端口

3.汇编语言中数据位置的表达:

立即数(idata):

mov ax,1 /// mov bx,2000h ///mov a1,'a'

寄存器:

mov ax,bx ///push bx ///mov ds:[0],bx

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

mov ax,[0] ///mov ax,[di]///mov ax,[bx+si+8]  段地址默认在ds中
mov ax,[bp]///mov ax,[dp+si+8]                段地址默认在ss中
mov ax,es:[bx]//mov ax,[bx+si+8]              段地址显式给出

4.寻址方式:

直接寻址:[idata]

寄存器间接寻址:[bx]/[si]/[di]/[bp]

寄存器相对寻址:用于结构体[bx].data/用于数组idata[si],idata[di]/用于二维数组:

[bx][idata]

基址变址寻址:用于二维数组[bx][si]

相对基址变址寻址:用于表格(结构)中的数组项[bx].idata[si]/用于二维数组idata[bx][si]

5.指令要处理的数据有多长:

8086CPU的指令,可以处理两种尺寸的数据,byte(字节)和word(字)
第一种方法:寄存器名指明要处理的数据的尺寸比如ax为字操作,al等为字节操作
第二种方法:操作符X ptr 指明内存单元的长度
用word ptr指明了指令访问的内存单元是一个字单元

mov word ptr ds:[0],1
inc word ptr [bx]
inc word ptr ds:[0]
add word ptr [bx],2

用byte ptr指明访问的内存单元是一个字节单元

mov byte ptr ds:[0],1
inc byte ptr [bx]
inc byte ptr ds:[0]
add byte ptr [bx],2

第三种方法:
有些指令默认了访问的是字单元还是字节单元,比如push 就只对字操作

6.寻址方式的综合应用:

eg:关于某公司的一条记录如下:
公司名称:DEC
总裁名称:Ken Olsen
排 名:137
收 入:40(40亿美元)
著名产品:PDP(小型机)
存放在seg段中的偏移地址60H起始的位置。
现在更改排名38,收入增加70,产品改为VAX

mov ax,seg
mov ds,ax
mov bx,60h

mov word ptr [bx+0ch],38
add word ptr [bx+0eh],70

mov si,0                ;用si来定位产品的字符串中的字符
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'

7.div指令:

div除法指令,注意问题:
**a.除数:有8位和16位两种,在一个reg或内存单元中
b.被除数:默认放在AX或DX和AX中,如果除数为8位,被除数则为16位,默认在AX中存放;如果除数为16位,被除数则为32位,在DX和AX中存放,DX存放高16位,AX存放低16位
c.结果:如果除数为8位,则AL存储除法操作的商,AH存储除法操作的余数。如果除数为16位,则AX存储除法操作的商,DX存储除法操作的余数。**

div byte ptr ds:[0]
含义:(al)=(ax)/((ds)*16+0)的商
      (ah)=(ax)/((ds)*16+0)的余数
div word ptr [bx+si+8]
含义:(ax)=[(dx)*10000H+(ax)]/((ds)*16+(bx)+(si)+8)的商
      (dx)=[(dx)*10000H+(ax)]/((ds)*16+(bx)+(si)+8)的余数

8.伪指令dd:

db:定义字节型数据
dw:定义字型数据
dd:定义dword双字型数据(double word)

data segment
    db 1
    dw 1
    dd 1
data ends

第一个数据01H,data:0处,占一个字节;
第二个数据0001H,data:1处,占一个字;
第三个数据00000001H,data:3处,占2个字;

9.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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值