2016-09-03 1 views
0

J'ai un programme très simple où j'ai stocké un nombre dans une variable dw appelée asciiCode. Je veux ensuite utiliser la print macro déclarée masm32rt.inc pour imprimer le caractère ASCII représenté par cette valeur, A, mais en essayant de le faire provoque le plantage du programme:Imprimer une valeur DWORD en tant que caractère ASCII

.386 
option casemap:none 

include \masm32\include\masm32rt.inc 

.data 
    asciiCode dw 65 

.code 
start: 
    print asciiCode 
    exit 
end start 

Le programme se bloque toujours lorsque asciiCode est déclaré comme db ou dd.

Existe-t-il une autre fonction que je dois utiliser en premier pour convertir ce dw en un caractère ASCII imprimable?

+0

Vous pouvez simplement regarder ce que cette macro assemble réellement, avec un désassembleur ou mieux en effectuant un pas à pas dans un débogueur. La plupart des erreurs dans les programmes asm les font planter, c'est pourquoi vous avez besoin d'un débogueur. –

+0

@PeterCordes Quel débogueur convivial pour les débutants recommanderiez-vous pour Windows? –

+0

IDK, j'utilise gdb sur Linux. IIRC à partir du moment où j'ai fait le développement de Windows, Visual Studio peut déboguer asm, donc c'est une option si vous l'utilisez déjà. –

Répondre

2

La façon la plus simple pourrait être d'utiliser la macro printf:

; prints 65. If you want the character A instead, use the format specifier %c 
printf("%d", asciiCode) 

Vous devriez probablement déclarer asciiCode en utilisant dd dans ce cas - dw vous donne un mot , pas un dword.

+0

Ah-ha! Merci de m'avoir indiqué 'printf', en utilisant' "% c" 'car la chaîne de format affiche' A'. –