实验9 题目要求
相关准备
工具
dosbox+MASM
分析
25X80要求在中间,那么是在12 13 14行以及32列处
16进制 C D E行
即 C*A0 = 780
列为64字节 即40H处
根据题目所给 三种颜色对应二进制和16进制为
00000010
02h
00100100
24h
01110001
71h
要想在一个循环里换三种颜色那就需要栈来更改值
所以引入3个字长的栈 要注意定义时也遵循先入后出的原则
栈顶控制cx的值
同时sp要指向2
dw 0,24h,71h
代码
assume cs:code, ds:data, ss:stack
data segment
db 'Welcome to Masm!'
data ends
stack segment
dw 0,24h,71h
stack ends
code segment
start:
mov ax,0b800h
mov ds,ax
mov ax,data
mov es,ax
mov ax,stack
mov ss,ax
mov bx,0
mov cx,3h
mov dx,02h
mov sp,2
s:
push cx
mov cx,10h
mov di,0
mov si,780h
s2:
mov al,es:[di]
mov ah,dl
mov ds:[bx+si+40h],ax
add si,2
inc di
loop s2
add bx,0a0h
pop cx
pop dx
loop s
mov ax,4c00h
int 21h
code ends
end start
结果
一点问题
sp的值一定不要忘记 之前做实验8运气好没发现是因为栈中的值没有预先定义
定义栈的值时也遵循后入先出的原则