use*_*648 1 windows assembly virtual command x86-16
我想确认一些事情.我正在为8086制作汇编语言程序.我正在使用masm611汇编程序进行汇编.如果我在32位窗口的命令提示符下运行并调试8086 16位实模式程序,它是否使用和修改实际的cpu寄存器和内存?该程序是否在Windows 32bit下的虚拟模式下运行?
另外,如果我使用PWB Microsoft Programmers'Workbench中的CodeView调试器调试程序,如下所示:
运行调试程序的8086汇编语言程序http://i65.tinypic.com/35cej2e.jpg
请确认CodeView调试器中的寄存器和存储器值是否为硬件中的实际值并且正在更改.此外,当我在PWB中运行程序时,它使用Windows 32位下的实际硬件.
当您从32位版本的Windows下的Windows命令提示符运行MS-DOS程序时,它在NTVDM下运行,它使用虚拟8086模式来模拟实模式.程序运行时,正常使用CPU的寄存器.但是,它不会以与在实模式下运行的代码相同的方式使用内存.
Windows不提供NTVDM,并且在其下运行的任何程序,直接访问物理内存,就像它没有任何其他Windows应用程序直接访问一样.而是程序对存储器的访问通过页表从线性地址转换为物理地址.这意味着如果您的MS-DOS应用程序写入内存位置074B:0000,CPU将其转换为线性地址000074B0,然后通过页表查找将其转换为Windows选择的完全不同的物理地址.Windows也不允许NTVDM或在其下运行的应用程序直接访问设备硬件,因此任何对设备内存的访问都将被NTVDM阻止或模拟.
我还应该注意,由于您使用的CodeView版本也是一个MS-DOS应用程序,它也在虚拟8086模式下作为应用程序运行,使用与正在调试的程序相同的实际CPU寄存器.这意味着当CodeView显示调试程序的寄存器时,它显示程序停止时CodeView中的值和CodeView接管.CodeView需要寄存器供自己使用,所以当它获得控制时它首先要做的是将调试的程序寄存器保存在某个地方的内存中.
| 归档时间: |
|
| 查看次数: |
284 次 |
| 最近记录: |