纷纭教育
您的当前位置:首页汇编程序正负数及零的个数统计

汇编程序正负数及零的个数统计

来源:纷纭教育
STACK SEGMENT STACK 'STACK' DW 100H DUP(?) TOP LABEL WORD STACK ENDS DATA SEGMENT

NOTE0 DB 'DATA: ',0DH,0AH,'$'

NOTE1 DB 0DH,0AH,'GTEATZ $' NOTE2 DB 0DH,0AH,'ZERO $' NOTE3 DB 0DH,0AH,'LITTLEZ $'

BUFFER DW 14,-8,9,0,8,-3,-8,22,34,-24,21,46,75,23,-33 GREATZ DW ? ZERO1 DW ? LITTLEZ DW ?

MESS1 DB 0DH,0AH,'NAME:WUYAOZENG NO:12041215',0DH,0AH,'$' MESS2 DB 'NAME:XUTAO NO:12041429',0DH,0AH,'$'

OUT_STR DB 150 DUP('$') DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START:

MOV AX,DATA MOV DS,AX MOV ES,AX MOV AX,STACK MOV SS,AX LEA SP,TOP XOR AX,AX

MOV GREATZ,AX MOV ZERO1,AX MOV LITTLEZ,AX MOV CX,14

LEA SI,BUFFER+2

ST_COUNT:

MOV AX,[SI] ADD SI,2 AND AX,AX JLE COUNT1 INC GREATZ JMP COUNT3 COUNT1:

JL COUNT2

INC ZERO1 JMP COUNT3 COUNT2:

INC LITTLEZ COUNT3:

DEC CX

JNZ ST_COUNT

LEA DX,NOTE0 MOV AH,09H INT 21H

LEA BX,BUFFER MOV CX,14 ADD BX,2

D2A:

MOV AX,[BX] AX中

CALL DEC2ASC 过程

MOV DL,' ' MOV AH,2 INT 21H

ADD BX,2 ;后移 LOOP D2A

MOV DX,OFFSET NOTE1 MOV AH,9 INT 21H

MOV AX,GREATZ CALL DEC2ASC

MOV DX,OFFSET NOTE2 MOV AH,9 INT 21H

MOV AX,ZERO1

CALL DEC2ASC

MOV DX,OFFSET NOTE3 MOV AH,9 INT 21H

MOV AX,LITTLEZ CALL DEC2ASC

;读出二进制数放在 ;调用转化和打印;输出空格

MOV AH,09H LEA DX,MESS1 INT 21H

MOV AX,4C00H

MOV AH,09H LEA DX,MESS2 INT 21H

MOV AX,4C00H

MOV AH,4CH INT 21H

;========================================================================

DEC2ASC PROC

PUSH BX ;保护 PUSH CX

LEA DI,OUT_STR ;将处理后的放入DI MOV DX,DI

CMP AX,0 JNE NON_0

ZERO: MOV BYTE PTR[DI],'0' ;如果是0 MOV BYTE PTR[DI+1],'$' JMP OUT_ASC

NON_0: TEST AX,8000H ;不是0

JZ PTIVE ;判断符号,是正号跳转 NTIVE: NEG AX ;取反 MOV BYTE PTR[DI],'-' ;置负号 JMP CON

PTIVE: MOV BYTE PTR[DI],'+' ;置正号

CON: INC DI

MOV DX,0

MOV CX,10000 ;万位

IDIV CX ;带符号数除法 ADD AL,30H

MOV byte ptr[DI],AL

MOV AX,DX MOV DX,0

MOV CX,1000 ;千位 IDIV CX

ADD AL,30H ;加30H变成ASCII MOV byte ptr[DI+1],AL ;写入

MOV AX,DX

MOV CL,100 IDIV CL

ADD AL,30H

MOV byte ptr[DI+2],AL

MOV AL,AH MOV AH,0

MOV CL,10 IDIV CL

ADD AL,30H

MOV BYTE PTR[DI+3],AL ADD AH,30H

MOV BYTE PTR[DI+4],AH

OUT_SIG:LEA DI,OUT_STR

MOV DL,BYTE PTR[DI] MOV AH,2 INT 21H

INC DI

MOV DX,DI

B2: CMP BYTE PTR[DI],'0' JNE OUT_ASC INC DI INC DX JMP B2

OUT_ASC:MOV AH,09H INT 21H

POP CX POP BX XOR AX,AX RET

;百位 ;十位 ;个位 ;打印 DEC2ASC ENDP

;====================================

CODE ENDS END START

实验结果:

因篇幅问题不能全部显示,请点此查看更多更全内容