Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Debugging MASM,地址9ffffh_Debugging_Assembly_Masm - Fatal编程技术网

Debugging MASM,地址9ffffh

Debugging MASM,地址9ffffh,debugging,assembly,masm,Debugging,Assembly,Masm,我有一些奇怪的事情。 下面是一个代码示例 CODESEGMENT segment assume CS: CODESEGMENT, DS: CODESEGMENT, SS: NOTHING, ES:NOTHING org 100h BEGIN: mov AX, 9fffh mov DS, AX mov CX, DS:000FH ;--------------------

我有一些奇怪的事情。 下面是一个代码示例

CODESEGMENT segment
    assume CS: CODESEGMENT, DS: CODESEGMENT, SS: NOTHING, ES:NOTHING
    org 100h
    BEGIN:      mov AX, 9fffh
                mov DS, AX
                mov CX, DS:000FH
                ;-----------------------------------------------------
                ;End of program, exit to DOS
                ;-----------------------------------------------------
                mov AX, 4c00h
                int 21h
CODESEGMENT ends
end BEGIN
这个密码呢

CODESEGMENT segment
    assume CS: CODESEGMENT, DS: CODESEGMENT, SS: NOTHING, ES:NOTHING
    org 100h
    BEGIN:      mov AX, 9000h
                mov DS, AX
                mov BX, [0FFFFH]
                ;-----------------------------------------------------
                ;End of program, exit to DOS
                ;-----------------------------------------------------
                mov AX, 4c00h
                int 21h
CODESEGMENT ends
end BEGIN
我想当我从DS得到偏移量时,我有,例如

DS = 9000h
offset = FFFFh

DS = 9000h * 10h = 90000h
                   +
                   0FFFFh
                   =
                   9FFFFh
这样想,我写了两个代码。 我认为这些代码也做了同样的事情——从地址9FFFFh读取两个字节到CX,但我查看了masm调试器afd,发现我错了

第一个代码:

第二代码

我使用masm是因为我是学生,我已经习惯了。
请告诉我我的错误在哪里。

64位段中偏移量0xFFFF处的两个字节是0xFFFF处的字节和0x0000处的字节,这是段的第一个字节。一个段只能寻址64k,您将获取64k+1字节,该字节环绕到开头。第一段代码没有这个问题。但是,为什么我在调试器中的内容彼此不同呢?我想我没有读过你,我的意思是当我有ds=9000h,然后我有偏移ffffh,我没有像9ffffh这样的真实地址?我不知道你在找什么。我为糟糕的英语感到抱歉。我理解了大约两个字节。当我向段寄存器添加偏移量时,内存单元就会得到20位的实地址,这对吗?是的,但如果操作数的第二个或更高字节导致地址溢出16位,则第17位不会被带入DS…它只是被丢弃。因此,如果DS为0x9000,BX为0xFFFF,则16位读取将获取0x9FFFF和0x90000处的字节,而不是0xA0000处的字节。