【发布时间】:2018-02-03 15:25:55
【问题描述】:
这个问题要求我接受一个双字并将其从小端转换为大端。我已经把那部分记下来了,但现在我需要打印出来。
对 WriteHex 的调用只会打印出整个寄存器。我还尝试使用一些数学来将我的数组的内容放入一个寄存器中,但我们仅限于使用没有循环的 mov、add 和 sub。有没有办法使用 Irvine 打印出单个字节或仅使用这些命令将数组移动到寄存器?
这就是我所拥有的
data
bigEndian BYTE 4 DUP(?)
littleEndian DWORD ?
prompt BYTE "Please enter a number in HEX > ",0
.code
main PROC
mov edx, offset prompt
CALL WriteString
CALL ReadHex
mov littleEndian, eax
mov al, bigEndian + 4
mov bigEndian, al
mov al, bigEndian + 5
mov bigEndian + 1, al
mov al, bigEndian + 6
mov bigEndian + 2, al
mov al, bigEndian + 7
mov bigEndian + 3, al
; should print here
【问题讨论】:
-
如果您真的想打印单个字节,请使用
movzx eax, BYTE PTR someAddress将一个字节从内存零扩展到一个 32 位寄存器中。否则,请参阅 rkhb 的回答。请注意,代码中call ReadHex之后的所有内容都可以替换为bswap eax。