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