如何解决使用 IN 指令使 x86 程序崩溃
我正在尝试使用端口 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)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。