最近比较忙..汇编的学习停了两天...现在继续...
54.关于[bx]和loop指令.
要完整的描述一个内存单元,需要的有两点:
a)内存单元的地址
b)内存单元的长度(类型)
[bx]可以表示一个内存单元,它的偏移地址在bx中:
mov ax , [bx]
将一个内存单元的内容送入ax中,这个内存单元的长度为2字节,存放一个字,偏移地址在bx中,段地址在ds中.
55.这里介绍一个描述性的符号:()..来表示一个寄存器或内存单元中的内容.
(ax):表示ax中的内容;(20000H)表示内存20000H单元的内容.
()中的内容可以有三种类型:
a)寄存器名
b)段寄存器名
c)内存单元的物理地址
(X)表示的数据有两种类型:a)字节 b)字
56.[bx]
mov ax,[bx]
功能:bx中存放的数据作为一个偏移地址EA,段地址SA默认在as中,将SA:EA处的数据送入ax中.
即:(ax)=((ds)*16+(bx))
mov [bx],ax
将ax中的数据送入内存SA:EA中.
57.inc:inc bx
使bx中的内容加1.
58.loop指令
格式: loop 标号
cpu执行到loop指令的时候,需要进行两步操作:
a)cx=cx-1
b)判断cx中的值,不为0则转至标号处执行程序,如果为0则继续向下执行.
cx中的值影响着loop的执行结果.一般情况下,用loop实现循环功能,cx中存放循环的次数....可以联想一下..c中的循环是如何在汇编中实现的...?
e.g...计算2的12次方.
assume cs:code
code segment
mov ax,2
mov cx,11
s:add ax,ax
loop s
mov ax,4c00H
int 21H
code ends
end
在汇编源程序中,数据不能以字母开头.在A000H在汇编中要写为0A000H.
59.一段安全的内存空间
a)我们需要直接向一段内存中写入内容
b)这段空间不应存放系统或其他程序的数据或代码,否则写入操作系统很可能引发错误.
60.and和or指令
a)and:逻辑与指令,按位进行与运算
b)or:逻辑或指令,按位进行或运算
61.关于ascii编码
用''的形式指明数据是以字符的形式给出的,编译器将它们转化为相应的ascii码.
62.SI和DI是8086cpu中和bx功能相近的寄存器,SI和DI不能够分成两个8位寄存器来使用.