? ? ? ? 如果想将内存空间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