data segment
baiwei db ?
shiwei db ?
gewei db ?
data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax ;数据段地址-->DS
mov cx,15 ;循环次数
mov ax,0 ;和
mov bx,0 ;加数
rot: inc bx ;bx+1,加数加1
add ax,bx ;相加,把1,2,3加到ax中,每次只加一个,和放在AX中
loop rot ;cx-1,不等0就循环,等0退出。
mov bl,100
div bl ;把和分解成百位、十位、个位,三个位。用的方法除以100、10取商
;这里除以100,得到商->AL,余数->AH,AL就是百位
mov [baiwei],al
mov al,ah
mov ah,0
mov bl,10 ;上面的余数-->ax
div bl ;这里除以10,得到商->AL,余数->AH,AL就是十位,AH就是个位
mov [shiwei],al
mov [gewei],ah
disp: mov ah,2
mov dl,[baiwei]
add dl,30h
int 21h ;显示百位,用的是DOS功能调用2号功能(显示),显示的ASCII给DL
mov ah,2
mov dl,[shiwei]
add dl,30h
int 21h ;显示十位,用的是DOS功能调用2号功能(显示),显示的ASCII给DL
mov ah,2
mov dl,[gewei]
add dl,30h
int 21h ;显示个位,用的是DOS功能调用2号功能(显示),显示的ASCII给DL
mov ax,4c00h
int 21h ;dos返回功能
code ends
end start
code segment
assume cs:code
org 100h
start:
push cs
pop ds
mov cx,15
mov ax,0
L1:
add ax,cx
loop L1
call dispnum
mov ah,1
int 21h
mov ah,4ch
int 21h
dispnum proc near
; 将要显示的数据放入AX中
mov dx,0
mov bx,10
div bx
mov byte ptr[y+6],dl ;保存个位
mov dx,0
div bx
mov byte ptr[y+5],dl ;保存十位
mov dx,0
div bx
mov byte ptr[y+4],dl ;保存百位
mov dx,0
div bx
mov byte ptr[y+3],dl ;保存千位
mov byte ptr[y+2],al ;保存万位
mov al,byte ptr[y+2]
add al,30h ;万位转ASC2
mov byte ptr[y+2],al
mov al,byte ptr[y+3]
add al,30h ;千位转ASC2
mov byte ptr[y+3],al
mov al,byte ptr[y+4]
add al,30h ;百位转ASC2
mov byte ptr[y+4],al
mov al,byte ptr[y+5]
add al,30h ;十位转ASC2
mov byte ptr[y+5],al
mov al,byte ptr[y+6]
add al,30h ;个位转ASC2
mov byte ptr[y+6],al
mov di,1
disp1:
inc di
cmp di,6
je dispexit
cmp byte ptr[y+di],'0'
jne dispexit
mov byte ptr[y+di],' '
jmp disp1
dispexit:
mov ah,9
lea dx,y
int 21h
ret
y db 10,13,0,0,0,0,0,'$'
dispnum endp
code ends
end start
把存储数据的首地址送入DS寄存器,然后根据你的数据大小(就是几个字节)对DS寄存器做加法,取出数据做加法就好了
mov cx,15
mov ax,0
mov si,1
next:
add ax,si
inc si
loop next
这个不会做