一 计算一段内存空间中数据的和(累加和)
【P112】
assume cs:code
code segment
mov ax,0ffffh
mov ds,ax
mov ax,0
mov bx,0
mov cx,12
s: add al,[bx]
mov ah,0
add dx
inc bx
loop s
mov 4c00h
int 21h
code ends
end
注:8位数据,使用中间寄存器al/ah,最后存在dx中(要求一个字节一个字节累加)。
二 计算代码段(或数据段)中定义的数据之和(累加和)
【P124】
assume cs:code
code segment
dw 0123h,0456h,0789h,0abch,0defh,0321h,0654h,0987h
start: mov ax,0 //start开始出现,目的:使编译后的可执行文件能由操作系统直接执行,否则只能用debug来执行程序
mov bx,0
mov cx,8
s: add ax,[bx]
add bx,2
loop s
mov ax,4c00h
int 21h
code ends
end start
注:16数据,直接加到ax中。
三 计算a段和b段之和(数据依次相加),并存到c段(8位数据,须用到中间寄存器ax:即al/ah)
【实验5(5)】
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 ax,0
mov bx,0
mov cx,8
s: mov ah,0
mov al,[bx]
add al,[bx+10h]
mov [bx+20h],al
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end start
0B76:0013 884720 MOV [BX+20],AL DS:0020=00
-g 16
AX=0002 BX=0000 CX=0008 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0B73 ES=0B63 SS=0B73 CS=0B76 IP=0016 NV UP EI PL NZ NA PO NC
0B76:0016 43 INC BX
-d c:0 7
000C:0000 EA AE 10 A7 00 E8 00 F0 ........
-t
AX=0002 BX=0001 CX=0008 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0B73 ES=0B63 SS=0B73 CS=0B76 IP=0017 NV UP EI PL NZ NA PO NC
0B76:0017 E2F2 LOOP 000B
-d c:0 7 //此时数据未变,是不是因为c段关联,如:cs:code,data:c
000C:0000 EA AE 10 A7 00 E8 00 F0 ........
-d ds:20 27
0B73:0020 02 00 00 00 00 00 00 00 ........
-g 19
AX=0010 BX=0008 CX=0000 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0B73 ES=0B63 SS=0B73 CS=0B76 IP=0019 NV UP EI PL NZ NA PO NC
0B76:0019 B8004C MOV AX,4C00
-d ds:20 27
0B73:0020 02 04 06 08 0A 0C 0E 10 ........
-
注:8位数据,同理使用al/ah,并存到c段中。