汇编语言笔记5
汇编语言笔记5
第7、8章
loop指令
loop指令和循环有关,循环的次数和CX的值有关
loop指令执行过程:
- CX=CX-1
- 判断CX中的值,不为0则转移到标号处执行程序
CX中的值影响loop指令的循环结果。通常我们用loop指令来进行循环,CX中存放循环的次数
段前缀
我们可以在访问内存单元时显式地给出段寄存器,这就是段前缀
例子:
1 | mov ax,ds:[bx] |
and和or指令
and指令:逻辑与,按位进行与计算
or指令:逻辑或,按位进行或计算
大小写转换问题:
- 大小写的ASCII码相差32,即二进制的第五位为1还是0的问题(右边开始为第0位)
- 大小写转换就是and 11011111B,即可将小写转换为大写,or 00100000B,即可将大写转小写
- 或者直接对ASCII码进行加减20H处理
bx,si,di和bp
在8086CPU中,只有 bx,si,di,bp这四个寄存器可以用在【】中来表示偏移地址进行寻址。
使用其他寄存器是错误的
在这四个寄存器中:
- **主:**bx,bp
- 从:si,di
两主或两从不能同时出现在中括号中,下面的代码是错误的:
1 | mov ax,[bx+bp] |
在使用【bp】时,如果不显式指定段地址,那么段地址默认在SS中(堆栈段)
指令要处理的数据有多长?
8086CPU的指令可以处理两种长度的数据:byte和word。
机器指令中要指明要操作的数据有多长:
- 通过寄存器名指明:ax,al等
- 通过word ptr和byte ptr来指明
- 其他方法:例如push指令只对字型数据进行操作
div指令
div指令是除法指令。
-
**除数:**除数有8位和16位两种。存放在寄存器或内存单元中
-
**被除数:**如果除数为8位,被除数则为16位,默认在AX中存放。如果除数为16位,则被除数为32位,高16位存放在dx中,低16位存放在ax中
-
**结果:**除数为8位,则结果为8位,商存放在al中,余数存放在ah中。除数为16位,则结果为16位,商存放在ax中,余数存放在dx中
-
格式:
1
2
3div 寄存器
div 内存单元
div byte ptr ds:[0];指定除数为8位
伪指令db,dd,dw和操作符dup
**db用来定义字节型数据:**db 1
**dw用来定义字型数据:**dw 1
dd用来定义双字型数据 dd 1,占32字节
dup是一个操作符,用来进行数据定义的重复:dd 3 dup(0,1,1):定义9个双字型数据,三个0,三个1,三个1
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 星辰微光的博客!





