张狂的暑假学习之 汇编入门学习笔记 (四)—— [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
- assumecs:codesg
- codesgsegment
- start:movax,0
- movcx,20
- s:addax,2
- loops
- movax,4c00H
- int21H
- codesgends
- 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 中。
- assumecs:codesg
- codesgsegment
- start:movax,0ffffh
- movds,ax
- movax,0020H
- moves,ax
- movcx,12
- movbx,0
- s:moval,ds:[bx]
- moves:[bx],al
- incbx
- loops
- movax,4c00H
- int21H
- codesgends
- endstart