一、源程序
栗子:
assume cs:codesg
condesg segment
start: mov ax,0123H
mov bx,D456H
add ax,bx
add ax,ax
mov ax,4c00H
int 21H
codesg ends
end
1.伪指令:由编译器执行;xx segment 和xx ends是一对成对使用的伪指令,功能是定义一个短。assume假设伪指令,assume cs:codesg 将用作代码段的段codesg和CPU中的段寄存器cs关联起来
2.标号:codesg 作为一个段的名称,指代一个地址。
3.程序返回: 一个程序结束后,将CPU的控制权交给使他得以运行的程序,我们称这个过程为程序返回。程序末尾添加 mov ax,4c00h int 21H .这两条指令就可以实现程序的返回。
4.masm.exe(编译器)编译过程中,输入一个源程序文件,最多得到3个输出:目标文件(.obj)、列表文件(.lst)、交叉引用文件(.crf)。
5.链接。link.exe(连接器),把.obj文件链接为.exe文件。
6.编程(edit)-->1.asm--->编译(masm)--->1.obj--->链接(link)--->1.exe-->加载(command)-->运行(CPU)
7.程序装载内存过程(举例)
程序加载后,ds中存放着程序所在内存区的段地址,这个内存区的偏移地址为0,即程序所在内存区的地址为ds:0
这个内存区的前256个字节中存放的是PSP,dos用来和程序进行通信,从256个字节后的空间存放的是程序,程序的物理地址为:
SA*16+0+256=(SA+16)*16+0 这个是10进制的
所以物理地址为SA+10:0 这才是标准的16进制表示
(转载部分:https://blog.csdn.net/hanyuwei0/article/details/5200910)
二、[bx]和loop指令
1.[bx]和内存单元的描述
[bx]和[0]有些类似,[0]表示内存单元,他的偏移地址是0,。栗子:mov ax,[0],将一个内存单元的内存送入ax,这个内存单元的长度是2字节,存放一个字,偏移地址为0,段地址载ds中;mov al,[0] 将一个内存单元的内容送入al,内存单元的长度为1字节。偏移地址0,段地址载ds中。
由此可见,描述一个内存单元需要两种信息:1)内存单元的地址;2)内存单元的长度(类型)
我们用[0]表示一个内存单元时,0表示单元的偏移地址,段地址默认在ds中,单元长度由具体指令中的其他操作对象(比如寄存器)指出。
[bx]同样也表示一个内存单元,他的偏移地址在在bx中,段地址在ds中
栗子:mov ax,[bx] 将一个内存单元的额内容送入ax,这个内存单元的长度为2字节,偏移地址在bx中,段地址在ds中。
2.定义描述性符号“()”
()表示寄存器或一个内存单元中的内容
()中的元素可用三种类型:1)寄存器名;2)段寄存器名;3)内存单元的物理地址(一个20位数据)
栗子:2000:1000处的内容为0010H,可描述为:(21000H)=0010H
mov ax,[2]的功能 描述为:(ax)=((ds)*16+2);
mov [2],ax ((ds)*16+2)=(ax)
add ax,2 (ax)=(ax)+2;
push ax (sp)=(sp)-2 ((ss)*16+(sp))=(ax)
pop ax (ax)=((ss)*16+(sp)) (sp)=(sp)+2;
(X)所掉膘的数据类型:1)字节,2)字;是那种类型有寄存器名或具体运算决定
(al)、(bl)、(cl)等得到的数据为字节型;(ds)、(ax)、(bx)得到的数据类型为字型
idata表示常量
3.[bx]
栗子:mov ax,[bx] ::::bx中存放的数据作为一个偏移地址EA,段地址SA默认在ds中,将SA:EA处的数据送入ax中,即:(ax)=((ds)*16+(bx));
4.loop指令
loop标号,CPU执行loop指令的时候,进行两步操作:1)(cx)=(cx)+1;2)判断cx中的值,不为零则专职标号处执行程序,如果为零则乡下执行。cx中存放循环次数:栗子
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.段前缀
栗子:mov ax,cs:[bx] 将一个内存单元的内容送入ax,这个内存单元的长度2字节(字单元),存放一个字,偏移地址在bx中,段地址载ds中。
一般在PC机中,DOS方式下,DOS和其他合法的程序一般都不会使用0:200---0:300(00200h--00300h)的256个字节空间。所以这段空间是安全的。