[这个贴子最后由一生逍遥在 2006/11/22 00:02pm 第 2 次编辑]
DATAS SEGMENT
STRING DB ';Hello World';,13,10,';$';
;这里要发挥一下了,先说下13,10,';$';。13,回车,也就是把光标移动行首
;10,换行,即将光标下移一行。';$';,这个是为了配合DOS调用
;现在解释DB后面的一串东西。。。它实际上将';H';,';E';,……,';$';存在内存的连续单元
;每个字符占8位(一个字节),STRING是个标识符,它指向';H';(它保存了字符串起始
;地址,但记住它只不过是EA,偏移地址而已),这就是数据定义
;除了DB(8位),还有DW(16位),DD(32位),DF(48位),DQ(64位),DT(80位)
;依次表示定义字节,字,双字,长字,四字,10字节(五字)
;数据定义格式是:[变量名] DB 初值表达式1,初值表达式2……
;表达式可以是:
;1、数值表达式,如13,';H';(';H';即H的ASCII代码)
;2、? 无确定初值,只分配存储单元
;3、ASCII 字符串 如';Hello';等价于';H';,';e';,';l';,';l';,';o';,ASCII是8位的,所以用DB来定义
;4、n DUP(?) 如,3 DUP(?),表示分配三个存储单元
;5、n DUP(表达式1,……) 如,2 DUP(';hello';,?),表示分配了并初始化了如下的存储单元
; hello?hello?
DATAS ENDS
STACKS SEGMENT
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX ;记得这两句吧,强调一下,不解释了
LEA DX,STRING ;把要输出的字符串的首地址(EA,实际上这里只是偏移地址而
;已。。。实际的首地址为段址与偏移地址的合成)传给DX,为什么?功能号9规定的
MOV AH,9
;功能号9是什么?
;显示字符串,它的实质是,从首地址开始,把字符一个一个输出,知道遇到';$';停止
;$不输出,它的入口参数(当作是通行证吧)是DS:DX
INT 21H
MOV AH,4CH
INT 21H
CODES ENDS
END START |