汇编里头,输入6个元素的数组的值,求和!----累加器

这篇博客展示了如何使用汇编语言编程,输入6个整数存储到数组中,然后通过累加器计算这些元素的总和,并将结果显示出来。主要涉及汇编里的数据段、栈段、代码段的定义,以及输入、输出和循环控制等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

data segment
ary  dw 10 dup(?)
sum  dw ?
temp  db 10 dup(?)
data ends

stacker segment stack
    dw 20 dup(?)
top label word
stacker ends

code segment
    assume cs:code,ds:data,ss:stacker

main proc near
 
    mov ax,data
    mov ds,ax
    mov ax,stacker
    mov ss,ax
    lea sp,top
    
    mov cx,6
    mov si,0
L1:
    xor bx,bx
    call near ptr input
    call near ptr line
    mov ary[si],bx
    add sum,bx
    add si,2
    loop L1

    
    mov ax,sum
    mov di,0
    mov cl,10
L2:
    div cl
    mov temp[di],ah
    cmp al,0
    je L3
    add di,2
    xor ah,ah
    jmp L2

L3:
    call near ptr print

    mov ah,4ch
    int 21h
main endp

input proc near
    push ax
    push dx
    push di

    mov di,10d

L4:
    mov ah,01h
    int 21h
    cmp al,0dh
    je L5
    cmp al,'0'
    jb L4
    cmp al,'9'
    ja L4
    sub al,30h
    xor ah,ah
    xchg ax,bx
    mul di
    xchg ax,bx
    add bx,ax
    jmp L4
    
L5:
    ;call near ptr line
    ;mov dx,bx
    ;add dl,30h
    ;mov ah,02h
    ;int 21h
   
    pop di
    pop dx
    pop ax
    ret
input endp


print proc near
    push di
    push dx
    push ax
 
L6:   
    mov dl,temp[di]
    add dl,30h
    mov ah,02h
    int 21h
    cmp di,0
    je L7
    sub di,2
    jmp L6

L7:
    pop ax
    pop dx
    pop di
    ret
print endp

line proc near
  push ax
  push dx
  mov dl,0dh
  mov ah,02h
  int 21h
  mov dl,0ah
  mov ah,02h
  int 21h
  pop dx
  pop ax
  ret
line endp

code ends
end main
好的,我很乐意为您介绍如何使用汇编语言实现两个字节型数组的累加求和。以下是一个示例代码,展示了如何实现这个功能: ```assembly section .data array1 db 10, 20, 30, 40, 50 ; 第一个数组 array2 db 5, 15, 25, 35, 45 ; 第二个数组 sum db 0, 0, 0, 0, 0 ; 存储结果的数组 len equ $ - array1 ; 数组长度 section .text global _start _start: mov ecx, len ; 初始化循环计数器 lea esi, [array1] ; 加载第一个数组的地址 lea edi, [array2] ; 加载第二个数组的地址 lea ebx, [sum] ; 加载结果数组的地址 loop_start: mov al, [esi] ; 从第一个数组加载一个字节 add al, [edi] ; 加上第二个数组的对应字节 mov [ebx], al ; 将结果存储到结果数组 inc esi ; 移动到下一个元素 inc edi inc ebx loop loop_start ; 递减ecx并循环直到为零 ; 退出程序 mov eax, 1 ; 系统调用号(sys_exit) xor ebx, ebx ; 返回状态 int 0x80 ; 调用内核 ``` 这段代码的工作原理如下: 1. 我们定义了三个数组: array1, array2 和 sum。 2. 在 .text 部分,我们初始化了循环计数器(ecx)和指针(esi, edi, ebx)。 3. 在 loop_start 标签处,我们执行实际的累加操作: - 从 array1 和 array2 加载一个字节 - 将它们相加 - 将结果存储到 sum 数组中 4. 我们递增所有指针,以移动到下一个元素。 5. 使用 loop 指令重复这个过程,直到 ecx 减到零。 这个程序会将 array1 和 array2 中对应位置的元素相加,并将结果存储在 sum 数组中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值