实验室要求从大Endian到小端序。我得到了渴望的结果,但是一个临时数组使用与我的小端相同的地址,使内容加倍。怎么样,我能解决吗?我是汇编语言的新手
这是我的代码:
.386
.model flat,stdcall
.stack 4096
ExitProcess proto,dwExitCode:dword
.data
bigEndian BYTE 12h,34h,56h,78h ;given code do not delete
littleEndian DWORD ?
tempArray BYTE ?
.code
main proc
mov ebx,0
mov ecx,4
mov esi, SIZEOF bigEndian -1
L1:
mov dl,bigEndian[esi]
mov tempArray[ebx], dl
dec esi
inc ebx
loop L1
mov esi,0
mov eax,DWORD PTR tempArray[esi]
mov littleEndian,eax
;inc esi
invoke ExitProcess,0
main endp
end main
答案 0 :(得分:1)
您不需要临时数组。你可以使用这样的东西(MASM语法):
mov esi,offset bigEndian
lodsb
shl eax,8
lodsb
shl eax,8
lodsb
shl eax,8
lodsb
mov littleEndian,eax
如果赋值只是使用mov instructrions而没有移位指令(MASM语法):
mov al,byte ptr bigEndian+0
mov byte ptr littleEndian+3,al
mov al,byte ptr bigEndian+1
mov byte ptr littleEndian+2,al
mov al,byte ptr bigEndian+2
mov byte ptr littleEndian+1,al
mov al,byte ptr bigEndian+3
mov byte ptr littleEndian+0,al
或
mov ah,byte ptr bigEndian+0
mov al,byte ptr bigEndian+1
mov word ptr littleEndian+2,ax
mov ah,byte ptr bigEndian+2
mov al,byte ptr bigEndian+3
mov word ptr littleEndian+0,ax
答案 1 :(得分:1)
此任务无需使用临时数组。
仅使用MOV
说明进行就地倒车。
mov esi, 0
mov edi, 3
L1:
mov dl, bigEndian[esi]
mov dh, bigEndian[edi]
mov bigEndian[edi], dl
mov bigEndian[esi], dh
inc esi
dec edi
cmp esi, edi
jb L1
如果目的地确实是另一个变量,那么请使用:
mov esi, 3
mov edi, 0
L1:
mov dl, bigEndian[esi]
mov littleEndian[edi], dl
inc edi
dec esi
jns L1