本帖最后由 hwp_better 于 2020-8-20 15:42 编辑
实验9,PDF中的内容:
代码【注释较全面】:
[Asm] 纯文本查看 复制代码 assume cs:code,ds:data,ss:stack
data segment
db 'welcome to masm!';定义显示字符串,16个字节
db 02h,24h,71h;定义颜色
data ends
stack segment
dw 8 dup(0);保留栈段空间,用来保存ax,bx,cx
stack ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,10h
xor bx,bx;保证bx为0
mov ax,0b872h;复杂的计算产出的东西。屏幕25*80
;80个字符,一个字符是两个字节,故而屏幕一行就是160个字节!
;字符串为16个字节,所以就是(11*160+32*2=1824d,就是720h)
mov cx,3
s3: push cx;记录循环次数!
push ax;记录起始位置!
push bx;用于记录颜色!
mov es,ax
mov si,0
mov di,0
mov cx,10h;循环16次,依次存放全部字符进入显存
s1:mov al,ds:[si]
mov es:[di],al
inc si
add di,2;因为,显存格式为[字符,颜色].所以要为存储颜色区域保留一些存储空间!
loop s1;循环存储所有的“welcome to masm!”存储进入显存存储区域。
mov di,1;修改啦,要进行写入颜色所对应的位置啦!
pop bx
mov al,ds:10h[bx];因为颜色存储在第二行。
inc bx
mov cx,10h
s2:mov es:[di],al;写入颜色!
add di,2;进行位移。写入一行的颜色。
loop s2
pop ax
add ax,0ah;ax增加160,进行换行,便于操作下一行的东西。
pop cx;拿出最初入栈的用于循环的cx进行记录次数!
loop s3
mov ax,4c00h
int 21h
code ends
end start
代码截图:
运行:
OK |