一 从数据到内存(只需一个ds寄存器)
【实验4(2)】
assume cs:code
code segment
mov ax,0020h
mov ds,ax
mov bx,0
mov cx,64
s: mov [bx],bl
inc bl
loop s
mov ax,4c00h
int 21h
code ends
end
0B73:000D FEC3 INC BL
0B73:000F E2FA LOOP 000B
0B73:0011 B8004C MOV AX,4C00
0B73:0014 CD21 INT 21
0B73:0016 E55D IN AX,5D
0B73:0018 C3 RET
0B73:0019 90 NOP
0B73:001A 55 PUSH BP
0B73:001B 8BEC MOV BP,SP
0B73:001D 81EC9000 SUB SP,0090
-g 16
Program terminated normally
-d 20:0 3f
0020:0000 00 01 02 03 04 05 06 07-08 09 0A 0B 0C 0D 0E 0F ................
0020:0010 10 11 12 13 14 15 16 17-18 19 1A 1B 1C 1D 1E 1F ................
0020:0020 20 21 22 23 24 25 26 27-28 29 2A 2B 2C 2D 2E 2F !"#$%&'()*+,-./
0020:0030 30 31 32 33 34 35 36 37-38 39 3A 3B 3C 3D 3E 3F 0123456789:;<=>?
-\
\
\
问题:如果数据和bl不一致,如何实现数据循环传送?
二 从内存到内存(需ds和es两个寄存器)
【P120】
assume cs:code
code segment
mov ax,0ffffh
mov ds,ax
mov ax,0020h
mov es,ax
mov bx,0
mov cx,12
s: mov al,[bx]
mov es:[bx],al //内存之间数据传送需al寄存器作媒介!
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
0B73:0000 B8FFFF MOV AX,FFFF
0B73:0003 8ED8 MOV DS,AX
0B73:0005 B82000 MOV AX,0020
0B73:0008 8EC0 MOV ES,AX
0B73:000A BB0000 MOV BX,0000
0B73:000D B90C00 MOV CX,000C
0B73:0010 8A07 MOV AL,[BX]
0B73:0012 26 ES:
0B73:0013 8807 MOV [BX],AL
0B73:0015 43 INC BX
0B73:0016 E2F8 LOOP 0010
0B73:0018 B8004C MOV AX,4C00
0B73:001B CD21 INT 21
0B73:001D 81EC9000 SUB SP,0090
-g 1d
Program terminated normally
-d ds:0 b
0B63:0000 CD 20 FF 9F 00 9A F0 FE-1D F0 4F 03 . ........O.
-d es:0 b
0B63:0000 CD 20 FF 9F 00 9A F0 FE-1D F0 4F 03 . ........O.
-
注:如果偏移量不一致,则增加寄存器(如dx).
总结:两者区别!