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