@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
code segment
assume cs:code
org 100h
start:jmp begin
begin:push cs
pop ds
push cs
pop es
mov cx,100
mov ax,0
mov bx,1
again:
add ax,bx
call dispaxs
push ax
push dx
mov ah,2
mov dl,13
int 21h
mov dl,10
int 21h
pop dx
pop ax
inc bx
loop again
mov ah,4ch
int 21h
;=========================================
; 将要显示的有符号数置于 ax 中
DISPAXS PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
PUSH BP
PUSH DS
PUSH ES
PUSHF
PUSH CS
POP DS
PUSH CS
POP ES
MOV CX,6
LEA DI,DISPAXSS
@DISPAXS:
MOV BYTE PTR [DI],32
INC DI
LOOP @DISPAXS
PUSH AX
MOV DL,32
MOV AH,2
INT 21H
POP AX
MOV BYTE PTR NZS,0
MOV BYTE PTR SIGNS,0
CMP AX,0
JGE @DISPAXS0
MOV BYTE PTR SIGNS,1
NEG AX
@DISPAXS0:
PUSH AX
LEA SI,DIVARRS
LEA DI,DISPAXSS
INC DI
MOV CX,5
@DISPAXS1:
POP AX
MOV DX,0
MOV BX,[SI]
DIV BX
PUSH DX
CMP AL,0
JNE @DISPAXS2
CMP BYTE PTR NZS,1
JE @DISPAXS2
CMP CX,1
JE @DISPAXS2
MOV DL,20H
JMP @DISPAXS3
@DISPAXS2:
ADD AL,30H
MOV DL,AL
MOV BYTE PTR NZS,1
@DISPAXS3:
MOV BYTE PTR[DI],DL
INC SI
INC SI
INC DI
LOOP @DISPAXS1
POP DX
CMP BYTE PTR SIGNS,1
JNE @DISPAXS6
LEA SI,DISPAXSS
ADD SI,5
@DISPAXS4:
CMP BYTE PTR [SI],32
JE @DISPAXS5
DEC SI
JMP @DISPAXS4
@DISPAXS5:
MOV BYTE PTR [SI],'-'
@DISPAXS6:
LEA DX,DISPAXSS
MOV AH,9
INT 21H
POPF
POP ES
POP DS
POP BP
POP DI
POP SI
POP DX
POP CX
POP BX
POP AX
RET
DIVARRS DW 10000,1000,100,10,1
NZS DB 0
SIGNS DB 0
DISPAXSS DB 32,32,32,32,32,32,'$'
DISPAXS ENDP
;==================================
code ends
end start
int num=1;
int sum=0;
while(sum<=1000)
{
sum=sum+num;
num++;
}
num为自然数;sum为总和;
够懒的,几句指令,写一下发上来多好,贴图印象分就直线降低了。说一下答案吧:
第一:MOV
A,#0FEH,这条指令执行后,累加器A的值为:FEH
第二:ADD
A,#0FEH,续上条指令,该指令执行后,累加器A的值为:FCH
第三:MOV
A,#09H,该指令执行后,累加器A的值为:09H
第四:MOV
PSW,#0,该指令不影响累加器A的值
第五:subb
a,#0A4H,执行该指令后,累计爱器A的值为:65H
将一个存储空间设置为1,预先留两个存储空间,一个用来做加数,一个用来做和数。这个程序需要循环,50次。
第一条指令是设置一个循环标示,
第二条指令存将初值为1的存储空间的数取出存入加数的存储空间。
第三条指令初值为1的那个空间自增1,相加后存到和数中去。
第四条指令,判断循环是否需要结束。
扩展资料:
汇编语言具有更高的机器相关性,更加便于记忆和书写,但又同时保留了机器语言高速度和高效率的特点。汇编语言仍是面向机器的语言,很难从其代码上理解程序设计意图,设计出来的程序不易被移植,故不像其他大多数的高级计算机语言一样被广泛应用。所以在高级语言高度发展的今天,它通常被用在底层,通常是程序优化或硬件 *** 作的场合。
参考资料来源:百度百科-汇编语言
;启动入口
ORG 0000H ;复位启动
LJMP START ;
ORG 0100H ;
;
;主程序
START: MOV DPTR,#NUM ;数据区首地址
MOV B,#32 ;32字节求和
CLR A ;
MOV X,A ;清零和存储单元
MOV Y,A
MOV Z,A
LOOP: CLR A ;
MOVC A,@A+DPTR ;取当前字节数据
ADD A,X ;累加和
MOV X,A
MOV A,Y
ADDC A,#0
MOV Y,A
INC DPTR ;指向下一单元数据
DJNZ B,LOOP ;加完32字节
JMP $ ;死循环
;
ORG 0200H ;开辟数据区
NUM DB 32,2,5,4,9,220,234,7 ;
DB 11,22,51,42,93,220,234,17 ;
DB 31,32,35,43,39,220,234,37 ;
DB 91,82,45,74,89,220,234,97 ;
X EQU 70H ;和存储单元
Y EQU 71H ;
END ;
以上就是关于用汇编语言实现如下程序:进行自然数相加(1+2+3+……+N)。必须利用循环指令。全部的内容,包括:用汇编语言实现如下程序:进行自然数相加(1+2+3+……+N)。必须利用循环指令。、求一个汇编程序,在屏幕上依次显示1到100的累加,第一行显示1,第二行显示3,第三行显示6,第四行10、编写完整的汇编程序,从自然数1开始累加,直到累加和大于1000为止,并把累加结果保存在变量NUM中。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)