0

我正在尝试在 8086 asm 中为 XT 模拟器编写程序,它在屏幕上绘制随机像素(目前为 1 个坐标轴)。

沿 (x=random(),y=100) 绘制 10 个像素,然后运行延迟。我遇到了挂起或无限循环。

我试过推送和弹出 cx 寄存器 for 循环。我还尝试在 dos 3.3 debug.com 中执行构建的 .com 文件,但是一旦程序进入图形模式,屏幕上就什么也看不到了。我知道当我将随机数缩放 5 时,它可能会在屏幕外产生像素坐标。但问题在于挂起或无限循环。延迟部分单独测试并且工作正常,在我的模拟器上延迟大约 3 秒。

附加信息:mc1502 8086 机器用于 mame 模拟器,操作系统环境 - 用于 mc1502(msdos 3.3 克隆)的 sigma dos,asm - turbo asm 1.0。

;configure for com file
.model tiny
.code
org 100h

start:

;set graphics mode
mov ax, 0004h ;cga 320*200 color on mc1502
int 10h

;put pixel line by coords (rnd)
;start random gen
mov dx, 0abbah  ;init
mov cx, 000ah ;10 times
rnd:
mov ax, dx
mov bx, 001fh
mul bx
add ax, 000dh
mov bx, 4ce3h
div bx ;dx now has a random number

;draw pixel
push cx ;save counter
mov cx, 0064h ;x 2-byte
push dx ;save dx
mov ax, dx ; scaling dx 
mov bl, 5
div bl
mov dx, 0 ;scaled y
mov dl, al ;dl is y
mov ax, 0c02h ;0c drawfunc, 02 color
int 10h ;video int
pop dx
pop cx
loop rnd

;delay
mov cx, 0ffffh
delay:
push cx
mov cx, 000ah
indelay:
nop
loop indelay
pop cx
loop delay

;set text mode 80x25 bw
mov ax, 0000h
int 10h

;exit to dos
mov ax, 4c00h
int 21h
end start

4

0 回答 0