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

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

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

         如果通过debug工具下a命令在指定地址写入汇编指令,输入后用u查看:

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

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

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

         debug u查看:

-u
0B53:0000 B80020        MOV     AX,2000
0B53:0003 8ED8          MOV     DS,AX
0B53:0005 B000          MOV     AL,00
0B53:0007 B301          MOV     BL,01
0B53:0009 B102          MOV     CL,02
0B53:000B B203          MOV     DL,03
0B53:000D B8004C        MOV     AX,4C00
0B53:0010 CD21          INT     21

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

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

assume cs:code
code 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 21h
code ends
end

         用debug查看:

-u
0B53:0000 B80020        MOV     AX,2000
0B53:0003 8ED8          MOV     DS,AX
0B53:0005 BB0000        MOV     BX,0000
0B53:0008 8A07          MOV     AL,[BX]
0B53:000A BB0100        MOV     BX,0001
0B53:000D 8A1F          MOV     BL,[BX]
0B53:000F 8A0E0200      MOV     CL,[0002]
0B53:0013 8A160300      MOV     DL,[0003]
0B53:0017 B8004C        MOV     AX,4C00
0B53:001A CD21          INT     21

你可能感兴趣的:(ds,段寄存器,内存偏移量)