程序集将数字转换为字符

时间:2016-01-02 17:54:43

标签: assembly masm irvine32

我有这个变量:

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

我找到了某个地方,我必须将数字减去27并添加ascii 0,但它无法正常工作。请注意我必须使用RandomRange。

1 个答案:

答案 0 :(得分:1)

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

  • 确定范围的大小:122-97 + 1 = 26个字符,
  • 移动 通过添加开头,将RandomRange范围扩展到所需范围 价值:97。

顺便说一句:如果你不用RandomRange初始化Randomize,你将始终得到相同的序列。

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