汇编程序:循环数值累加与显示

循环数值累加与显示

一、实验内容及

1.设计一个程序来计算S=1+2·3+3·4+4·5+……+N(N+1),直到N(N+1)超过200为止。程序的结果应在屏幕上显示。
2.清零从内存地址3000H开始的100个字节存储单元。
注意:本实验需要在DEBUG调试环境下完成,包括编写汇编程序、执行程序及结果检验。

二、实验步骤

实验内容一:
1.编写实验程序。
2.输入源代码。
3.对程序进行汇编、链接,执行程序并验证结果。

实验内容二:
1.输入源代码并确保其正确无误。
2.从3000H地址开始,对100个存储单元使用E命令输入任意数值。
3.程序执行可以通过DEBUG的G命令完成,或者使用T命令进行单步跟踪。
4.使用D命令来检验执行结果。

三、实验报告

1. 源程序

程序一

CODE SEGMENT
ASSUME CS:CODE
START:
    mov dx,0001h       ; 初始化dx为1,用于存储结果累加
    mov bl,02h         ; 初始化bl为2,作为循环中的乘数
lop2:
    xor ax,ax          ; 清零ax寄存器
    mov al,bl          ; 将bl的值移入al
    inc bl             ; bl自增1
    mul bl             ; 无符号乘法,结果存储在ax中
    add dx,ax          ; 将ax中的乘法结果累加到dx中
    cmp ax,00C8h       ; 将ax与200 (00C8h) 比较
    jna lop2           ; 若ax小于等于200,则跳转回lop2继续循环
    mov ch,04H         ; 初始化ch为4,用于下一个循环
    mov cl,04H         ; 初始化cl为4,用于旋转指令
lop1:
    rol dx,cl          ; 将dx向左循环移位cl次
    push dx            ; 将dx压入栈保存
    and dl,0Fh         ; 与操作,获取dx的低4位
    cmp dl,09h         ; 比较dl与9
    jbe next           ; 如果dl小于等于9,跳转到next
    add dl,7           ; 如果dl大于9,将dl增加7
next:
    add dl,30h         ; 将dl增加30h,准备输出
    mov ah,2           ; 设置ah为2,准备调用中断21h进行字符显示
    int 21h            ; 调用中断21h,输出字符
    xor dx,dx          ; 清零dx
    pop dx             ; 从栈中恢复dx的值
    dec ch             ; ch自减1
    jnz lop1           ; 如果ch不为零,则跳转回lop1继续循环
    MOV AH,4CH         ; 准备退出程序
    INT 21H            ; 调用中断21h,结束程序
CODE ENDS
END START

程序二

CODE SEGMENT
ASSUME CS:CODE
ORG 3000H             ; 设置程序起始地址为3000H
START:
    CLD                ; 清除方向标志,确保串操作从低地址到高地址
    MOV CX,0064H       ; 设置计数器为100(0064H)
    XOR AX,AX          ; 将AX清零
    REP STOSW          ; 重复存储字符串操作,将AX的值存储到ES:DI指向的内存,并更新DI
    HLT                ; 暂停执行,等待中断
    MOV AX,4C00H       ; 准备退出程序
    INT 21H            ; 调用中断21h,结束程序
CODE ENDS
END START

2. 对程序中用到的寄存器说明其功能。

AX:累加器。所有I/O指令都通过AX与接口传送信息,中间运算结果也多放于AX中;
BX:基址寄存器。在间接寻址中用于存放基地址;
CX:计数寄存器。用于在循环或串操作指令中存放计数值;
DX:数据寄存器。在间接寻址的I/O指令中存放I/O端口地址;在32位乘除法运算时,存放高16位数。
DF:方向标志位。在数据串操作时确定操作的方向。
ZF: 零标志位。当运算结果为零时ZF=1
段寄存器:用于存放相应逻辑段的段基地址,8088有4个16位段寄存器
CS(代码段)指明代码段的起始地址
SS(堆栈段) 指明堆栈段的起始地址
DS(数据段) 指明数据段的起始地址
ES(附加段) 指明附加段的起始地址

3. 总结计数控制循环程序的设计方法。

将循次数放入CX中,CX=0终止。

4. 说明怎样使用DEBUG进行程序调试的。调试过程中所遇到的问题是如何解决的。

程序一
(1)编译
在这里插入图片描述
(2)连接
在这里插入图片描述
(3)运行
在这里插入图片描述
结果
在这里插入图片描述
程序二
(1)编译
在这里插入图片描述
(2)连接
在这里插入图片描述
查看程序执行
在这里插入图片描述
查看地址信息
在这里插入图片描述在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值