|
主题 : : 第九章 实验9 根据材料编程 单循环和双循环两种方法!! [待解决] |
回复[ 2次 ]
点击[ 427次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2009-01-12 07:07 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:4
注册日期:2008-12-12 00:18 |
方法一:单循环:
assume cs:code
data segment
db 'welcome to masm!'
db 02h,24h,71h
data ends
code segment
start:mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax //以上代码实现初始化工作
mov bx,0
mov cx,2000
cls:mov word ptr es:[bx],0720h
add bx,2
loop cls
//以上5条代码实现清空屏幕内容,可以不要,不影响程序功能
mov si,0720h //si定位每个要显示字符位置
mov bx,0 //确定要显示的字符
mov cx,16
s:mov di,0 //确定显示字符的颜色等属性
mov al,[bx]
mov ah,16[di]
mov es:[si],ax //显示第一行字符
inc di
mov ah,16[di]
mov es:0a0h[si],ax //显示第二行字符
inc di
mov ah,16[di]
mov es:140h[si],ax //显示第三行字符
add si,2
inc bx
loop s //循环显示下一个字符
mov ax,4c00h
int 21h
code ends
end start
方法二:双循环:与单循环实现原理一样,通过单循环改写,原意精简重复代码,但代码却比单循环还多出一行,单循环代码虽有重复,却更精炼直观.由于实现原理一样,故双循环程序不做注释!
assume cs:code
data segment
db 'welcome to masm!'
db 02h,24h,71h
data ends
code segment
start:mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax
mov bx,0
mov cx,2000
cls:mov word ptr es:[bx],0720h
add bx,2
loop cls
mov si,0720h
mov bx,0
mov cx,16
s:push cx
mov di,0
mov bp,0
mov al,[bx]
mov cx,3
s0:mov ah,16[di]
mov es:[si+bp],ax
add bp,160
inc di
loop s0
add si,2
inc bx
pop cx
loop s
mov ax,4c00h
int 21h
code ends
end start | | |
|
|
|
|
[第1楼]
[ 回复时间:2009-01-13 20:12 ]
[引用]
[回复]
[ top ] | |
荣誉值:33
信誉值:0
注册日期:2008-10-16 10:01 |
|
|
|
|
|
[第2楼]
[ 回复时间:2009-02-01 22:18 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:0
注册日期:2009-01-28 11:57 |
我编了一个,不知是三循环吗?
assume cs:code,ss:stack,ds:data
data segment
db 'welcome to masm!'
data ends
stack segment
db 16 dup (0)
stack ends
code segment
start: mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,16
mov ax,0b800h
mov es,ax
mov si,0720h
mov dx,02h
mov cx,1
push cx
mov cx,2
push cx
s0: push cx
mov cx,16
mov bx,0
s: mov ax,[bx]
mov es:[si],ax
mov es:[si+1],dx
add si,2
inc bx
loop s
mov si,07c0h
mov dx,24h
pop cx
loop s0
mov si,0860h
mov dx,71h
pop cx
loop s0
mov ax,4c00h
int 21h
code ends
end start | | |
|