我的随机数程序以图形模式打印垃圾值
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变成一个字符。
我必须使用汇编语言 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变成一个字符。