. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  第九章 实验9 根据材料编程 单循环和双循环两种方法!!  [待解决] 回复[ 2次 ]   点击[ 427次 ]  
tianyanly1984
[帖 主]   [ 发表时间: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
wsrf
[第1楼]   [ 回复时间:2009-01-13 20:12 ]   [引用]   [回复]   [ top ] 
荣誉值:33
信誉值:0
注册日期:2008-10-16 10:01
支持一下 呵呵
windflower
[第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
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved