|
主题 : : 实验九!!! [待解决] |
回复[ 2次 ]
点击[ 309次 ] | |
荣誉值:0
信誉值:0
注册日期:2011-07-29 21:21 |
做了一下实验九,用了多种方法
以下是用双层循环做的,虽然代码长了点,但比较实用
assume cs:code,ds:data,ss:stack
data segment
db 'Welcome to masm!'
db 02h,24h,71h,21h,07h
assume cs:code,ds:data
stack segment
db 16 dup (0)
stack ends
code segment
start: mov ax,0b800h
mov es,ax
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,16
mov cx,5
mov di,16
mov si,0 ;记录行数
s: push cx
mov bx,0 ;用于内循环字母递增
mov cx,16 ;记录内循环的次数
mov bp,0 ;确定进来的字母位置
s0: mov al,[bx]
mov ah,[di] ;字体颜色
mov es:[si].9a0h[bp],ax
add bp,2
inc bx
loop s0
inc di
add si,0a0h
pop cx
loop s
mov ax,4c00h
int 21h
code ends
end start
还有一个比较,不太实用的,若是更改显示的行数的话,比较麻烦。但是用 jcxz,所以试了一下
assume cs:code,ds:data
data segment
db 'Welcome to masm!'
data ends
code segment
start: mov ax,0b800h
mov es,ax
mov ax,data
mov ds,ax
mov bx,0
mov si,0
mov cx,16
s: mov al,ds:[bx]
mov ah,02h ;黑底绿色
mov es:[si+720h],ax
mov al,ds:[bx]
mov ah,24h ;绿底红色
mov es:[si+7c0h],ax
mov al,ds:[bx]
mov ah,71h ;白底蓝色
mov es:[si+860h],ax
add si,2
inc bx
dec cx ;当cx自减16次后 cx=0 jcxz跳转至 ok
jcxz ok
jmp short s
ok: mov ax,4c00h
int 21h
code ends
end start
不过这段代码有些问题,因为是用jczx,所以debug的时候不能用p绕过里面的循环,我用-g 34 直接看结果。
但是一用 -g 34 的话这个窗口就死了,键盘无法输入,只能强制关闭。这个问题纠结了很久都没有答案,求高手帮忙解答啊~~ 小弟先谢过了哈 | | |