课程名称汇编语言与微机原理实验名称字符串显示实验
实验目的、要求
1.掌握汇编语言程序设计的编写链接调试运行的完整过程
2.掌握利用masm.exe、link.exe等进行汇编、连接的方法及执行目的程序的方法。
3.初步认识ASCII码
4.初步认识利用DOS系统功能调用显示字符与字符串的方法
5.认识汇编源程序结构(框架)。
实验原理
利用DOS的中断调用在屏幕上显示字符串”Hello World”。
主要设备
计算机一台汇编语言软件
实验步骤及原始数据记录
程序源代码
1.显示数据区中的字符串"Hello World"
assume cs:code,ds:data,ss:stack
stack segment stack
dw 256 dup (0)
stack ends
data segment
msg db 'Hello World!',0dh,0ah,$
data ends
code segment
start:
mov ax,data
mov ds,ax
mov ah,09h
mov dx,offset msg
int 21h
exit: mov ah,4ch
int 21h
code ends
end start
四、操作步骤:
1.在C盘生成一个新文件夹,例如P1,在该文件夹中拷入masm.exe、link.exe、debug.exe等工具程序
2.打开记事本,将上面第1个程序复制生成纯文本文件,文件名以.asm为扩展名。
例如:A1.ASM。
(注意保存时要选择保存类型为“所有文件”)。
3.从“开始”→程序→附件→命令提示符,进入DOS命令界面。
4. 使用CD命令,进入新文件夹,例如:P1,命令为:CD C:\P1
5. 执行MASM <文件名>,对源程序进行编译。
6. 执行LINK.EXE <文件名>,连接生成执行程序。
例如:LINK A1
7. 执行生成的程序,记录屏幕响应的情况。
例如:A1
可以不带扩展名EXE。
程序运行正常的话,应该要显示字符串"Hello World!"。
实验结果
程序运行之后,屏幕上显示字符串“Hello World”。
闲来无聊,想重新学习一下汇编,第一个helloworld,想起绝影的一句话"你们学高级语言,但是高级语言会变,我学低级语言,学了永远也不会变!" - -b
stack segment stack ; 定义堆栈段
db 100 dup(?) ;堆栈段长100字节, 这里db就是字节的意思,如果是用dw就是字,100 dup(?) 中的dup是重复的意思,这句话是重复100遍,一遍定义一个字节,每个字节里全填0
stack ends ; 堆栈段结束
data segment ;数据段
szHello db 'hello,world',0dh,0ah,'$' ;定义szHello , 0dh,0ah分别是回车键,换行键的ASCII码, '$'是DOS功能调用INT 21H中9号功能要求的要显示字符串的结束标志,写成szHello db
'hello,world',0dh,0ah,24h;也可以,因为24h就是'$'
data ends ;数据段结束
code segment ;代码段
assume cs:code,ds:data,ss:stack ;确定cs,ds,ss,指向的逻辑段
汇编中,Assume的作用是告诉汇编程序各个段寄存器应该与哪个逻辑段对应,该伪操作把程序中定义的各个段分配给段寄存器,使程序中使用的段名与段寄存器建立起对应关系。
使得汇编程序清楚在计算地址时使用哪一个段地址但并不赋予该逻辑段的段地址。
没有Assume这行代码也可以,但其后的变量操作需要用段跨越前缀指明所在逻辑段。
所以说ASSUME语句是设定语句,是告诉汇编器在将源代码翻译成机器语言时,CPU的各个段寄存器如何与你定义的各个逻辑段相联系.比如ASSUME CS:CODE 这个例子CS段寄存器就选了CODE代码段. start:
mov ax,data ;设置数据段的段地址ds
mov ds,ax ;
mov ah,9 ; ah中的9号功能表示要显示一行字符串
mov dx,offset szHello ;取得szHello的偏移地址,也就是在ds段中的偏移地址
int 21h
;暂停,任意键关闭
mov ah,1 ;这两句是从键盘输入一个字符功能
int 21h
mov ah,4ch ;退出 ah中的功能号4ch表示要返回DOS
int 21h ;调用DOS
code ends
end start。