微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决将 DWORD 向下转换为 BYTE,汇编 32 位

我想将 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 保留的 1 个字节对于大于 9 的数字是不够的。 它应声明为 totalTXT BYTE 12 DUP (?) 或您 total 转换为的任何大小。

作为 Peter Cordes says in his commentIrvine32 有 WriteDecWriteInt 函数来打印来自 EAX 的二进制整数,如 printf %u 或 %d。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。