问题描述
我正在尝试使用端口 61H (PB4) 编写一个延迟计时器,并使用 function filterTable() {
const filterBy = document.getElementById('filter'); // filter option select
const savedData = JSON.parse(localStorage.getItem('data'));
let filteredArray;
if (filterBy.value === 'Node.JS') {
filteredArray = savedData.filter(function (e) {
return e.veranstaltung === 'Node.JS';
})
} else if (filterBy.value === 'ReactJS') {
filteredArray = savedData.filter(function (e) {
return e.veranstaltung === 'ReactJS';
})
} else if (filterBy.value === 'AngularJS') {
filteredArray = savedData.filter(function (e) {
return e.veranstaltung === 'AngularJS';
})
}
for (let i = 0; i < filteredArray.length; i++) {
createTable(filteredArray[i]);
}
}
在虚拟机上的 Windows XP 上运行它。但是,当代码运行 MASM
指令时,无论调用哪个端口,都会使程序崩溃。
IN
我不明白为什么计算机无法从端口 61h 获取数据。
解决方法
计算机可以从 I/O 端口获取数据,但前提是它以实模式或 ring 0 运行,后者为内核和设备驱动程序保留。 在原生 DOS 中,您可以读取任何您喜欢的 I/O 端口,并且即使在模拟器(NTVDM,DosBox)中运行实模式程序时,也可以读取/写入一些知名端口。
但是由于您选择了 Windows 保护模式可执行文件,这将不起作用。
改为调用 WinAPI 函数 Sleep(dwMilliseconds)。