一、
是在堆栈段声明了一个名为STI的变量
二、
far和near是子程序调用时的参数
如果子程序和调用程序在一个段内,子程序参数设置为near
如果子程序和调用程序不在一个段内,子程序参数设置为far
这里主程序定义为far是因为:
系统把主程序当作DOS调用的一个子程序
DOS内核与主程序不是在同一个段地址内
所以主程序参数要用far
参见http://zhidao.baidu.com/link?url=1llC50XVGbuJul7LpXIB6dCADjJFOIPn79wJK5OUMlc-18Q9-jTm5wU_qfya0wX-KVs9s4lTtND9MdWU0Qjwna
三、
assume只是伪指令,是假设的意思,相关段寄存器与段地址的绑定还是需要在代码段里面用mov、push 、pop等指令来操作的。
很久不接触8086汇编了,
您的这段代码是16位实模式下的汇编代码,code在main的前面,CODE SEGMENT意思是代码段开始,后面的main就在code代码段中;
MAIN PROC FAR中的FAR表示调用这个程序时要同时改变段寄存器CS和IP寄存器的内容。如果是NEAR表示调用这个程序时只需要改变IP寄存器的内容,段寄存器CS不变。
ASSUME CS:CODE ,DS :DATA SS:STACK是指示段名称。段名称和段首地址是一个意思,一样的值。
3. DB 0DH ,0AH."$" 0dh,0ah 是回车换行,$是字符串结束标志
6. STI DB 100 DUB(?) STI是开中断指令,这里应该是ST1之误。
8.CODE SEGMENT ; 代码段
9.MAIN PROC FAR ;MAIN过程是远调用,也就是FAR,是段间调用,调用时用 段:偏移 方式
near是近调用,也就是段内调用,只用偏移,不用段
10. ASSUME CS:CODE ,DS :DATA SS:STACK
只是告诉编译器段名称和段寄存器之间的对应关系,具体初始化还要自己去执行。
如mov ax,data
mov ds,ax