汇编将数字转换为字符
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
我有这个变量:
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