参考数据:http://blog.csdn.net/hhf383530895/article/details/4509844
刚刚的程序如下:
DATA SEGMENT;
NOTE DB 'Hello World!',0ah,0dh,'$'
DATA ENDS;
CODE SEGMENT;
ASSUME CS:CODE,DS:DATA;
BEGIN:MOV AX,DATA;
MOV DS,AX;
MOV DX,OFFSET NOTE;
MOV AH,09H;
INT 21H;
MOV AH,4CH;
INT 21H;
CODE ENDS;
END BEGIN
经过资料的查询掌握如下知识:
DATA SEGMENT >> 数据段定义
NOTE 为自定义标识符而不是系统标志(相当于高级语言中的变量名) $为字符串结束标志
CODE SEFMENT >> 代码段定义
ASSUME CS:CODE,DS:DATA 将数据段指定到DS寄存器,将代码段指定到CS寄存器
BEGIN:MOV AX,DATA 将数据段数据初始化至AX累加器
MOV DS,AX 将AX中的数据初始化至DS数据段寄存器(与ASSUME中一样了?)
MOV DX,OFFSET NOTE 将NOTE中的字符串数据加载到数据通用寄存器DX
MOV AH,09H 指定执行指令(09H代表显示数据)
INT 21H 执行先前指定的执行命令
MOV AH 4CH(4CH为中断命令)
经过如上知识的掌握,做了如下测试,将代码修改为如下:
DATA SEGMENT;
NOTE DB 'Hello World!',0ah,0dh,'$'
TESTGO DB 'My test datas...$'
DATA ENDS;
CODE SEGMENT;
ASSUME CS:CODE,DS:DATA;
BEGIN:MOV AX,DATA;
MOV DS,AX;
MOV DX,OFFSET NOTE;
MOV AH,09H;
INT 21H;
MOV DX,OFFSET TESTGO;
MOV AH,09H;
INT 21H;
MOV AH,4CH;
INT 21H;
CODE ENDS;
END BEGIN
//经测试以上程序达到了预想的目的,输出Hello World!之后继续输出My test datas...
//发现INT 21H执行的时候是与MOV AH,XX配对执行的;于是想到将数据放到DX中后,暂不执行,再次初始化不同的数据到DX,查看数据结果:
将代码做如下修改:
DATA SEGMENT;
NOTE DB 'Hello World!',0ah,0dh,'$'
TESTGO DB 'My test datas...$'
TESTAO DB 'Is printf ?$'
DATA ENDS;
CODE SEGMENT;
ASSUME CS:CODE,DS:DATA;
BEGIN:MOV AX,DATA;
MOV DS,AX;
MOV DX,OFFSET NOTE;
MOV AH,09H;
INT 21H;
MOV DX,OFFSET TESTGO;
MOV AH,09H;
MOV DX,OFFSET TESTAO;
INT 21H;
MOV AH,4CH;
INT 21H;
CODE ENDS;
END BEGIN
测试结果:TESTAO数据输出,TESTGO 数据不输出;证实INT 21H 与 MOV AH,09H 配对时:输出当前DX中的数据
//注:
测试过程中使用TEST 作为标志时,发现TEST为系统保留标志符...报警告信息为:Reserved word used as symbol:TEST
为了查看方便,将程序结构做如下排版:
DATA SEGMENT;
NOTE DB 'Hello World!',0ah,0dh,'$'
TESTGO DB 'My test datas...$'
TESTAO DB 'Is printf ?$'
DATA ENDS;
CODE SEGMENT;
ASSUME CS:CODE,DS:DATA;
BEGIN:MOV AX,DATA;
MOV DS,AX;
MOV DX,OFFSET NOTE;
MOV AH,09H;
INT 21H;
MOV DX,OFFSET TESTGO;
MOV AH,09H;
INT 21H;
MOV AH,4CH;
INT 21H;
CODE ENDS;
END BEGIN