hello大家好,从指定内存地址读取数据到cmos,读取内存数据的语法应该如何修改?求帮助阿

hello大家好,从指定内存地址读取数据到cmos,读取内存数据的语法应该怎么修改?求帮助阿
本帖最后由 y363585404 于 2013-12-16 14:16:25 编辑
.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