我的随机数程序以图形模式打印垃圾值

My random number procedure prints garbage value in Graphic mode

我必须使用汇编语言 8086 在图形模式下打印随机值。我的随机过程在简单模式下工作正常,但在图形模式下打印垃圾值? draw1 宏用于在图形模式下在屏幕上打印数字或任何字符,它也可以正常工作。唯一的问题是随机过程。它在简单模式下打印正确的值,但在图形模式下打印垃圾值。

draw1 macro R1,C1,v1,Col;ROW,COL,value,Colour
    mov AH,2                               
    mov DH,C1   
    mov DL,R1
    INT 10H                 
    
    mov ah,09h
    mov al,v1
    add al,48
    mov bh,0
    mov bl,Col;colour1
    mov cx,1
    int 10h
endm
.model small
.stack 100
.data
ran db 0
.code   
main proc
mov ah,0
         mov al,3
         int 10h    

         ;Graphic mode
;;Command        Size           Colour
;;0Eh            640 x 200      16
;;12h            640 x 480      16
mov ah,0
mov al,0Eh  ;640x200 16 color graphics 
int 10h



call random ;Call random procedure
;draw1 12,8,3,2; To test---draw1 xaxis,yaxis,value,colour
draw1 7,4,ran,3; To draw value on screen

;;Exit Graphic mode
    mov ax,4c00h
    int 21h
  mov ah,4ch
 int 21h 
MAIN ENDP
;Random number procedure
random proc
  mov cx,1000
  L1:
    push cx
    mov cx,1000
  L2:
    Loop L2
    pop cx
    Loop L1
  MOV AH, 00h        
   INT 1AH         

   mov  ax, dx
   xor  dx, dx
   mov  cx, 5  
   div  cx       

   add  dl, '1'  
   mov ran,al
  
  ret
  random endp
END MAIN
mov DH,C1   
mov DL,R1

BIOS.SetCursorPosition 函数 02h 需要 DL 中的列和 DH 中的行。你把这个颠倒了。您还需要指定要为其设置光标位置的显示页面(mov bh, 0)。

运行dom 过程将定时器节拍的低位字除以 5。这在 AX 中留下商,在 [= 中留下余数17=]。余数将在 运行ge [0,4]、 中,但商可能比一个字节可以容纳的内容大得多(最多超过 12000)。

add  dl, '1'        <<< This adds to much (most probably not what you want)
mov ran,al          <<< This is AL containing garbage

不清楚你在这里需要什么。如果你想要一个从1到5的运行dom数字,正确的代码是:

add dl, 1
mov ran, dl

draw1宏,将运行中的值加48变成一个字符。