汇编16位指令集 实现1000的累加

DATAS SEGMENT
    ;此处输入数据段代码  
    DATA1 DB 0h,0h,0h,0h
    N DW 4
	X DW 0
DATAS ENDS

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

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    ;此处输入代码段代码
	MOV AX, 0
	MOV BX, 1
	MOV CX, 1000
	mov dx,0
	NEXT:
	add ax,cx
	adc dx,0
	;每计算完一次之后都要打印一下结果,结果的低位保存在ax中,高位保存在dx中
	mov ds:[0],dh
	mov ds:[1],dl
	mov ds:[2],ah
	mov ds:[3],al
	push ax
	push dx
	push cx
	;call print_num_of_dl
	
	 MOV CX,N   ;四次循环
	 MOV BX,X	;从零开始
BE:    ;MOV N,CX
       ;MOV BX,X
 	   push cx	;保存cx的数值
       MOV DL,DATA1[BX]
       INC BX
       ;MOV X,BX
       push bx
       CALL DELY
       pop bx
       pop CX	;读取cx的值
       CMP CX,1
       JE FINISH
       MOV DL,','
       MOV AH,2
       INT 21H
       LOOP BE

	
	;call print_num_of_dl
FINISH:pop cx
	pop dx
	pop ax
	call crlf

	
	loop NEXT
    
    MOV AH,4CH
    INT 21H


CRLF PROC NEAR
       PUSH AX
       PUSH DX
       MOV AH,2
       MOV DL,0DH
       INT 21H
       MOV AH,2
       MOV DL,0AH
       INT 21H
       POP DX
       POP AX
       RET
CRLF ENDP


DELY   PROC NEAR
       MOV BL,DL
       MOV CL,4
       SHR DL,CL
       OR DL,30H
       CMP DL,39H
       JBE AD1
       ADD DL,7
AD1:   MOV AH,2
       INT 21H
       MOV DL,BL
       AND DL,0FH
       OR DL,30H
       CMP DL,39H
       JBE AD2
       ADD DL,7
AD2:   MOV AH,2
       INT 21H
       MOV DL,'H'
       MOV AH,2
       INT 21H
       RET
DELY ENDP

CODES ENDS
    END START

猜你喜欢

转载自blog.csdn.net/qq_20176001/article/details/92658804