Я пытаюсь сделать программу сборки для чтения ввода с порта 0x379.К сожалению, я не могу использовать регистр ESI для этой задачи, так как я использую Windows 7. Я импортировал inpout32.dll в свою программу, но, к сожалению, я не знаю, как передать ему порт.Я пытаюсь использовать функцию Inp32, которая принимает порт в качестве аргумента.Пока что я могу только назвать адрес местоположения Inp32 в dll.Кстати, цикл while еще не завершен.Вот мой исходный код:
.386
.model flat, stdcall
option casemap :none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
.data
LibName db "inpout32.dll", 0
OutName db "Out32", 0
InpName db "Inp32", 0
DllNotFound db "Cannot load the library", 0
AppName db "Load Library", 0
FunctionNotFoundInp db "Inp32 function not found", 0
FunctionNotFoundOut db "Out32 function not found", 0
.data?
libHandle dd ? ; handle of the dll
outAddress dd ? ; address of the out function
inpAddress dd ? ; address of the inp function
.code
start:
invoke LoadLibrary, offset LibName
.if (eax == NULL)
invoke MessageBox, NULL, addr DllNotFound, addr AppName, MB_OK
.else
mov libHandle,eax
invoke GetProcAddress, libHandle, offset OutName
.if (eax == NULL)
invoke MessageBox, NULL, addr FunctionNotFoundOut, addr AppName, MB_OK
.else
mov outAddress, eax
.endif
invoke GetProcAddress, libHandle, offset InpName
.if (eax == NULL)
invoke MessageBox, NULL, addr FunctionNotFoundInp, addr AppName, MB_OK
.else
mov inpAddress, eax
.endif
.endif
WhileLp:
cmp eax, 223d ;compare eax to 223, which is up and down combined
je WhileDone
jmp WhileLp ;jump back to the while loop
WhileDone:
invoke ExitProcess, 0
end start