微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 汇编入门学习笔记 (四)—— [BX] 和 loop指令

汇编入门学习笔记 (四)—— [BX] 和 loop指令

时间:11-09 来源:互联网 点击:
疯狂的暑假学习之 汇编入门学习笔记 (四)—— [BX]loop指令

参考:《汇编语言》 王爽 第5章

1.[BX]

mov al,[1]

在debug中,会把bs:1 中数据赋给al,但在在masm中不会把bs:1 中数据赋给al,而是把 [1] 认为是 1 赋给al。

如果要实现在debug中的mov al,[1],在masm中就需要[bx]

如:

mov bx,1

mov al,[bx]

还可以用 bs:[1] 的方式

如:

mov al,bs:[1]

2.loop

循环 要使用 loop指令

例子:计算2^20

  1. assumecs:codesg
  2. codesgsegment
  3. start:movax,0
  4. movcx,20
  5. s:addax,2
  6. loops
  7. movax,4c00H
  8. int21H
  9. codesgends
  10. endstart



cx 存放 循环的次数,每次循环减1

s是标号 可以任意取名,表示循环的开始处,loop 跳转到s处,可以用debug单步调试看到 上面代码,loop s其实就是 loop 0006H

3.debug 中loop调试

可以用 -g 000B (安装上面代码的调试)运行到指定代码停止,来跳出循环。

或者在循环中直接用 -p 来跳出循环

4.一段安全空间

一般情况下 DOS中 0:200H~0:2ffH 空间 没有系统或者其他程序的数据或者代码,可以使用。

5.段前缀的使用

前面的mov al,bs:[1]

这里bs: 叫做段前缀

不仅bs可以

mov ax,ds:[bx]

mov ax,cs:[bx]

mov ax,ss:[bx]

mov ax,es:[bx]

都可以

例子:把内存 ffff:0~ffff:b 单元中的数据复制到 020:0~020:f 中。

  1. assumecs:codesg
  2. codesgsegment
  3. start:movax,0ffffh
  4. movds,ax
  5. movax,0020H
  6. moves,ax
  7. movcx,12
  8. movbx,0
  9. s:moval,ds:[bx]
  10. moves:[bx],al
  11. incbx
  12. loops
  13. movax,4c00H
  14. int21H
  15. codesgends
  16. endstart


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top