. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验9:根据材料编程 (带详细注释)带图片  [待解决] 回复[ 0次 ]   点击[ 351次 ]  
chinaljg
[帖 主]   [ 发表时间:2011-01-19 10:51 ]   [引用]   [回复]   [ top ] 
荣誉值:10
信誉值:0
注册日期:2011-01-04 11:04
实验9:根据材料编程 (带详细注释) 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
;程序功能:在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串  'welcome to masm!' 。 
;作者:chinaljg 
;时间:2011年1月17日 
assume cs:codesg,ds:datasg 

datasg segment 
    db 'welcome to masm!' 
    db 02h,24h,71h 
;02h,24h,71h的由来:属性字节的格式 
;7   6   5   4   3   2   1   0(位) 
;BL  R   G   B   I   R   G   B 
;    ---------       --------- 
;闪烁    背景     高亮     前景 
;R:红色 G:绿色  B:蓝色 
;02h表示:绿色.  02H(十六进制)=00000010B(二进制),第2位前景G为1表示前景为绿色 
;24h表示:绿底红色.24h=00100100B 
;71h表示:白底蓝色.71h=01110001B 


datasg ends 


codesg segment 
start: 
;bg:black fg:green 00000010B=02h bg:背景fg:前景 
;bg:green fg:red   00100100B=24h 
;bg:white fg:blue  01110001B=71h 

    mov ax,datasg 
    mov ds,ax 
    mov bx,0  ;ds:[bx]指向字符串第一个字母'w' 

    mov ax,0b800h 
    mov es,ax 
    mov si,0  ;es:[si]指向显示缓冲区第0页,也就是屏幕左上角第1列,第1行.(共80列,25行) 

    mov di,10h ;用变量di指向颜色,因为'welcome to masm!'正好16个字节,[di]=10h后,指向了02h(绿色),[di].1指向了24h,[di].2指向了71h. 

    mov cx,16  ;循环次数 
s1: mov al,[bx] 
    mov es:[si].07d0h,al ;第一次循环时,把'w'放在屏幕中间,一个屏幕可放4000个字符,中间就是2000个字符的位置.2000(十进制)=7d0H(十六进制),结果要显示三行字符串,把第一个字符串的'w'放到显示缓冲区 
    mov es:[si].0870h,al ;用于显示第二行,07d0+a0=0870,a0h就是一行的长度.把第二个字符串的'w'放到显示缓冲区 
    mov es:[si].0910h,al ;用于显示第三行,0870h+a0h=0910h,把第三个字符串的'w'放到显示缓冲区 
    mov al,[di]          ;把[di]指向的02h(绿色),字符属性通过al传送给es:[si+1].07d0h,注意+1的意义. 
    mov es:[si+1].07d0h,al 
    mov al,[di].1 
    mov es:[si+1].0870h,al  ;给第二行的字符加上颜色属性 
    mov al,[di+2] 
    mov es:[si+1].0910h,al ;给第三行的字符加上颜色属性 

    inc bx    ;下一个字符 
    add si,2  ;下一个要显示的字符所对应的显存缓冲区. 
    loop s1    
         
    mov ax,4c00h  ;程序正确返回 
    int 21h 
codesg ends 
end start 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
;;不对之处,请高手指正;;;;;;;;;;;;;;;;; 
;链接地址:http://www.asmedu.net/blog/user/postcontent.jsp?neighborId=37247&kindLevel=1&kindId=52075&postId=50748
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved