汇编:循环输入 5 个数,存储到内存中

在数据段中定义一个变量a2,其中有5个元素(类似于数组),其元素类型为word类型(即每个元素占2个字节,5个元素占10个字节) ,调用5次题目2中的输入子程序分别得到5个整数,依次将它们存放到a2的5个元素中。
offset指令可以获取一个变量距离数据段起始地址的偏移量,如 mov bx,offset a1这条指令可以将a1这个变量距离数据段起始地址的偏移量求出后保存到bx中。
注意: 2中的子程序将处理结果存放在了cpu内部某个寄存器中,而数据段中的变量是在内存中,所以需要把数据从cpu内部的寄存器送往内存中。
每次往a2中存放完一个整数后,指针都要后移两个字节,为下次存储数据做准备。

在数据区定义 a1 和 a2,注意 a2 是数组,然后输入输出即可,每次 si 指针往后走两格,因为一个字符是两个字节。

输入 5 个数到 a2 中,然后输出
在这里插入图片描述

DATAS SEGMENT
    
    a1 dw 223
    a2 dw ?, ?, ?, ?, ?
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    
    mov dl, 0
    mov si, offset a2;
T0: call input
    mov [si], ax
    add si, 2
    add dl, 1
    cmp dl, 5
    jb T0
    
    
    mov dl, 0
    mov si, offset a2;
T1:	mov ax, [si]
	call output
	add si, 2
	inc dl
	cmp dl, 5
	jb T1



    MOV AH,4CH
    INT 21H
input proc
	push bx
	push dx
	push cx
	mov cl, 10
	mov bx, 0
L0: mov ah, 1
	int 21h
	sub al, 48
	cmp al, 0
	jb over
	cmp al, 9
	ja over
	mov ah, 0
	push ax
	mov ax, bx
	mul cl
	pop bx
	add bx, ax
	jmp L0
over:
	mov ax, bx
	pop bx
	pop dx
	pop cx
	ret
input endp
    
    
    
output proc

push dx
	;   调用输出
    mov ch, 0
    mov cl, 10
   	; 每次循环除以 cl
L0: div cl
	; 	除以 cl 以后,结果在 al 中,余数在 ah 中
	;将余数入栈
    push ax
    ; ch 每次增加,记录位数
    inc ch
    mov ah, 0
    cmp al, 0
    ja L0
    
L1: ; 输出函数
	cmp ch, 0
    je over2
    ; 出栈,将栈顶元素存储到 dx 中
    pop dx
    mov dl, dh
    add dl, 48
    mov ah, 2
    int 21h
    dec ch
    jmp L1
    
over2:
pop dx
	ret 
output endp
CODES ENDS

    END START
    
   

在这里插入图片描述

DATAS SEGMENT
    
    a1 dw ? 
    a2 dw ?, ?, ?, ?, ?
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    
   	mov dl, 0
   	mov si, offset a2;
L1: add dl, 1
	mov ah, 1
	int 21h
	mov [si], ax;
	add si, 2
	cmp dl, 5
   	jb L1
   	
   	mov cl, 0
   	mov si, offset a2;
L2: add cl, 1
   	mov dx, [si]
   	mov ah, 2
   	int 21h
   	add si, 2
   	cmp cl, 5
   	jb L2;

    MOV AH,4CH
    INT 21H
    
CODES ENDS

    END START
    
   
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_努力努力再努力_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值