<<汇编语言>>第7~8章笔记

2018-05-24  本文已影响0人  zzkdev

and 和 or 指令

  1. and指令:将可操作对象的相应位设为0,其它位不变。
mov al, 01100011B
and al, 00111011B
# 执行后al = 00100011B
  1. or指令:将可操作对象的相应位设为1,其他位不变
mov al, 01100011B
or al,  00111011B
# 执行后:al = 01111011B

利用and和or指令进行巧妙的大小写转化

对ASCII码的二进制形式进行观察,可以看出大写字母的第五位为0,小写字母的第五位为1。
这样利用and和or指令就可以进行大小写转化了

# 示例
or  al, 00100000B # 转化成小写字符
and al, 11011111B # 转化成大写字符

si和di寄存器

si和di是8086CPU中和bx功能相近的寄存器,si和di不能分成两个8位寄存器。

bp寄存器

只要在[...]中使用寄存器bp,而指令中没有显性地给出段地址,段地址就在ss中。

指明处理数据长度

在没有寄存器名的情况下,用操作符X ptr指明内存单元的长度,X可以为word或byte

# 示例
mov word ptr ds:[0], 1
mov byte ptr ds:[0], 2

note : 有些指令默认了访问的是字单元还是节单元,比如push指令只进行字操作,不用指明数据长度。

div指令

div为除法指令,使用div做除法要注意以下问题:

# 示例
# 用除法指令计算100001/100
mov dx, 1
mov ax, 86A1H
mov bx, 100
div mov

mul指令

mul是乘法指令,使用mul做乘法时:

  1. 两个相乘的数:两个相乘的数,要么都是8位,要么都是16位。如果是8位,一个默认放在AL中,另一个存放在8位的reg或内存字节单元中;如果是16位,一个默认在AX中,另一个放在16位reg或内存单元中。
  2. 结果:如果是8位的乘法,结果默认放在AX中;如果是16位的乘法,结果高位默认在DX中存放,低位在AX中存放
# 示例 计算100 * 10
mov al, 100
mov bl, 10
mul bl

这里是我的博客


上一篇下一篇

猜你喜欢

热点阅读