自学王爽老师《汇编语言》笔记——第5章[BX]和loop指令

第5章 [BX]和loop指令

  1. [bx]和内存单元的描述

    • [bx]表示一个内存单元,它的偏移地址在bx中,段地址在ds中。
  2. loop

  3. 我们定义的描述性的符号:“()”

    • 为了描述简洁,使用“()”来表示一个寄存器或一个内存单元的内容。
    • "()"中的元素有三种类型:寄存器名、段寄存器名、内存单元的物理地址。
    • "(X)"所表示的数据有两种类型:字节、字。
  4. 约定符号idata表示常量

    • 例如:mov ax,[idata]就代表mov ax,[0]、mov ax,[1]、......

5.1 [BX]

BX中存放的数据作为一个偏移地址EA,段地址SA默认在ds中。

5.2 Loop指令

  • loop指令格式:loop 标号
  • CPU执行loop指令:
    1. (cx) = (cx) - 1;
    2. 判断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
#汇编语言##读书笔记##自学#
全部评论
loop的使用懂了
1 回复 分享
发布于 2022-08-28 12:50 陕西

相关推荐

11-24 19:04
已编辑
湖南工商大学 Java
点赞 评论 收藏
分享
评论
点赞
1
分享
牛客网
牛客企业服务