.model small
.386
data segment
temp db ?
data ends
code segment
assume cs:code,ds:data
start:
mov edx,0f80f802ch
mov al,[edx]
mov temp,al
mov al,41h
out 70h,al
jmp $+2
mov al,temp
out 71h,al
mov ah,4ch
int 21h
code ends
end start
------解决方案--------------------
没有给 ds 赋值吧:
start::
mov ax, data ;*+
mov ds, ax ;*+
mov edx, 0f80f802ch
------解决方案--------------------
mov al, [edx] 这个指令用 32 位寻址,实模式下可以吗,可以的话是不是需要设置相应的 ds ?没做过这方面的,不了解了。
------解决方案--------------------
386+的实模式下也可以使用32位寻址模式,但是地址仍然受到段限制的影响,不能超过64K(除非切换到保护模式修改段限制再切换回来)。
------解决方案--------------------
问题是这0f80f802ch是什么地址?物理地址?那你必须先切换到big real mode,网上很多这方面的资料。
------解决方案--------------------
可能是实模式,也可能是v86模式,取决于运行环境,如果DOS启动时加载了EMM386或者类似的东西,或者运行在Windows的DOS窗口中,那就是v86模式。
这里有设置big real mode的代码:http://wiki.osdev.org/Unreal_Mode