ASM 之 Hello World(附)

这篇博客介绍了ASM编程语言的基础知识,通过一个简单的'Hello World'程序,展示了如何在数据段和代码段中操作,并利用中断INT 21H进行屏幕输出。作者还探讨了AX、DS、DX寄存器的使用,以及如何处理字符串数据。在实验过程中,作者发现了INT 21H中断与AH寄存器的关系,并遇到了系统保留关键字的问题。
摘要由CSDN通过智能技术生成

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


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值