- 实验目的
学习如何编写,调试具有多个段的程序。
- 实验设备与环境
计算机
DOS操作系统或 Windows 操作系统
MASM.EXE, LINK.EXE, DEBUG.COM 或宏汇编集成环境
- 实验内容、程序清单及运行结果
编程:在屏幕中间分别显示绿色,绿底红色,白底蓝色的字符串‘welcome to masm!’。
代码及分析如下:
data segment
db 'welcome to masm!'
data ends
stack segment;用于逆序暂存生成的结果,相当于中转
db 32 dup (0)
stack ends
code segment
assume cs:code,ss:stack,ds:data
start:
mov ax,data
mov ds,ax
sub bx,bx
mov ax,stack
mov ss,ax
mov sp,32
mov cx,7
;设置welcome
s: mov al,ds:[bx]
mov ah,00000010B
push ax;暂存入栈,后期逆序输出屏幕
inc bx
loop s
;设置空格
mov al,ds:[bx]
mov ah,0
push ax;暂存入栈,后期逆序输出屏幕
inc bx
;设置to
mov cx,2
a: mov al,ds:[bx]
mov ah,00100100B
push ax;暂存入栈,后期逆序输出屏幕
inc bx
loop a
;设置空格
mov al,ds:[bx]
mov ah,0
push ax;暂存入栈,后期逆序输出屏幕
inc bx
;设置masm!
mov cx,5
w: mov al,ds:[bx]
mov ah,01110001B
push ax
inc bx
loop w
;使屏幕偏移量为屏幕中央
mov ax,0b800h
mov ds,ax
mov bx,2014;使屏幕偏移量为屏幕中央
;从栈中把数据逆序读取到屏幕
mov cx,16
f: pop ds:[bx]
sub bx,2
loop f
mov ax,4c00h
int 21h
code ends
end start
运行截图:
- 实验结论、实验体会:
这是一个现学现用的实验题,但是逻辑都是以前的。
从大方面看,对每个单词的操作,实现每个单词不同的效果。从小方面看,每实现一个字符的效果就暂存到栈中,但完成了数据的处理,然后定位屏幕显示位置,将栈中的数据逆序的输出到屏幕中,完成实验要求