+ -
当前位置:首页 → 问答吧 → 【虎彡】屏幕输出的小程序,需要注释

【虎彡】屏幕输出的小程序,需要注释

时间:2010-12-26

来源:互联网

assume cs:code 
  code segment 
  start: 
  call clr ;清屏
  mov cx,100  
  main: call show 
  in al,60h ;如果有按键Q读入 
  cmp al,10h ;则退出程序 
  jz over ; 
  jmp main 
  loop main 
  
  over: mov ah,4ch 
  int 21h 
  ; 
  show: push ax 
  push bx 
  push cx 
  push dx 
  
  mov bl,160 ;除数160(一行160字节)
  in al,40h ;读取8位随机数
  and ax,0ffh ;高8清0
  div bl 
  mov dl,ah ;余数送dl
  
  mov bl,25 ;除数为25 (25行)
  in al,40h ;读取8位随机数
  and ax,0ffh ;高8清0
  div bl  
  mov dh,ah ;dh=余数 
   
  
  mov ah,2 ;置光标
  mov bh,0  
  mov bl,02 
  int 10h  
---------------------------------------------  
  s: mov ah,2 ;置光标
  int 10h 
  cmp dh,50  
  je ok 
  in al,40h 
  and al,0fh 
  cmp al,9 
  ja sa 
  add al,30h 
  jmp sb 
 sa: add al,37h 
 sb: mov ah,9 
  mov cx,1 
  int 10h 
  call delay 
  inc dh 
  jmp s 
 ok: 
  pop dx 
  pop cx 
  pop bx 
  pop ax 
  ret 
;------------------------------------- 
clr: push bx ;清屏
  push cx 
  push es 
  mov bx,0b800h 
  mov es,bx 
  mov bx,0 
  mov cx,4000 
 c1: mov byte ptr es:[bx],20h 
  add bx,2 
  loop c1 
  pop es 
  pop cx 
  pop bx 
  ret 
 ; ----------------------------------
 delay: push ax ;延时
  push dx 
  mov dx,50h 
  mov ax,0 
 d1: sub ax,1 
  sbb dx,0 
  cmp ax,0 
  jne d1 
  cmp dx,0 
  jne d1 
  pop dx 
  pop ax 
  ret 
 ;-------------------------------------- 
 code ends 
  end start







 标号S一直到OK结束那段没看明白 需要注释

作者: znxllyuan   发布时间: 2010-12-26

s: mov ah,2 ;置光标
  int 10h  
  cmp dh,50 ;一共输出50行
  je ok ;满了就返回
  in al,40h ;取随机数
  and al,0fh ;保留D0~D3(0~0FH)
  cmp al,9 ;比9大就加37H
  ja sa  
  add al,30h;比9小就加30H  
  jmp sb  
 sa: add al,37h  
 sb: mov ah,9 ;输出字符
  mov cx,1 ;个数
  int 10h  
  call delay ;延时
  inc dh ;下一行
  jmp s ;跳s
 ok:  
-----------------------------------
说明一下为什么有些是加30H,有些是加37H

0~9肯定是加30H显示
A~F的ASCII是41H~46H
A是10直接加30H=3AH,再多加7就=41H了,
所以
cmp al,9  
ja sa 
是加37H

作者: va_zaixuexi   发布时间: 2010-12-26

cmp dh,50 ;一共输出50行
  je ok ;满了就返回

  没看懂 

  不是一页只有25行么

作者: znxllyuan   发布时间: 2010-12-26

后面的行数还是在0页的话,是不显示
做了个实验:
  .model tiny
  .code
  main proc far
start:
  xor ax,ax
  push ds
  push ax
  mov ah,2
  mov bh,0
  mov dl,10
  mov dh,0
  int 10h
mov cx,50 ;走50次看看
mov dl,40h
next:
mov bl,dl
  xor dl,dl
inc dh
cmp dh,24
  jbe pass
inc bh ;超过24行,page加1,看看效果
pass:
mov ah,2
  int 10h
  mov dl,bl
mov ah,2
  inc dl
int 21h
  loop next
  ret
  main endp
  end start

作者: va_zaixuexi   发布时间: 2010-12-26