[BX]
cx 和 loop 指令配合实现循环要点
- 在 cx 中 存放循环次数
- loop 指令中的标号所标识的地址要在前面
- 要循环执行的程序段,要写在标号和 loop 指令的中间
用 cx 和 loop 指令相配合实现循环的功能程序框架如下:
mov cx,循环次数
s: add ax,ax
loop s
问题 5.2
用加法计算 123*236,结果存在 ax 中;可以用循环完成,将236加123次。
assume cs:code
code segment
mov ax,0
mov cx:123
s:add ax,236
loop s
mov ax,4c00h
int 21h
code ends
end
5.4 Debug和汇编编译器 masm 对指令的不同处理
- mov ax,[0]
Debug 中表示将 ds:0
出的数据送入ax中,masm编译器中表示 mov ax,0
;那么在 masm中如何定义的,有两种方式:
a. 可以将偏移地址送入 bx 寄存器中 ,这样每次都需要通过 bx 间接的给出偏移地址,比较麻烦。
mov ax,2000h
mov ds,ax
mov bx,0
mov al,[bx]
b. 显式地给出段地址所在的段寄存器,比如访问 2000:0 内存单元的数据
mov ax,2000h
mov ds,ax
mov al,ds:[0]
5.7 一段安全的空间
- 我们需要直接向一段内存中写入内容;
- 这段内存空间不应存放系统或其他程序的数据或代码,否则写入操作很可能引发错误;
- DOS方式下,一般情况,0:2000:2ff空间中没有系统或其他程序的数据或代码;
- 以后,我们需要直接向一段内存中写入内容时,就使用0:2000:2f这段空间。
实验4 [bx]和 loop 的使用
```shell assume cs:code code segment mov ax,0000h mov ds,ax mov ax,0020h mov es,ax mov bx,0 mov cx,64 s:mov al,[bx] mov es:[bx],al inc bx loop s mov ax,4c00h int 21h code ends end
注意事项
注意程序中的第一条指令mov ax,0fh。我们知道,大于9FFFh的十六进制数据A00OH、A001H..C0O0H、c001H..FFFEH、FFFFH等,在书写的时候都是以字母开头的。而在汇编源程序中,数据不能以字母开头,所以要在前面加0。比如,9138h在汇编源程序中可以直接写为“9138h”,而A000在汇编源程序中要写为“0A000h”。