当前位置: 代码迷 >> 汇编语言 >> 编译语言中访问内存单元的方式(windows)
  详细解决方案

编译语言中访问内存单元的方式(windows)

热度:277   发布时间:2016-05-02 04:50:36.0
汇编语言中访问内存单元的方式(windows)

? ? ? ? 如果想将内存空间2000:0,2000:1,2000:2中的数据分别放入al,bl,cl中,可以通过如下方式:

mov ax,2000hmov ds,axmov al,[0]mov bl,[1]mov cl,[2]

? ? ? ? ?如果通过debug工具下a命令,输入后用u查看:

-a0AF3:0100 mov ax,20000AF3:0103 mov ds,ax0AF3:0105 mov al,[0]0AF3:0108 mov bl,[1]0AF3:010C mov cl,[2]0AF3:0110-u 0af3:01000AF3:0100 B80020        MOV     AX,20000AF3:0103 8ED8          MOV     DS,AX0AF3:0105 A00000        MOV     AL,[0000]0AF3:0108 8A1E0100      MOV     BL,[0001]0AF3:010C 8A0E0200      MOV     CL,[0002]

? ? ? ? ?看起来一切ok的样子!但是如果把这段代码写入到汇编程序文件中,然后汇编、链接,用debug查看:

assume cs:codecode segment   mov ax,2000h   mov ds,ax   mov al,[0]   mov bl,[1]   mov cl,[2]   mov dl,[3]   mov ax,4c00h   int 21hcode endsend

? ? ? ? ?debug u查看:

-u0B53:0000 B80020        MOV     AX,20000B53:0003 8ED8          MOV     DS,AX0B53:0005 B000          MOV     AL,000B53:0007 B301          MOV     BL,010B53:0009 B102          MOV     CL,020B53:000B B203          MOV     DL,030B53:000D B8004C        MOV     AX,4C000B53:0010 CD21          INT     21

? ? ? ? ?oh,这里变成了数值,根本没有当做内存偏移量.....

? ? ? ? 好吧,只能用最土的办法了: mov bx,0 mov al,[bx]。其实还有一种简洁的方法,就是常量偏移量前加短地址: mov bx,ds:[0] ?:

assume cs:codecode segment   mov ax,2000h   mov ds,ax   mov bx,0   mov al,[bx]   mov bx,1   mov bl,ds:[bx]   mov cl,ds:[2]   mov dl,ds:[3]   mov ax,4c00h   int 21hcode endsend

? ? ? ? ?用debug查看:

-u0B53:0000 B80020        MOV     AX,20000B53:0003 8ED8          MOV     DS,AX0B53:0005 BB0000        MOV     BX,00000B53:0008 8A07          MOV     AL,[BX]0B53:000A BB0100        MOV     BX,00010B53:000D 8A1F          MOV     BL,[BX]0B53:000F 8A0E0200      MOV     CL,[0002]0B53:0013 8A160300      MOV     DL,[0003]0B53:0017 B8004C        MOV     AX,4C000B53:001A CD21          INT     21
  相关解决方案