从 65 到 69('A' 到 'E')的随机整数,并将其存储到 AL 寄存器
A random integer from 65 to 69 ('A' to 'E') and store it to AL register
您好,我是汇编语言的新手,我尝试生成一个从 65 到 69('A' 到 'E')的随机整数并将其存储到 AL 寄存器。这是我的代码。
;------------------------------------------------------------
GetChFromABCDE PROC USES eax
;
; Generates a char randomly from 'A','B','C','D','E'
; Receives: Nothing
; Returns: The char ASCII code in AL
;------------------------------------------------------------
mov eax, 5 ; get random 0 to 4
call RandomRange ;
mov eax, 41h ; make range 65 to 69
mov value1, eax
mov al, BYTE PTR value1
GetChFromABCDE ENDP
END main
每当我试图找出这段代码中的问题所在时,调试器就会提示 'Source not available' 和 'Source information is missing from the debug information for this module'。我想问题是这个。
mov value1, eax
mov al, BYTE PTR value1
我的教授说尽量使用寄存器而不是内存,但是这次我不知道如何解决这个问题..
mov eax, 41h ; make range 65 to 69
啊,...,不,不是 :-)
将eax
设置为0x41/A
。我想你的意思是:
add eax, 41h ; make range 65 to 69
此外,我不确定为什么你 有 将随机值存储到 value1
然后检索它的代码(你认为问题可能出在哪里) ):
mov eax, 41h ; make range 65 to 69 (should be add)
; I mean this code below:
mov value1, eax
mov al, BYTE PTR value1
al
寄存器 已经 具有随机值,因为它是 eax
的最低有效八位字节。由于您从不在其他任何地方使用 value1
,因此这似乎是多余的。
您可能还想检查子例程完成后应该做什么。某个 调用了 它,因此它应该 return 给那个调用者。也就是说,需要一个ret
。
最后一点,我相信 proc
的 uses
子句会自动创建 push/pop 指令来保存和恢复这些寄存器中的值。所以你不想要一个uses
列出你想要return一个值的寄存器之一,因为pop
在[=19之前=] 将覆盖该值。
我发现我忘了在 GetChFromABCDE PROC 中输入 ret
!
这是最终答案。
GetChFromABCDE PROC
mov eax, 5 ; get random 0 to 4
call RandomRange ;
add eax, 41h ; make range 65 to 69
ret
GetChFromABCDE ENDP
您好,我是汇编语言的新手,我尝试生成一个从 65 到 69('A' 到 'E')的随机整数并将其存储到 AL 寄存器。这是我的代码。
;------------------------------------------------------------
GetChFromABCDE PROC USES eax
;
; Generates a char randomly from 'A','B','C','D','E'
; Receives: Nothing
; Returns: The char ASCII code in AL
;------------------------------------------------------------
mov eax, 5 ; get random 0 to 4
call RandomRange ;
mov eax, 41h ; make range 65 to 69
mov value1, eax
mov al, BYTE PTR value1
GetChFromABCDE ENDP
END main
每当我试图找出这段代码中的问题所在时,调试器就会提示 'Source not available' 和 'Source information is missing from the debug information for this module'。我想问题是这个。
mov value1, eax
mov al, BYTE PTR value1
我的教授说尽量使用寄存器而不是内存,但是这次我不知道如何解决这个问题..
mov eax, 41h ; make range 65 to 69
啊,...,不,不是 :-)
将eax
设置为0x41/A
。我想你的意思是:
add eax, 41h ; make range 65 to 69
此外,我不确定为什么你 有 将随机值存储到 value1
然后检索它的代码(你认为问题可能出在哪里) ):
mov eax, 41h ; make range 65 to 69 (should be add)
; I mean this code below:
mov value1, eax
mov al, BYTE PTR value1
al
寄存器 已经 具有随机值,因为它是 eax
的最低有效八位字节。由于您从不在其他任何地方使用 value1
,因此这似乎是多余的。
您可能还想检查子例程完成后应该做什么。某个 调用了 它,因此它应该 return 给那个调用者。也就是说,需要一个ret
。
最后一点,我相信 proc
的 uses
子句会自动创建 push/pop 指令来保存和恢复这些寄存器中的值。所以你不想要一个uses
列出你想要return一个值的寄存器之一,因为pop
在[=19之前=] 将覆盖该值。
我发现我忘了在 GetChFromABCDE PROC 中输入 ret
!
这是最终答案。
GetChFromABCDE PROC
mov eax, 5 ; get random 0 to 4
call RandomRange ;
add eax, 41h ; make range 65 to 69
ret
GetChFromABCDE ENDP