实现8个8字节数相加,首先定义数据段
data segment
num1 db 12H,34H,56H,78H,9AH,0ABH,0BCH,0CDH
num2 db 0CDH,0BCH,0ABH,9AH,78H,56H,34H,12H
sum db 8 dup(?)
i db 8
data ends
上面的数据是用16进制来进行表示的从segement....ends之间表示的都是数据段
db 表示定义的是单字节数据 ,放在num1,num2,给i赋值为8
sum db 8 dup(?) 可以把sum视为一个大小为8的数组,把?的值赋值给sum 8 次;
num1,num2也可以视为数组,大小为8,数值从db之后的数里面取用;
定义了一个堆栈段
sseg segment ‘stack’
top db 1010 dup(0)
sseg ends
这个堆栈大小是1010 ,全部赋值为0 ,首地址为top
然后开始编写代码段
assume 指明变量与寄存器之间的联系,用变量寻址时,把assume定义的作为段地址;
code segment
assume cs:code,ds:data
start: mov ax,data
mov dx,ax
mov ax,sseg
mov ss,ax ;算是把ax作为了中专站
mov sp,offset top ;sp:堆栈寄存器
lea si,num1+7 ; 源变址寄存器
lea di,num2+7;目的变址寄存器
lea bx,sum+7
mov cx,8
clc ;清除进位cf
pp:
mov al,[si]
adc al,[di];带进位加法,进位放在cf
mov [bx],al
dec si;--操作
dec di
dec bx
loop pp;循环cx次数
mov ah,4ch
int 21h
code ends
end start