将 DWORD 向下转换为 BYTE,汇编 32 位

Down Convert DWORD to BYTE, Assembly 32 bits

我想将 Dword 向下转换为 Byte,以便我可以通过 call WriteToFile 将其存储到可读文本的文本文件中。我该怎么做?

 .386     
 .model flat, stdcall  
 INCLUDE Irvine32.inc
 .stack 4096  

 .Data
 total         DWORD  ?      ;total is a variable which holding a math calc output
 totalTXT       BYTE  ?      ;totalTXT would be the output in String value. 
    

这是我尝试向下转换的地方

 xor eax, eax
 mov eax,  total
 mov totalTXT, al

我需要以字节为单位的 totalTXT,这样我就可以将其作为文本存储到文件中。但是调试后,我的文本文件变空了。

WRITE_TO_FILE:                 ;assume file is successfully opened

 mov eax,fileHandle 
 mov edx, OFFSET   totalTXT          
 mov ecx, LENGTHOF totalTXT   
 call WriteToFile
 call CloseFile

DWORD内存变量可能包含四个ASCII字符、一个指针、一个编码为有符号或无符号二进制数的数字、浮点数、二进制编码的十进制数等。 如果你想以人类可读的文本形式存储它的内容,你需要先转换它。

另请注意,totalTXT 保留的一个字节对于 9 以上的数字是不够的。 它应该被声明为 totalTXT BYTE 12 DUP (?) 或者你 total 转换成的任何大小。

Peter Cordes says in his comment一样,Irvine32有WriteDecWriteInt函数从EAX打印二进制整数,如printf %u或%d。