ASM 之 Hello World(附)

来源:互联网 发布:ios视频录制软件 编辑:程序博客网 时间:2024/06/05 18:11

参考数据: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


 

 

原创粉丝点击