汇编将数字转换为字符

assembly convert number into character

我有这个变量:

Message DB 10 dup(?)

我正在尝试生成 10 个随机字符,然后将它们保存到变量中。

mov ecx,10
mov edi,0

GenerateString:
    mov eax,60h
    call RandomRange
    sub eax,27
    add al,'0'
    mov Message[edi],al

    inc edi
    loop GenerateString

mov edx,offset Message
call WriteString

我发现某处我必须将 number 减去 27 并添加 ascii 0,但它无法正常工作。请注意我必须使用 RandomRange.

Irvine 的 RandomRange 创建 0..EAX-1 范围内的数字。换句话说:你得到一定数量的不同数字范围内的数字。由于您想要 a..z (97..122) 范围内的 ASCII 字符,因此您有

  • 判断大小范围:122-97+1=26个字符,
  • 移动 通过添加开始将 RandomRange 的范围添加到所需的范围 值:97.

顺便说一句:如果您不使用 Randomize.

初始化 RandomRange,您将始终得到相同的序列
INCLUDE Irvine32.inc

.DATA
    Message DB 10 dup(0)

.CODE
main PROC

    call Randomize                      ; Initialization for `RandomRange`

    mov ecx, LENGTHOF Message - 1       ; Without the terminating null!
    mov edi, 0

    GenerateString:

    mov eax, 26                         ; Range: [0..25] = 26 numbers
    call RandomRange
    add eax, 97                         ; Move the range from [0..25] to [97..122]
    mov Message[edi],al

    inc edi
    loop GenerateString

    mov edx,offset Message
    call WriteString

    exit

main ENDP

END main