如何解决将 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 comment,Irvine32 有 WriteDec
和 WriteInt
函数来打印来自 EAX 的二进制整数,如 printf %u 或 %d。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。