masm Irvine32 库。如何打印出单个字节

masm Irvine32 library. How to print out a single byte

这个问题要求我输入一个双字并将其从小端转换为大端。我已经把那部分记下来了,但现在我需要把它打印出来。

调用 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 

PTR 是声明或覆盖类型的 MASM 运算符。如果你想从 DWORD 变量中加载一个字节,你可以使用 BYTE PTR。如果你想从 BYTE 数组中加载一个 DWORD,你可以使用 DWORD PTR:

INCLUDE Irvine32.inc

.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, BYTE PTR littleEndian + 3
    mov bigEndian + 0, al
    mov al, BYTE PTR littleEndian + 2
    mov bigEndian + 1, al
    mov al, BYTE PTR littleEndian + 1
    mov bigEndian + 2, al
    mov al, BYTE PTR littleEndian + 0
    mov bigEndian + 3, al

    mov eax, DWORD PTR bigEndian
    call WriteHex

    exit

main ENDP

END main