1.[bx]和内存单元
mov ax , [bx]
[bx]:表示一个内存单元,它的偏移地址在bx中
(ax) = ((ds)*16+(bx))
将一个内存单元的内容送入ax中,这个内存单元的长度为2字节,存放一个字,偏移地址在bx中,段地址在ds中
mov al , [bx]
将一个内存单元的内容送入ax中,这个内存单元的长度为1字节,存放一个字节,偏移地址在bx中,段地址在ds中
2.描述性的符号”()”
“()”来表示一个寄存器或一个内存单元中的内容
(ax)表示ax中的内容
(al)表示al中的内容
((ds)*16+(bx))表示内存位于((ds)*16+(bx))中的内容
3.idata 表示常量
inc 表示递增1
mov bx , 1
inc bx
bx = 2
4.loop
1.(cx) = (cx) –1
2.判断cx中的值,不为0则转至标号处执行程序,如果为0则向下执行
mov cx , ? ;?表示循环的次数
s: add ax, ax
loop s ;表示一个loop循环的格式
例子
assume cs:code
code segment
mov ax , 2
mov cx , 11
s:add ax,ax
loop s
mov ax ,4c00h
int 21h
code ends
end
5.在汇编程序中,数据是不能以字母开头的
assume cs : code
code segment
mov ax , 0ffffh
mov ds , ax
mov bx ,6
mov al,[bx]
mov ah,0
mov dx , 0
mov cx , 3
s:add dx , ax
loop s
mov ax ,4c00h
int 21h
code ends
end
6.masm和debug的不同
在对[…]的理解上,masm和debug的理解是不同的,masm将其理解为“….”,debug理解为内存单元
mov ax , 2000h
mov ds , ax
mov bx , 0
mov al , [bx]
mov ax , 2000h
mov ds , ax
mov al , ds :[0]
7.段前缀
ds: cs: ss: es:,用于显示指明内存单元的段地址
8.总结
1.我们需要向一段内存中写入内容
2.这段空间里面不该包含系统或者其他程序的数据和代码,否则会引发错误
3.dos方式下,一般情况,0:200~0:2ff空间中没有系统或者其他程序的数据
4.我们需要直接向内存直接写入内容,就是用0:200~0:2ff这段空间