Я пытаюсь изменить порядок некоторых 16-битных регистров, которые, похоже, не имеют 8-битных аналогов. Это домашнее задание, на котором я застрял.
Я успешно изменил регистры, которые имеют 8-битные и 16-битные регистры. Однако я понятия не имею, как я могу изменить регистры, которые имеют только 16 бит. Мне разрешено использовать только инструкцию mov для этого назначения.
Я попытался переместить значение di в cx, затем переместить ch в dl и cl в dh, надеясь, что это изменит порядок. Затем я сделал MOV DIX. Это не сработало, как ожидалось.
; Program Template
.386
.model flat, stdcall
.stack 4096
ExitProcess proto, dwExitCode:dword
.data
msgforward WORD 6 DUP(?)
msgbackward WORD 6 DUP(?)
restore_esp DWORD ?
.code
main proc
mov restore_esp, esp ; save the contents of register ESP so it can be restored before the program finishes
; DO NOT REMOVE THIS
; clear the registers
mov eax, 0
mov ebx, 0
mov ecx, 0
mov edx, 0
mov esi, 0
mov edi, 0
mov esp, 0
mov ebp, 0
; store message 'Welcome Home" in reverse order across the six 16-bit registers.
mov ax, "EM"
mov bx, "OH"
mov si, " E"
mov di, "MO"
mov sp, "CL"
mov bp, "EW"
; PUT YOUR INSTRUCTIONS FOR PHASES 1-3 HERE
; PHASE 1
mov [msgforward], bp
mov [msgforward+2], sp
mov [msgforward+4], di
mov [msgforward+6], si
mov [msgforward+8], bx
mov [msgforward+10], ax
; PHASE 2
; Use ch and cl
mov ch, bl
mov cl, bh
mov bp, cx
mov cx, sp
mov dx, cx
mov sp, dx
;mov dx, di
;mov cl, dh
;mov ch, dl
mov di, dx
mov dx, si
mov cl, dh
mov ch, dl
mov si, cx
mov cl, bh
mov ch, bl
mov bx, cx
mov cl, ah
mov ch, al
mov ax, cx
; PHASE 3
;mov [msgbackward+10], bp
;mov [msgbackward+8], sp
mov [msgbackward+6], di
mov [msgbackward+4], si
mov [msgbackward+2], bx
mov [msgbackward], ax
mov esp, restore_esp ; restore register ESP to its original value so the program can end correctly.
; DO NOT REMOVE THIS
invoke ExitProcess, 0
main endp
end main