汇编语言如何实现1到15的自加呢?

2025-02-26 14:08:01
推荐回答(5个)
回答1:

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

回答2:

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

回答3:

把存储数据的首地址送入DS寄存器,然后根据你的数据大小(就是几个字节)对DS寄存器做加法,取出数据做加法就好了

回答4:

mov cx,15
mov ax,0
mov si,1
next:
add ax,si
inc si
loop next

回答5:

这个不会做