汇编网首页登录博客注册
goodboy的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
好友圈
文章收藏
友情链接

[2008-11-15 13:22] 实验十三,第一个实验的两种思路

图片载入中
assume cs:code
     code segment
     start:
     mov ax,0
     mov es,ax
     mov ax,cs
     mov ds,ax
     mov di,200h
     mov si,offset show_str
     mov cx,offset showend-offset show_str
     cld
     rep movsb 
     mov word ptr es:[1F0H],200H
     mov word ptr es:[1F2H],0H
     mov ax,4c00h
     int 21h
show_str:
      push cx
      push dx
      push bx
      push si
      push di
      push ax
      mov ch,0
      dec dh
      dec dl
      mov al,dh
      mov bl,160
      mul bl
      mov bx,ax
      mov al,dl
      mov dl,2
      mul dl
      add ax,bx
      mov bx,ax
      mov di,0
      mov si,0
   ak:push cx
      mov cl,[si]   
      jcxz fs   
      mov ax,0B800H
      mov es,ax
      mov al,[si]   
      mov es:[bx+di],al
      pop cx   
      mov es:[bx+di+1],cl
      inc si
      add di,2
      jmp short ak
   fs:pop cx      
      pop ax
      pop di
      pop si
      pop bx      
      pop dx
      pop cx
      iret
      mov ax,4c00h
      int 21H
      showend:nop
   code ends
   end start
第一种思路,调用前几章实验中用到的show_str,稍做修改就可以了。
  assume cs:code
     code segment
     start:
     mov ax,0
     mov es,ax
     mov ax,cs
     mov ds,ax
     mov di,200h
     mov si,offset show_str
     mov cx,offset showend-offset show_str
     cld
     rep movsb 
     mov word ptr es:[1F0H],200H
     mov word ptr es:[1F2H],0H
     mov ax,4c00h
     int 21h
show_str:
      push cx
      push dx
      push bx
      push si
      push di
      push ax
      mov bl,cl         后来发现在int 10中可以用bl控制颜色,加这一句既可以实现颜色功能
   ak:mov cl,[si]   
      jcxz fs   
      inc si     
      jmp short ak
   fs:mov [si],24H
      mov ah,2
      mov bh,0
      int 10H
      mov dx,0
      mov ah,9
      int 21h
      mov [si],0H      
      pop ax
      pop di
      pop si
      pop bx      
      pop dx
      pop cx
      iret
      mov ax,4c00h
      int 21H
      showend:nop
   code ends
   end start
第二种思路,既然中断可以用int21回到dos,可见在中断中可以调用中断。调用int 9设置光标和int 21H显示字符的功能,在显示前将0换成$,$的ascii码为24H,显示后再恢复即可。由于我不知道dos中断里显示字符颜色的中断,所以字符颜色只能是默认白色。附上测试程序和测试结果
测试程序
assume cs:code
data segment
db "welcome to masm!",0
data ends
code segment
start:mov dh,10
mov dl,10
mov cl,2
mov ax,data
mov ds,ax
mov si,0
int 7ch
mov ax,4c00h
int 21h
code ends
end start
评论次数(1)  |  浏览次数(924)  |  类型(汇编作业) |  收藏此文  | 

[  lwbfq   发表于  2008-11-16 12:14  ]

第二种思路也不错

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码