assume cs:code a segment db 1,2,3,4,5,6,7,8 a ends b segment db 1,2,3,4,5,6,7,8 b ends c segment db 0,0,0,0,0,0,0,0 c ends code segment start: mov ax,a mov ds,ax mov si,0 mov cx,8 s: mov al,ds:[si] add al,ds:[si+10h] mov ds:[si+20h],al inc si loop s mov ax,4c00h int 21h code ends end start
如果a的段地址为x,则b的段地址为x+1,c的段地址为x+2.
所以在程序里,mov ax,a
mov ds,ax将a的段地址放入ax里。在通过ds:[si+10h],ds:[si+20h]访问b和c
注意:mov 内存,内存 是不行的。所以如果用ax,bx寄存器来保存a,b,c的段地址,并写出mov ax:[si],bx[si]是错误的。
assume cs:code a segment dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh a ends b segment dw 0,0,0,0,0,0,0,0 b ends code segment start: mov ax,b mov ss,ax mov sp,16 mov ax,a mov ds,ax mov cx,8 mov bx,0 s0:push ds:[bx] add bx,2 loop s0 mov cx,8 mov ax,4c00h int 21h code ends end start