自学王爽老师《汇编语言》笔记——第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
#汇编语言##读书笔记##自学#
查看30道真题和解析
