首页 > 代码库 > 汇编入门学习笔记 (四)—— [BX] 和 loop指令
汇编入门学习笔记 (四)—— [BX] 和 loop指令
疯狂的暑假学习之 汇编入门学习笔记 (四)—— [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
assume cs:codesg codesg segment start: mov ax,0 mov cx,20 s: add ax,2 loop s mov ax,4c00H int 21H codesg ends end start
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 中。
assume cs:codesg codesg segment start: mov ax,0ffffh mov ds,ax mov ax,0020H mov es,ax mov cx,12 mov bx,0 s: mov al,ds:[bx] mov es:[bx],al inc bx loop s mov ax,4c00H int 21H codesg ends end start
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。