Assembly 如何在程序集上随机显示单个字符?

Assembly 如何在程序集上随机显示单个字符?,assembly,random,Assembly,Random,我正在写一个汇编代码,它应该随机显示一个字符。在这段代码中,我使用函数generateradom获取随机值(使用CX:DX),并将其复制到行和列中。如您所见,我对行和列使用相同的函数。但是,不显示任何字符。我尝试更改值和变量,发现只要将变量分配给dh,字符就不会显示。变量行和列在分配给dl时可以正常工作。仅当我将数值直接指定给dh时,才会显示该字符。看来问题出在dh登记册上,但我不确定它到底出了什么问题 .model small .data row db 3 column db

我正在写一个汇编代码,它应该随机显示一个字符。在这段代码中,我使用函数generateradom获取随机值(使用CX:DX),并将其复制到行和列中。如您所见,我对行和列使用相同的函数。但是,不显示任何字符。我尝试更改值和变量,发现只要将变量分配给dh,字符就不会显示。变量行和列在分配给dl时可以正常工作。仅当我将数值直接指定给dh时,才会显示该字符。看来问题出在dh登记册上,但我不确定它到底出了什么问题

.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,如果你想硬编码的话)。