Assembly 如何在程序集上随机显示单个字符?
我正在写一个汇编代码,它应该随机显示一个字符。在这段代码中,我使用函数generateradom获取随机值(使用CX:DX),并将其复制到行和列中。如您所见,我对行和列使用相同的函数。但是,不显示任何字符。我尝试更改值和变量,发现只要将变量分配给dh,字符就不会显示。变量行和列在分配给dl时可以正常工作。仅当我将数值直接指定给dh时,才会显示该字符。看来问题出在dh登记册上,但我不确定它到底出了什么问题Assembly 如何在程序集上随机显示单个字符?,assembly,random,Assembly,Random,我正在写一个汇编代码,它应该随机显示一个字符。在这段代码中,我使用函数generateradom获取随机值(使用CX:DX),并将其复制到行和列中。如您所见,我对行和列使用相同的函数。但是,不显示任何字符。我尝试更改值和变量,发现只要将变量分配给dh,字符就不会显示。变量行和列在分配给dl时可以正常工作。仅当我将数值直接指定给dh时,才会显示该字符。看来问题出在dh登记册上,但我不确定它到底出了什么问题 .model small .data row db 3 column db
.model small
.data
row db 3
column db 3
random db '@'
;delaytime db 18
.stack 100h
.code
display proc
mov dh, row
mov dl, column
xor bh, bh
mov ah, 02h
int 10h
mov al, random
xor bh, bh
mov cx, 1
mov ah, 0Ah
int 10h
mov dh, 0
ret
display endp
generateRandom proc
mov ah, 00h
int 1Ah
mov ax, dx
xor dx, dx
mov cx, 10
div cx
add dl, 48
ret
generateRandom endp
main proc
mov ax, @data
mov ds, ax
;start
;video mode
mov al, 03h
mov ah, 00h
int 10h
call generateRandom
mov row, dl
call generateRandom
mov column, dl
call display
;end
mov ax, 4c00h
int 21h
main endp
end main
GeneratorDOM仅适用于生成随机ASCII数字。您的显示器没有58行。我尝试将第48行更改为10行,结果成功了!谢谢你说清楚了。我还将调整列的值。显示应该有25行,但当我尝试将值设为25甚至20时,字符仍然不经常显示。我应该使用什么样的精确值来确保它在屏幕上?将模数传递给“GeneratorDOM”函数,而不是在其中硬编码,并在使用点添加合适的基值(可打印字符为30h,行/列为0)。随机数字的模数为10,行和列的模数为#行/列(或者25和80,如果你想硬编码的话)。