1

关于我的编程课的另一个问题,实际上是几个。首先,程序已经编写好了,代码可以在下面找到。

问题一:

现在,在说明中明确指出程序可以在保护模式实地址模式下完成。我相当肯定 Windows 在保护模式下运行,因此这意味着我已经以这种方式完成了练习。如果我愿意,如何改变程序执行的模式?我说 Windows 在保护模式下运行是否正确?

问题2:

我在下面的汇编代码中写了一些注释,说明如何正确填充寄存器的前 16 位?

问题 3:

最后,在最终提交中包含清单文件地图文件的指令要求,我找不到这些文件。


TITLE Subtracting Three Integers

; This program takes three integers in hexidecimal and then subtract the 2nd and 3rd from the first.

INCLUDE Irvine32.inc

.code
main PROC

    mov ax,0109h        ;stores integer 265 in ax(16-bit register)
    mov bx,0041h        ;stores integer 65 in bx(16-bit register)
    mov  cx,0064h       ;stores integer 100 in cx(16-bit register)

    sub ax,bx
    sub ax,cx
    call    DumpRegs

    comment !
    The dump regs returns the value of EAX=763B0064 BAX=7FFD0041 CAX=00000064
    because EAX EBX and ECX are 32-bit registers they fill the first 16-bits with
    unallocated data from other programs
    !

    exit
main ENDP
END main
4

1 回答 1

0

1-实模式和保护模式之间的主要区别在于,在实模式下,任何程序都可以访问任何内存位置,而在保护模式下,程序只能访问为其布局的某些内存位置。实模式的问题是显而易见的——您计算机上的任何程序都可以监视您的一举一动。由于这是一个巨大的安全问题,实模式已经过时,现在几乎所有现代操作系统都在保护模式下运行。

您的程序可以在任何一种模式下运行,因为它不会访问任何越界的内存位置。所有代码都布置在内存中并保持在限制范围内。通用寄存器不在内存中,所以你在那里也很安全。

2-你是对的。但请注意,如果ax是有符号的,则该值265对于 16 位寄存器来说太大了。

3- “地图”文件是一个文件,它显示了段在代码中的布局方式。它还可以显示符号及其虚拟地址。“链接器”文件演示了命令位置、值以及它们与您输入的各个操作码的关系。这两者都可以使用您的编译器生成。

于 2014-03-13T02:53:52.273 回答