汇编笔记[04][内存寻址方式]

1 内存寻址方式-导学

  1. 处理字符问题
  2. [bx+idata]方式寻址
  3. SI和DI寄存器
  4. [bx+si]和[bx+di]方式寻址
  5. [bx+si+idata]和[bx+di+idata]方式寻址
  6. 不同的寻址方式的灵活应用
  7. 不同寻址方式演示
  8. 用于内存寻址的寄存器
  9. 在哪里?有多长?
  10. 寻址方式的综合应用
  11. 用div指令实现触发
  12. 用dup设置内存空间

2 处理字符问题

2.1 处理字符问题

  • 2.1.1 汇编程序中,用’…'的方式指数据是以字符的形式给出的,编译器将他们转化为相应的ASCII码
注意:
小写字母的ASCII码值比大写字母的ASCII码值大20H。
大写 + 20H --> 小写 
小写 - 20H -> 大写

逻辑与指令:and dest,src (将目标dest和源src的书做与操作,结果放在dest目标中)

3 [bx+idata]方式寻址

3.1 [bx+idata]的含义

  • 3.1.1
[bx+idata]表示一个内存单元,它的偏移地址为(bx)+idata(bx中的数值加上idata)

mov ax,[bx+200]/mov ax, [200+bx]的含义
数学化的描述为:(ax) = ((ds)*16+200+(bx))

指令mov = ax, [bx+200]的其他写法(常用)
mov ax, [200+bx]
mov ax, 200[bx]
mov ax, [bx].200

4 SI和DI寄存器

4.1 CPU内部的寄存器

  • 4.1.1 8086CPU有14个寄存器
通用寄存器:AX,BX,CX,DX
变址寄存器:SI,DI
指针寄存器:SP,BP
指令指针寄存器:IP
段寄存器:CS,SS,DS,ES
标志寄存器:PSW

4.2 SI和DI常执行与地址有关的操作

  • 4.2.1 SI和DI是8086CPU中和BX功能相近的寄存器
BX:通用寄存器,在计算存储器地址时,常作为基地址寄存器用
SI:source index,源变址寄存器
DI:destination index,目标变址寄存器

区别:
SI和DI不能分成两个8位寄存器来使用。

5 [bx+si]和[bx+di]方式寻址

5.1 [bx+si]和[bx+di]方式指定地址

  • 5.1.1 [bx+si]表示一个内存单元
    偏移地址为(bx)+(si) (即bx中的数值加上si中的数值)。
  • 5.1.2 指令mov ax,[bx+si]的含义
    1.将一个内存单元的内容送入ax
    2.这个内存单元的长度为2字节(字单元),存放一个字
    3.偏移地址为bx中的数值加上si中的数值
    4.段地址在ds中
  • 5.1.3 指令mov ax,[bx+si]的数学化描述
    (ax)=((ds)*16+(bx)+(si))
  • 5.1.4 mov ax,[bx+si]的其他写法
    mov ax,[bx][si]

6 [bx+si+idata]和[bx+di+idata]

6.1 [bx+si+idata]和[bx+di+idata]方式指定地址

  • 6.1.1 [bx+si+idata]表示一个内存单元
    偏移地址为(bx)+(si)+idata,即bx中的数值加上si中的数值再加上idata
  • 6.1.2 指令mov ax,[bx+si+idata]的含义
    1.将一个内存单元的内容送入ax
    2.这个内存单元的长度为2字节(字单元),存放一个字
    3.偏移地址为bx中的数值加上si中的数值再加上idata
    4.段地址在ds中
  • 6.1.3 数学化的描述
    (ax)=((ds)*16+(bx)+(si)+idata)
  • 6.1.4 mov ax,[bx+si+idata]的其他写法
mov ax,[bx+200+si]
mov ax,[200+bx+si]
mov ax,200[bx][si]
mov ax,[bx].200[si]
mov ax,[bx][si].200
mov ax,[bx][si] # 常数是0的写法

7 不同的寻址方式的灵活应用

7.1 对内存的寻址方式

在这里插入图片描述

8 不同寻址方式演示

8.1 内存的寻址方式

在这里插入图片描述

9 用于内存寻址的寄存器

9.1 哪些寄存器用于寻址?

通用寄存器:AX,BX,CX,DX
变址寄存器:SI,DI
指针寄存器:SP,BP
指令指针寄存器:IP
段寄存器:CS,SS,DS,ES
标志寄存器:PSW
  • 9.1.1 用于内存寻址的寄存器用法
正确的指令
mov ax,[bx]
mov ax,[bx+si]
mov ax,[bx+di]
mov ax,[bp]
mov ax,[bp+si]
mov ax,[bp+di]
# 只有bx、bp、si、di可以用在[...]对内存单元寻址

错误的指令
mov ax,[cx]
mov ax,[ax]
mov ax,[dx]
mov ax,[ds]
# bx以外的通用寄存器、段寄存器不可以用在[...]中

在这里插入图片描述

错误的指令
mov ax,[bx+bp]
mov ax,[si+di]

bx、bp区别:
bx默认指ds段;
bp默认指ss段;

10 在哪里?有多长?

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

在这里插入图片描述

11 寻址方式的综合应用

12 用div指令实现除法

12.1 div指令

div是除法指令,使用div作除法的时候
	被除数:(默认),放在AX或DX和AX中
	除数:8位或16位,在寄存器或内存单元中
	结果:。。。

div指令格式
	div 寄存器
	div 内存单元
被除数AXDX和AX
除数8位内存或寄存器16位内存或寄存器
ALAX
余数AHDX

在这里插入图片描述

12.2 在内存单元中实施除法

在这里插入图片描述

data segment
	dd 100001 【0】
	dw 100	【4】
	dw 0	【6】
data ends
mov ax,data
mov ds,ax # 设置段地址为data地址
mov ax,ds:[0] # 被除数低位
mov dx,ds:[2] # 被除数高位
mov word ptr ds:[4] # 除偏移地址是4的字即 dw 100
mov ds:[6],ax # 把ax中的结果放在ds:[6]中

13 用dup设置内存空间

13.1 dup功能和用法

  • 13.1.1 功能
    dup和db、dw、dd等数据定义伪指令配合使用,用来进行数据的重复
    把括号中的数据重复多次
    在这里插入图片描述
dup的使用格式
	db重复的次数 dup (重复的字节型数据)
	dw重复的次数 dup (重复的字型数据)
	dd重复的次数 dup	(重复的双字数据)
  • 13.1.2 dup用途
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值