用汇编语言实现如下程序:进行自然数相加(1+2+3+……+N)。必须利用循环指令。

作者&投稿:迪韦 (若有异议请与网页底部的电邮联系)
C语言循环题!编写一个程序,求s=1+(1+2)+(1+2+3)+...+(1+2+3+...+n)。~

修改如下
#include
int main(void)
{
int i,j,n;
int item,s; //此处数据类型定义错误;
scanf("%d",&n);
s=0; n=5;
for(i=1;i<=n;i++){
item=0; //item应该是从0开始;
for(j=1;j<=i;j++) //第二层循环应该小于等于i;
item=item+j;
s=s+item;
}
printf("%d
",s);
return 0;
}
图为原程序在第二层循环加了个输出,查出第二层循环有问题。

扩展资料:
c语言书写规则:
1.一个说明或一个语句占一行。
2.用{} 括起来的部分,通常表示了程序的某一层次结构。{}一般与该结构语句的第一个字母对齐,并单独占一行。
3.低一层次的语句或说明可比高一层次的语句或说明缩进若干格后书写。以便看起来更加清晰,增加程序的可读性。在编程时应力求遵循这些规则,以养成良好的编程风格。
参考资料:
百度百科-c语言

利用cmp指令就可以实现:
写法如下:
CMP SI,DI //比较两个寄存器的数值是否相等
JE label如果相等就跳转执行label
。。。
label:
MOV AH,09H
LEA DX,MESS2
INT 21H

@N 的极限是92681。  以下程序将其赋值 100000 时,它返回的为92681。
当你给定的@N 在92681以内时,它会输出自然数累加结果。
(程序是用16位的寄存器实现,比32位的寄存器实现要复杂很多 !)

        CODE  SEGMENT
              ASSUME    CS:CODE
          @N  DD        100000
      START:
              PUSH      CS
              POP       DS
              PUSH      CS
              POP       ES
              MOV       AX,0
              MOV       DX,0
              MOV       SI,0
              MOV       DI,0
              MOV       CX,WORD PTR @N
              MOV       BX,WORD PTR @N+2
         @0:
              ADD       AX,SI
              ADC       DX,DI
              JC        @ERR
              ADD       SI,1
              ADC       DI,0
              SUB       CX,1
              JNC       @0
              SBB       BX,0
              JNC       @0
              CALL      DISPDXAX
              
      @EXIT:
              MOV       AH,4CH
              INT       21H
              
       @ERR:
              SUB       SI,1
              SBB       DI,0
              MOV       AX,SI
              MOV       DX,DI
              CALL      DISPDXAX
              JMP       @EXIT

 
    DISPDXAX  PROC      NEAR
    ; 将要显示的32位无符号数置于dx、ax中    
              PUSH      AX
              PUSH      BX
              PUSH      CX
              PUSH      DX
              PUSH      SI
              PUSH      DI
              PUSH      BP
              PUSHF
              MOV       WORD PTR [Y],AX
              MOV       WORD PTR [Y+2],DX
              MOV       AX,WORD PTR [Y]
              MOV       DX,WORD PTR [Y+2]
              MOV       BX,WORD PTR [Z]
              MOV       CX,WORD PTR [Z+2]
              MOV       WORD PTR N,0
        MM0:  INC       WORD PTR N
              SUB       AX,BX
              SBB       DX,CX
              JNC       MM0
              DEC       WORD PTR N
              ADD       AX,BX
              ADC       DX,CX
              MOV       WORD PTR[Y],AX
              MOV       WORD PTR[Y+2],DX
        MM1:  LEA       DI,CC
              ADD       DI,9
         M2:
              MOV       AX,WORD PTR [Y]
              MOV       DX,WORD PTR [Y+2]
              MOV       BX,10000
              DIV       BX
              PUSH      AX
              PUSH      DX
              POP       DX
              MOV       CX,4
              MOV       AX,DX
         M3:  MOV       DX,0
              MOV       BX,10
              DIV       BX
              ADD       DL,30H
              MOV       [DI],DL
              DEC       DI
              LOOP      M3
              POP       AX
              MOV       CX,1
         M4:  MOV       DX,0
              MOV       BX,10
              DIV       BX
              ADD       DL,30H
              MOV       [DI],DL
              DEC       DI
              LOOP      M4
              MOV       AX,WORD PTR N
              MOV       CX,5
         M5:  MOV       DX,0
              MOV       BX,10
              DIV       BX
              ADD       DL,30H
              MOV       [DI],DL
              DEC       DI
              LOOP      M5
              LEA       DX,LFCR
              MOV       AH,9
              INT       21H
              MOV       CX,9
              LEA       SI,CC
         M6:
              MOV       AL,[SI]
              CMP       AL,'0'
              JNE       M7
              MOV       BYTE PTR [SI],32
              INC       SI
              LOOP      M6
         M7:
              LEA       DX,CC
              MOV       AH,9
              INT       21H
              POPF
              POP       BP
              POP       DI
              POP       SI
              POP       DX
              POP       CX
              POP       BX
              POP       AX
              RET
           Y  DD        ?
          CC  DB        10 DUP(' '),10,13,'$'
        LFCR  DB        10,13,'$'
           Z  DD        100000
           N  DW        0
    DISPDXAX  ENDP

        CODE  ENDS
              END       START


mov ecx , N
mov eax , 1
loop1:
add eax , ecx
loop loop1

完成。
界限当然是32位无符号数的表示范围了,就是0xffff ffff

汇编?
C可以吗?
mian()
{float sum,t,n;
sum=0;t=0;
scanf(%f",&n);
for(t=1;t<=n;t++)
sum=sum+t;
printf("%f",sum);
}
将上述程序编译得到汇编文件


汇编语言编程序
2. 若结果大于最大正数,肯定是两个正数相加;若结果小于最小负数,则肯定是两个负数相加;3. 溢出标志只能判断是否溢出,而不能判断是正溢出,还是负溢出。所以应该先判断OF标志位,若有溢出,接着判断DATA1或者是DATA2的符号,若为正数,则为正溢出;否则为负溢出。程序如下,我是按在386上编的。

8086汇编语言,实现两个简单程序高分求助,在线等
DATA SEGMENT COUNT DW 91 ;计数器 MESS DB ‘5 s delayed!’,0AH,0DH,’$’DATA ENDS CODE SEGMENT MAIN PROC FAR ASSUME CS:CODE,DS:DATA,ES:DATA START: PUSH DS MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX MOV AL,1CH ;得到原中断向量 MOV AH,35H INT 21H PUSH ES ;存储原中断...

用汇编语言编程,要求实现以下分段函数。
分段函数,参考程序如下:mov A, X cjne A, #11, QQQ ;A 试减11 QQQ: jnc DY6 ;无借位(即大于10)转移.cjne A, #2, AAA ;A 试减2 AAA: jc XY2 ;有借位(即小于1)转移.add A, X add A, X ;A=2X clr C subb A, #1 mov Y, A ;Y = 2X - 1 sjmp _END DY10:add...

汇编语言程序设计
2、汇编程序对宏通过宏扩展来加入其定义体,宏引用多少次,就相应扩展多少次,所以,引用宏不会缩短目标程序;而子程序代码在目标程序中只出现一次,调用子程序是执行同一程序段,因此,目标程序也得到相应的简化;3、宏引用时,参数是通过“实参”替换“形参”的方式来实现传递的,参数形式灵活多样,而子...

用x86 CPU汇编语言设计一个实现如下C语言语句功能的程序
loop L1 mov ax,4c00h int 21h code ends end start 这段代码超简单。我已经在本机运行过。但是你就这么运行结果都为零。因为你没给我数组的初值。但是这段代码完全实现你想要的功能。你要是还不明白,我也没办法。你用的时候赋初值就行,就那个数据段有 ?的地方换成数据,明白吧。

如何用汇编语言实现排序
用汇编语言实现排序,通常使用冒泡法。将数据段DATA开始的16个数排序,前小后大,程序示例如下:DATAS SEGMENT DATA DB 74,68,58,66,69,254,186,6,10,98,34,90,128,222,33,0 COUNT DB 10H DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,ES:DATAS START:MOV AX,DATAS MOV DS,AX MOV...

用汇编语言编写一个程序
print MACRO para ;定义一个宏,这样输出字符串的时候,可以省些事儿 lea dx,para mov ah,9 int 21h ENDM data segment msg1 db '请用拼音输入姓名学号[格式为:XinMing,XuHao$'buffer db 50,52 dup(0)' ;为什么是52?因为你可以输入50个,而系统要用1个字节,在后面放...

汇编语言,设计程序.分别从键盘输入一位十进制数X和Y,用乘除指令实现Z=...
c++语言代码如下:include <iostream.h> void main(){ double X,Y,Z;cout<<"请输入X,Y:"<<endl;cin>>X>>Y;Z=(X+20)\/6-4*Y;cout<<Z;}

51单片机 跑马灯程序
即 循环 ;延时子程序10秒=250usX2X200X100 t10s:mov r5,#100 lpr5:mov r6,#200 lpr6:mov r7,#250 djnz r7,djnz r6,lpr6 djnz r5,lpr5 ret end 把灯的正极接电源正极 即vcc 负极分别接p0.0-p0.5 此时 给p0 送0灯就亮 1灯就不亮 程序已经过调试 可用 仿真如下:...

跪求答案啊,谢谢各位了:以完整的汇编语言源程序结构编写实现以下要求的...
输入部分完成,接下来是数据转移到DATA,用17次循环,注意寄存器清零 MOV AL,[BUFFER+SI]MOV [DATA+NUM],AL ;NUM自己定义吧 INC SI ADD NUM,1 查找的话用CMP咯,后面的简单了。能帮的就这么多,睡觉去 P.S.对指令不熟悉的话用这个吧,不会就查,越用越熟。调试的话用个人觉得emu8086犀利...

惠来县19385665794: 用汇编语言实现如下程序:进行自然数相加(1+2+3+……+N).必须利用循环指令. -
曹林乐乐: mov ecx , Nmov eax , 1 loop1:add eax , ecxloop loop1完成.界限当然是32位无符号数的表示范围了,就是0xffff ffff

惠来县19385665794: 用汇编语言编写求前100个自然数的和的完整程序 -
曹林乐乐: 这是最简单的了,呵呵!程序如下: code segmentorg 100h main proc farmov ax,1 ;初始化mov cx,99 ;设置循环次数ax abc: inc axcmp ax,100 ;和100比较,不相等转,相等就结束jnz abcmov ax,4c00h ;返回操作系统int 21h main endp code endsend main 大哥,我不知道你是怎么参加考试的,我估计你也不能及格拉!哈哈,开个玩笑

惠来县19385665794: 写一个汇编语言程序,实现1到100的自然数之和,并将结果显示输出. -
曹林乐乐: DATA SEMGNET A DW ? STACK SEGMENT STACK DB 150 DUP(0) STACK ENDS CODE SEGMENT ASSUME DS:DATA ,CS:CODE, SS:STACK START: MOV AX,DATA MOV DS,AX MOV BX,0 MOV CX,100 MOV AX,1 L1: ADD BX,AX INC AX DEC CX JNZ L1 MOV A,BX MOV AH,4CH INT 21H

惠来县19385665794: 要求用两种方法来汇编语言,用编程编写程序实现自然数1到100的累加,怎么弄? -
曹林乐乐: 第一种: MOV CX,100 MOV AX,0 MOV BX,1 AGAIN:ADD AX,BX INC BX LOOP AGAIN 第二种 MOV CX,100 MOV AX,0 LOOP1:ADD AX,CX LOOP LOOP1 截图靠自己吧~记得给分啊(*^__^*) 嘻嘻……

惠来县19385665794: 用汇编语言编程生成40个自然数,使任意两个数的差不相等,麻烦附上源程序,谢谢,实在是没有思路 -
曹林乐乐: 设计一个加法器程序,可以提示在屏幕上,无需任何用户输入两个整数,添加程序集是不是很常见的,需要一个特定的CPU,每个CPU单独编译的一些区别,它是建议你使用C

惠来县19385665794: 用汇编语言编写将片外RAM中0000H~001FH单元依次赋值为从5开始的自然数的程序. -
曹林乐乐: org 0000h ;复位启动 ljmp start ; org 0100h ; ; ;主控程序 start: mov dptr,#0000h mov b,#32 mov a,#5 loop: mov @dptr,a inc a inc dptr djnz b,loop jmp $ ;死循环 end ;

惠来县19385665794: 用汇编语言编写程序:从自然数1加到100,并画出流程图.求解答.谢谢 -
曹林乐乐: data segmentx db 1 data ends code segmentassume cs:code,ds:data start:mov ax,datamov ds,axmov ax,0mov cx, 100 s:add ax,xadd x,1 loop s mov ax,4c00h int 21h code ends end start

惠来县19385665794: 用汇编语言编程求1至50之间的自然数中的奇数的累加和,结果送到RESULT单元 -
曹林乐乐: 问题补充:要能运行的!需要过程和截图! 第一种: MOV CX,100 MOV AX,0 MOV BX,1 AGAIN:ADD AX,BX INC BX LOOP AGAIN 第二种 MOV CX,100,oeWgAw

惠来县19385665794: 用汇编语言实现从1到50的自然数之和,将结果转换成十进制形式输出 -
曹林乐乐: .model small .stack 100h .code main procxor ax, axmov cx, 50 @@1:add ax, cxloop @@1call printmov ax, 4c00hint 21h main endp; ; print proc nearpush bxpush dxmov bx, 10xor dx, dxor ax, axJZ print_0div bxcall printadd dl, '0'...

惠来县19385665794: 汇编语言编程
曹林乐乐: sub add100; mov eax,0; mov ecx,100; @loop: add eax,ecx; dec ecx; jnz @loop ret

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网