實驗5 編寫、調試具有多個段的程序
(5)程序如下,編寫code段中代碼,將a段和b段中的數據依次相加,將結果存到C段中。
(三個程序)
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
assume cs:code
a segment
db 1,2,3,4,5,6,7,8 ;ds
a ends
b segment
db 1,2,3,4,5,6,7,8 ;es
b ends
cd segment
db 0,0,0,0,0,0,0,0 ;ss
cd ends
code segment
start:
mov ax,a
mov ds,ax
mov ax,cd
mov ss,ax
mov bx,0
mov cx,8
s:
mov al,[bx]
add ss:[bx],al
inc bx
loop s
mov cx,8
mov ax,b
mov es,ax
mov bx,0
s0:
mov al,es:[bx]
add ss:[bx],al
inc bx
loop s0
mov ax,4c00h
int 21h
code ends
end start
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
c1 segment
db 0,0,0,0,0,0,0,0
c1 ends
code segment
start:
mov ax,a
mov ds,ax ;將a段地址放入ds
mov ax,b
mov es,ax ;將b段地址放入es中
mov bx,0
mov cx,8
s: mov al,[bx]
add al,es:[bx] ;這裏是把a,b,裏的數據想加再複製到c段
mov dx,c1
mov ds,dx
mov [bx],al
mov ax,a ;將ds重新指回a段//重點的一步
mov ds,ax
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end start
==================================優化後的=====================================
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
c1 segment ;這裏不能用c,c是關鍵字
db 0,0,0,0,0,0,0,0
c1 ends
code segment
start:
mov ax,a
mov ds,ax
mov ax,b
mov es,ax
mov ax,c1
mov ss,ax
mov bx,0
mov cx,4 ;改爲8後,inc bx
s:
mov ax,[bx]
add ax,es:[bx]
mov ss:[bx],ax
add bx,2
loop s
mov ax,4c00h
int 21h
code ends
end start