如何将16位2进制数写成内存地址_汇编语言 第七章 更灵活的定位内存地址的方法...

第七章 更灵活的定位内存地址的方法

7.1 and 和 or 指令

  1. and 指令:逻辑与,按位进行与运算。

通过该指令可将操作对象的相应位设为 0,其他位不变。

  1. or 指令:逻辑或,按位进行或运算。

通过该指令可将操作对象的相应位设为 1,其他位不变。

7.2 关于 ASCII 码

略。

7.3 以字符形式给出的数据

在汇编程序中,用 ’……‘ 的方式指明数据是以字符的形式给出的,编译器将把它们转化为对应的 ASCII 码。

assume 

3d7b825259791bf6af966eaa7cbabf2a.png

7.4 大小写转换的问题

就 ASCII 码的二进制形式来看,除第 5 位(位数从 0 开始计算)外,大写字母和小写字母都一样。大写字母 ASCII 码的第 5 位为 0,小写字母 ASCII 码的第 5 位为 1。这样就可以用 or 和 and 来将大小写字母转换,而无须引入判断指令。完整程序如下:

assume 

7.5 [bx+idata]

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

move ax,[bx+200] 的含义:将一个内存单元的内容送入 ax,这个内存单元的长度为 2个字节(字单元),存放一个字,偏移地址为 bx 中的数值加上 200,段地址在 ds 中。

该指令也可以写成如下格式:

mov 

7.6 用 [bx+idata] 的方式进行数组的处理

在 codesg 中填写代码代码,将 datasg 中定义的第一字符串转化为大写,第二个字符串转化为小写。

assume 

用 [bx+idata] 改进后如下:

mov 

7.7 SI 和 DI

si 和 di 是 8086CPU 中和 bx 功能相近的寄存器,si 和 di 不能够分成两个 8 位寄存器来使用。下面的 3 组指令实现了相同的功能。

# 1

7.8 [bx] 和 [bx+di]

还可以用 [bx+si] 和 [bx+di] 来指明一个内存单元。这两条命令含义相似,以前者为例。

[bx+si] 表示一个内存单元。偏移地址为(bx)+(si)。

mov ax,[bx+si] 的含义:将一个内存单元的内容送入 ax,这个内存单元的长度为 2 字节(字单元),存放一个字,偏移地址为 bx 中的数值加上 si 中的数值,段地址在 ds 中。

也可以写成 mov ax,[bx][si]。

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

[bx+si+idata] 和 [bx+di+idata] 的含义相似,以前者为例:

[bx+si+idata] 表示一个内存单元,偏移地址是 (bx)+(si)+idata。

mov ax,[bx+si+idata] 的含义:将一个内存单元的内容送入 ax,这个内存单元的长度为 2 字节(字单元),存放一个字,偏移地址为 bx 中的数值加上 si 中的数值再加上 idata,段地址在 ds 中。

该指令也可以写成如下格式:

mov 

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

比较前面几种定位内存地址的方法(可称为寻址方法),就可以发现:

  • [idata] 用一个常量来表示地址,可用于直接定位一个内存单元;
  • [bx] 用一个变量来表示内存地址,可用于间接定位一个内存单元;
  • [bx+idata] 用一个变量和常量表示地址,可在一个起始地址的基础上用变量间接定位一个内存单元;
  • [bx+si] 用两个变量表示地址;
  • [bx+si+idata] 用两个变量和一个常量表示地址。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值