自学王爽老师《汇编语言》笔记——第5章[BX]和loop指令
第5章 [BX]和loop指令
[bx]和内存单元的描述
- [bx]表示一个内存单元,它的偏移地址在bx中,段地址在ds中。
loop
我们定义的描述性的符号:“()”
- 为了描述简洁,使用“()”来表示一个寄存器或一个内存单元的内容。
- "()"中的元素有三种类型:寄存器名、段寄存器名、内存单元的物理地址。
- "(X)"所表示的数据有两种类型:字节、字。
约定符号idata表示常量
- 例如:mov ax,[idata]就代表mov ax,[0]、mov ax,[1]、......
5.1 [BX]
BX中存放的数据作为一个偏移地址EA,段地址SA默认在ds中。
5.2 Loop指令
- loop指令格式:
loop 标号
- CPU执行loop指令:
- (cx) = (cx) - 1;
- 判断cx中的值,不为零则转至标号处执行程序,如果为零则向下执行。
- 通常我们用loop指令来实现循环功能,cx中存放循环次数。
- loop指令框架:
mov cx,循环次数 标号: 循环执行的程序段 loop 标号
5.3 在Debug中跟踪用loop指令实现的循环程序
- 汇编源程序中,数据不能以字母开头。
- 在loop指令处用
p命令
来使Debug自动重复执行循环中的指令。 g命令
- 语法:
g 代码段偏移地址
- 作用:从当前CS:IP指向的指令开始执行,一直到(IP)=偏移地址处结束。
- 语法:
5.4 Debug和汇编编译器masm对指令的不同处理
在汇编源程序中,如果用指令访问一个内存单元,可以[XXXXXH]
或者ds[X]
或者[bx]
。
5.5 loop和[bx]的联合应用
我们可以不写新的指令,仅通过改变bx中的数值,改变访问的内存单元。
5.6 段前缀
出现在访问内存单元的指令中,用于显示地指明内存单元的段地址的 ds
, cs
, ss
, es
在汇编语言中称为段前缀。
5.7 一段安全的空间
- 在8086模式中,随意向一段内存空间写入内容是很危险的,因为这段空间中可能存放着重要的系统数据或代码。
- DOS和其他合法的程序一般都不会使用
0:200~0:2ff
这段大小为256个字节空间,所以我们需要直接向一段内存中写入内容时,就使用这段空间。
5.8 段前缀的使用
可以通过段前缀使用多个段。
实验4 [bx]和loop的使用
assume cs:code ; 完整版本 code segment mov ax,20h mov es,ax mov cx,64 mov bx,0 mov dl,0 s: mov es:[bx],dl inc bx inc dl loop s mov ax,4c00h int 21h code ends end
assume cs:code ; 9条指令版本完整版本 code segment mov ax,20h mov es,ax mov cx,64 mov bx,0 s: mov es:[bx],bl inc bx loop s mov ax,4c00h int 21h code ends end#汇编语言##读书笔记##自学#