王爽 《汇编语言》 第8章 数据处理的两个基本问题 学习笔记

目录

一、bx、si、di和bp

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

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

四、寻址方式

五、指令要处理的数据有多长

六、汇编中和C语言中结构体类似的寻址方式

七、div指令

八、伪指令dd

九、dup


定义的描述性符号:reg和sreg

reg表示一个寄存器,包括:

ax,ah,al,bx,bh,bl,cx,ch,cl,dx,dh,dl,sp,bp,sp,di

sreg表示一个段寄存器,包括:

ds,ss,cs,es

一、bx、si、di和bp

(1)只有这4个寄存器可以在[……]中来进行内存单元的寻址

(2)在[……]中,这4个寄存器可以单独出现,或只能以4种组合出现:

        bx和si    bx和di    bp和si    bp和di

(3)只要在[……]中使用bp,而指令中没有显性地给出段地址,段地址就默认在ss中

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

3个地方:CPU内部、内存、端口

例:

mov bx,[0]     内存,ds:0单元

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

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

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

(1)立即数(idata):直接包含在机器指令中的数据

例:mov ax,1

       mov al,'a'

(2)寄存器

例:mov ax,bx

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

用[X]的格式给出EA,SA在某个段寄存器中

1 存放段地址的寄存器可以是默认的

        如:mov ax,[bx] 段地址默认在ds中

               mov ax,[bp] 段地址默认在ss中

2 寄存器也可以是显性给出的

        如: mov ax,ds:[bp]

四、寻址方式

(1)直接寻址

[idata]

(2)寄存器间接寻址

[bx]   [si]   [di]   [bp]

(3)寄存器相对寻址

[bx+idata]   [si+idata]   [di+idata]   [bp+idata]

(4)基址变址寻址

[bx+si]   [bx+di]   [bp+si]   [bp+di]

(5)相对基址变址寻址

[bx+si+idata]   [bx+di+idata]   [bp+si+idata]   [bp+di+idata]

五、指令要处理的数据有多长

(1)通过寄存器名指明

字操作:mov ax,1       mov,ds:[0],ax   inc ax

字节操作:mov al,1     mov ds:[0],al   inc al

(2)X ptr (X为word或byte)

字单元:mov word ptr ds:[0],1      

字节单元  mov byte ptr ds:[0],1

(3)其他

有些指令默认了访问的是字单元还是字节单元,如push指令只进行字操作

六、汇编中和C语言中结构体类似的寻址方式

C语言中:

若有结构体company,成员有name[3]

则可以用company.name[1]访问名称的第二个字符

汇编语言中:

可以用[bx+idata+si]的方式访问数据

其中,用bx定位整个结构体,idata定位结构体中的某一个数据项,用si定位数据项中的每个元素。

书写方式:[bx].idata   [bx].idata[si]

七、div指令

(1)除数:有8位和16位两种,在一个reg或内存单元中。

(2)被除数:

若除数为8位,被除数为16位,默认在AX中存放 

若除数位16位,被除数则为32位,在DX和AX中存放,DX存放高16位,AX存放低16位

(3)结果:

若除数为8位,则AL存储商,AH存储余数

若除数为16位,则AX存储商,DX存储余数

例1:div byte ptr ds:[0]

        含义:(al)=(ax)/((ds)*16+0)的商

                   (ah)=(ax)/((ds)*16+0)的余数

例2:div word ptr es:0

        含义:(ax)=((dx)*10000H+(ax))/((es)*16+0)的商

                   (dx)=((dx)*10000H+(ax))/((es)*16+0)的余数

例3:计算100001/100

        100001大于65535,不能用ax存放,所以只能用ax和dx存放。

        100001的16进制表示为186A1H

        故指令为:

mov dx,1
mov ax,86A1H
mov bx,100
div bx

八、伪指令dd

前面学过了db和dw

db定义字节型数据,dw定义字形数据

这里dd定义双字型数据(double word),占2个字,4个字节,8个bit位

九、dup

dup是一个操作符,和db,dw,dd等数据定义伪指令配合使用

语法:db 重复的次数  dup (重复的字节型数据)

           dw 重复的次数  dup (重复的字型数据)

           dd 重复的次数  dup (重复的双字型数据)

例:定义一个容量为200个字节的栈段

        db 200 dup (0)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云霄星乖乖的果冻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值