|
主题 : : 实验9 三个loop循环减少到一个loop循环完成的演变,新手在此与大家分享一些学习过程 [待解决] |
回复[ 2次 ]
点击[ 419次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2014-09-06 23:17 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:0
注册日期:2010-01-06 02:34 |
先写的三个循环的代码
assume cs:code,ds:data
data segment
db 'welcome to masm!'
data ends
code segment
rk: mov ax,data
mov ds,ax
mov ax,0b872h ;屏幕中间的位置显示
mov es,ax
mov bx,0 ;第一行偏移
mov si,0
mov cx,10h
s: mov al,[si]
mov ah,8ah ;绿字高亮闪烁
mov es:[bx],ax
add bx,2
inc si
loop s
mov bx,0a0h ;第二行偏移
mov si,0
mov cx,10h
s1: mov al,[si]
mov ah,0ach ;绿底红字高亮闪烁
mov es:[bx],ax
add bx,2
inc si
loop s1
mov bx,140h ;第三行偏移
mov si,0
mov cx,10h
s2: mov al,[si]
mov ah,0f9h ;白底蓝字高亮闪烁
mov es:[bx],ax
add bx,2
inc si
loop s2
mov ax,4c00h
int 21h
code ends
end rk
精简后用一个循环能完成了
assume cs:code,ds:data
data segment
db 'welcome to masm!'
data ends
code segment
rk: mov ax,data
mov ds,ax
mov ax,0b872h ;屏幕中间的位置显示
mov es,ax
mov bx,0
mov si,0
mov cx,10h
s: mov al,[si]
mov ah,8ah ;绿字高亮闪烁
mov es:[bx+0],ax ;第一行偏移 0
mov al,[si]
mov ah,0ach ;绿底红字高亮闪烁
mov es:[bx+0a0h],ax ;第二行偏移 0a0h
mov al,[si]
mov ah,0f9h ;白底蓝字高亮闪烁
mov es:[bx+140h],ax ;第三行偏移 140h
add bx,2
inc si
loop s
mov ax,4c00h
int 21h
code ends
end rk | | |
|
|
|
|
[第1楼]
[ 回复时间:2014-09-07 01:03 ]
[引用]
[回复]
[ top ] | |
荣誉值:4
信誉值:0
注册日期:2014-08-02 21:25 |
|
|
|
|
|
[第2楼]
[ 回复时间:2014-09-07 22:20 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2014-06-30 13:40 |
在LZ的基础上,又融合了他人的经验,重新又写了一个,共勉之。(自己写的第一个,用了3次循环,第二个虽然用了1个循环,但比不上LZ的简单.)下面这个其实可以不用栈的。
-----------------------------------------------------
assume cs:code
data segment
db 'welcome to masm!'
db 0000010B,00100100B,01110001B
data ends
stack segment
dw 0,0,0,0,0,0,0,0
stack ends
code segment
start: mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,10h
mov ax,0b878h ;定位到B878是为了显示在屏幕中间
mov es,ax ;用es作为显示屏的内存段地址,bx作为它的偏移地址
mov bx,0
mov si,0
mov bp,0 ;用bp指向字符数据,di指向色彩模式
mov di,10h
mov cx,3
s: push cx ;将外层循环cx入栈
mov cx,10h
s1: mov al,ds:[bp]
mov ah,ds:[di]
mov es:3ch[bx][si],ax ;输入该字符的色彩模式
add bx,2
inc bp
loop s1
pop cx ;恢复外层循环的cx
mov bx,0 ;修改bx和si换行
add si,0a0h
mov bp,0
inc di ;输入下个字体颜色
loop s
mov ax,4c00h
int 21h
code ends
end start | | |
|